正如很多人在StackExchange和其他地方所说的那样,Linux的典型kernel / mmu页面大小是4 KiB。 我已经证实,我的操作系统/体系结构(RHEL 6.6,Intel Xeon E5-2690)就是这种情况。
除此之外, vmstat -s命令报告“页面翻页”和“翻页页面”,这些是在启动时从0开始的计数器。 我已经确认,在任何时候,这些值完全等于/proc/vmstat的pgpgin和pgpgout条目的值(vmstat命令是从/proc/vmstat ?获取它们的值)。 其他的命令,特别是在特定的时间间隔内, pgpgin/s sar -B pgpgin/s和pgpgout/s为Kibibytes每秒调入/调出。
在最近的testing中,我看到来自sar的pgpgin/s和pgpgout/s值也完全对应于从指定时间间隔的vmstat值计算得出的速率。 这导致我得出结论,vmstat正在报告大小为1 KiB的页面的值。 因此/proc/vmstat的pgpgin/out值是自引导以后进入/退出的KiB的数量。
我的问题是:
pages paged in/out ”,而不是“ KiBs paged in/out ”。 这很混乱。 关于/proc/vmstat的计数器,看起来更新这些值的函数是在Linux/block/blk-core.c 。
2067 blk_qc_t submit_bio(struct bio *bio) 2068 { ... 2079 count = bio_sectors(bio); 2080 2081 if (op_is_write(bio_op(bio))) { 2082 count_vm_events(PGPGOUT, count); 2083 } else { 2084 task_io_account_read(bio->bi_iter.bi_size); 2085 count_vm_events(PGPGIN, count); 2086 } ... 2100 } 2101 EXPORT_SYMBOL(submit_bio);
bio_sectors是Linux/include/linux/bio.h一个macros
64 #define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
这似乎暗示了这些数字是以扇区大小(512)字节计算的。 鉴于这是你最终得到什么样的价值,如果你右移一个字节数九。
这似乎是内核2.6.27 – 4.0.x之间的一个类似的设置。