[英]Calculating a Process's Memory Usage
我有一个指向正在运行的进程的指针。 我想知道该进程占用了全部物理内存。
我尝试了这个,但我得到0作为返回值。
unsigned long mem_usage(struct task_struct *process)
{
return process->mm->total_vm/2048 * 100000; // this is wrong vm means virtual memory.
}
process->mm->total_vm
返回字节对吗? 有没有更简单的方法来计算?
unsigned long total_vm; /* Total pages mapped */
是页面的大小。
这意味着,如果要以字节为单位的大小,则必须将页面转换为字节
total_vm << PAGE_SHIFT
更新:
将字节转换为页面的相反方法是
pages = bytes >> PAGE_SHIFT;
但这仅适用于整页。 如果bytes
是一些页面加上一些剩余的字节,则必须增加页面数或
pages = (bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
对于仅2 GiB,这将是
pages_2gb = (2 * 1024 * 1024 * 1024) >> PAGE_SHIFT;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.