linux procstat中的RES和PRES字段有什么区别



这里是procstat输出的平静:

PID              START                END PRT  RES PRES REF SHD FL TP PATH
36502           0x400000           0x45d000 r-x   77    0  23  11 CN vn /usr/local/sbin/httpd
36502           0x65c000           0x660000 rw-    3    3   2   1 CN vn /usr/local/sbin/httpd
36502           0x660000           0x800000 rw-    5    4   2   1 CN sw
36502        0x80065c000        0x800693000 r-x   25    0  83  32 CN vn /libexec/ld-elf.so.1

RES(常驻页面)和

PRES还有一个所谓的映射标志(CN)。据我所知,这些标志适用于每页的基本内容,而不是整个内存段,因为标记为写时复制的是页面,而不是段那么为什么procstat会在整个段中显示它呢

另一个问题是-我能从这个输出中计算出(在写时复制过程中)真正复制了多少页面,以及父进程中还剩多少页面吗

拜托,你能帮我弄清楚这些东西吗?我会非常感激,谢谢

procstat(1)是一个用于获取详细流程信息的FreeBSD实用程序。Linux中也有类似的工具,但其特定于Linux的字段与问题中的输出不同。这个输出必须取自FreeBSD系统,因为这些字段在LinuxVM子系统的上下文中没有意义。

回答您的具体问题:

  1. RES是常驻页面计数,而PRES是进程的私有阴影对象的常驻页面计数[1]。复制VM对象时会创建卷影对象[2],进程可能会请求进行私有复制,这样映射文件的其他进程和文件本身都看不到更改[3]
  2. 映射标志应用于映射的内存对象,而不是直接应用于页面。有些对象类型可能不是写时复制,但vnode和swap(显示在输出中)是。[1]
  3. 我想你要问的是"与家长共享的页面数量是多少,修改后的页面副本数量是多少?"。在这个输出中,您可以看到另外23个mmap对象引用了httpd文本。这些可能是httpd子进程以及该进程的数据段。[1]

参考

[1]http://freebsd.1045724.n5.nabble.com/proc-filesystem-td5719455.html

[2]https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/KernelProgramming/vm/vm.html

[3]http://www.freebsd.org/cgi/man.cgi?query=mmap&sektion=2

最新更新