[译]指定进程更新/proc/pid/smaps中PSS值得频率是多久?
来源:互联网 发布:骨架软件 编辑:程序博客网 时间:2024/05/19 10:52
问题:
如果n个进程共享大小为M的库L,那么它们对PSS的贡献是M/n。
现在假定一个进程终止了,那么贡献值变成M/(n-1)。
Q1:我的问题是这种变化在多久反映到仍然运行和使用共享库的进程的PSS值?
Q2:作为一个普通情况,假定只有两个进程使用大小为100
k的共享库L。每个进程的PSS贡献是50K。现在当P2死亡了,只有一个进程使用库L。这样他的PSS将会增加变成100K。多快会发生,P2死亡时,或者其他时刻?之后多久?
回答:
立刻就反映了。没有延误。当读取/proc/<pid>/smaps
时,实际触发了该进程的页表遍历。关于映射的信息被计算,之后显示,没有任何延误。
/proc/<pid>/smaps
文件背后的代码在fs/proc/task_mmu.c
中,特指show_smap
函数。
该函数做了一次walk_page_range
,将smaps_pte_range
作为PTE的回调。smaps_pte_range
本身计算了结构mem_size_stat
中的信息。
负责PSS的代码如下:
mapcount = page_mapcount(page);if (mapcount >= 2) { if (pte_dirty(ptent) || PageDirty(page)) mss->shared_dirty += ptent_size; else mss->shared_clean += ptent_size; mss->pss += (ptent_size << PSS_SHIFT) / mapcount;} else { if (pte_dirty(ptent) || PageDirty(page)) mss->private_dirty += ptent_size; else mss->private_clean += ptent_size; mss->pss += (ptent_size << PSS_SHIFT);}
(你可以看到只有页被映射了多次才被认为在共享
部分-佛足额它被认为是私有的。) page_mapcount
在 linux/mm.h
中定义为内联的,只是简单地访问struct page
:
static inline int page_mapcount(struct page *page){ return atomic_read(&(page)->_mapcount) + 1;}
那么PSS“总是最新的”。
0 0
- [译]指定进程更新/proc/pid/smaps中PSS值得频率是多久?
- 进程内存信息 /proc/[pid]/maps /proc/[pid]/smaps /proc/[pid]/status
- 关于/proc/$pid/smaps文件
- Linux /proc/$pid/smaps的含义
- linux /proc/pid/smaps各字段含义
- /proc/pid进程相关说明
- 读proc/pid得到进程名称
- linux /proc/pid进程信息说明
- 进程_解读/proc/pid/stat
- linux /proc/pid进程信息说明
- cat /proc/$PID/status进程状态
- 查看进程状态/proc/pid/stat
- 通过/proc/pid./status查看进程信息
- 查看进程状态/proc/pid/stat
- 通过 /proc/[pid]/ 查看进程状态
- /proc/pid
- Linux中/proc/[pid]/status详细说明
- 使用/proc/${pid}/mem访问其他进程的内存变量
- java注解的学习
- vb.net cad 重新生成填充边界
- linux 缺少动态连接库.so--cannot open shared object file: No such file or directory
- swift 比较日期大小
- MyBatis的foreach语句详解 常用于sql in("","","","")
- [译]指定进程更新/proc/pid/smaps中PSS值得频率是多久?
- xm解析
- JavaEE:response响应和request请求
- CDN缓存那些事
- P2024 食物链
- css3的transition
- 简述java内存模型 java虚拟机JVM
- NET SHARE
- PHP生成二维码单态模式封装类