【发布时间】:2018-07-01 12:48:43
【问题描述】:
我正在尝试查找在 Linux os (ubuntu 14.04) 上运行的 c 程序的驻留集大小。我得到正在运行的 C 程序的 PID 并将其传递给自定义内核模块。内核模块找出*task 并提取*mm 指针。然后我循环遍历所有VM areas 并在每个VM area 中再次循环遍历对齐virtual addresses 的每个页面并请求page_walk(virtual addresses) 以获得pte 类型的pte_t 结构。然后我使用pte_preset()函数来检查内存中实际物理页的存在。
我面临的问题如下:
rss 值与htop 或top 中显示的值不匹配。虽然我计算的值确实会随着测试 C 程序访问更多内存(使用一些数组访问)而按比例增加。
我发现htop 应用程序的rss 值给出的结果与Linux 内核本身提供的get_mm_struct() 函数调用给出的结果相同。
static inline unsigned long get_mm_rss(struct mm_struct *mm)
{
return get_mm_counter(mm, MM_FILEPAGES) +
get_mm_counter(mm, MM_ANONPAGES) +
get_mm_counter(mm, MM_SHMEMPAGES);
}
我的问题是如何统计或检测这些匿名页面和共享页面?需要检查哪些位?
谢谢!
【问题讨论】:
标签: c linux memory-management linux-kernel