在Linux上,vmstat命令和/或/ proc / vmstat报告的页面大小是多less?

正如很多人在StackExchange和其他地方所说的那样,Linux的典型kernel / mmu页面大小是4 KiB。 我已经证实,我的操作系统/体系结构(RHEL 6.6,Intel Xeon E5-2690)就是这种情况。

除此之外, vmstat -s命令报告“页面翻页”和“翻页页面”,这些是在启动时从0开始的计数器。 我已经确认,在任何时候,这些值完全等于/proc/vmstatpgpginpgpgout条目的值(vmstat命令是从/proc/vmstat ?获取它们的值)。 其他的命令,特别是在特定的时间间隔内, pgpgin/s sar -B pgpgin/spgpgout/s为Kibibytes每秒调入/调出。

在最近的testing中,我看到来自sar的pgpgin/spgpgout/s值也完全对应于从指定时间间隔的vmstat值计算得出的速率。 这导致我得出结论,vmstat正在报告大小为1 KiB的页面的值。 因此/proc/vmstatpgpgin/out值是自引导以后进入/退出的KiB的数量。

我的问题是:

  1. 这是一个有效的结论,而且
  2. 如果是这样,为什么vmstat和其他设施报告1 KiB页面而不是4 KiB页面是操作系统和体系结构的“共同货币”? 特别是,vmstat说“ 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_sectorsLinux/include/linux/bio.h一个macros

  64 #define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9) 

这似乎暗示了这些数字是以扇区大小(512)字节计算的。 鉴于这是你最终得到什么样的价值,如果你右移一个字节数九。

这似乎是内核2.6.27 – 4.0.x之间的一个类似的设置。