2015-05-02 1 views
1

Я хочу напрямую получить доступ к размеру резидентного набора (RSS) процесса изнутри модуля ядра (я хочу принять решение в режиме реального времени на основе RSS, поэтому вычисление его каждый раз для меня является плохим вариантом).Как напрямую получить доступ к размеру резидентного набора (RSS) процесса из модуля ядра?

/proc/$PID/status имеет поле VmRSS, которое я могу использовать, но я не знаю, как получить эту информацию из модуля ядра.

ответ

3

Включает 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); 
} 
+0

В качестве альтернативы, 'file_pages = task_struct -> mm -> rss_stat.count [MM_FILEPAGES] .counter; anon_pages = task_struct -> mm -> rss_stat.count [MM_ANONPAGES] .counter; rss = file_pages + anon_pages; ' – Neo