首页 >> 租房攻略

通过内核观察计划

2021-09-06 来源:延安租房网

输出解释 CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为: 参数 解释 /proc//status Size (total pages) 任务虚拟地址空间的大小 VmSize/4 Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4 Shared(pages) 共享页数 0 Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4 Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4 Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4 dt(pages) 脏页数量 通过内核代码,我们可以更加清楚的了解其含义: 显示该信息主要是通过 proc_pid_statm 该函数来实现的。如果对proc的机制不了解,请参考《linux设备驱动程序》。 其调用过程:proc_pid_statm-statm_pmd_range-statm_pte_range。目的是从地址区间逐渐转化成具体的每个页表。阅读代码,只需了解一个大概,不用了解很多细节,要比写起来轻松许多。 其中totals,pages,shared,dirty的是通过虚拟地址的页表来进行判断。 do { pte_t page = *pte; struct page *ptpage; address += PAGE_SIZE; pte++; if (pte_none(page)) continue; ++*total; //是合法的页都计算在内。 if (!pte_present(page)) continue; ptpage = pte_page(page); if ((!VALID_PAGE(ptpage)) || PageReserved(ptpage)) continue; ++*pages; //只有页表中含有present标记的,计算在内。 if (pte_dirty(page)) ++*dirty; //页表中dirty标记,计算在内。 if (page_count(pte_page(page)) 1) ++*shared; //页表的所有者超过1的,就认为共享。} while (address end);trs、drs、lrs是通过线性地址区间来进行区分的。int proc_pid_statm(struct task_struct *task, char * buffer)。。。。。while (vma) {。。。。。。。。。。。 if (vma-vm_flags VM_EXECUTABLE) //该线性区间的flags标志为可执行。 trs += pages; /* text */ else if (vma-vm_flags VM_GROWSDOWN) //该线性区间的flags标志为向下增长。 drs += pages; /* stack */ else if (vma-vm_end 0x) //结尾线性地址大于0x。 lrs += pages; /* library */ else //这块区间应该是数据区与堆。 drs += pages; vma = vma-vm_next;}pages=trs+drs+lrs

光头还留着一缕长发 因此说,trs drs lrs 与totals,pages,shared,dirty两组,分别从两个角度观察内存。

黄石治疗白癜风医院费用
呼和浩特治疗阳痿多少钱
东莞治疗白癜风多少钱