如何从内核模块中直接访问进程的驻留集大小(RSS)?

How to directly access Resident Set Size (RSS) of a process from within kernel module?

我想从内核模块内部直接访问进程的驻留集大小 (RSS)(我想根据 RSS 做出实时决策,所以每次都计算它对我来说是一个糟糕的选择) .

/proc/$PID/status 有一个我可以使用的 VmRSS 字段,但我不知道如何从内核模块中获取该信息。

包括 linux/mm.h,并调用 get_mm_rss(current->mm),其中当前为 task_struct* 以完成所需的任务。


使用LXR查找实际上是用来获取VmRSS的:

来自fs/proc/task_mmu.c

hiwater_rss = total_rss = get_mm_rss(mm);
[...]
seq_printf(m,
           [...]
           "VmRSS:\t%8lu kB\n"
           [...]
           total_vm << (PAGE_SHIFT-10)

其中 get_mm_rss() 定义在 include/linux/mm.h:

static inline unsigned long get_mm_rss(struct mm_struct *mm)
{
    return get_mm_counter(mm, MM_FILEPAGES) +
        get_mm_counter(mm, MM_ANONPAGES);
}