Mar*_*c C 7 linux vmstat paging
正如许多人在 StackExchange 和其他地方所说的那样,Linux 的典型内核/mmu 页面大小是 4 KiB。我已经确认我的操作系统/架构(RHEL 6.6,Intel Xeon E5-2690)就是这种情况。
现在,除其他外,该vmstat -s
命令报告“页面调入”和“页面调出”,它们是在启动时从 0 开始的计数器。我已经确认,在任何给定的时刻,这些值都与在pgpgin
和pgpgout
条目中找到的值完全相等/proc/vmstat
(vmstat 命令是否从/proc/vmstat
?)。其他命令,特别是sar -B
报告pgpgin/s
和pgpgout/s
作为特定时间间隔内每秒调入/调出的 Kibibytes。
在最近的测试中,我看到pgpgin/s
和pgpgout/s
来自 sar 的值也完全对应于从 vmstat 值计算出的特定时间间隔的速率。这使我得出结论,vmstat 报告大小为 1 KiB 的页面的值。因此, 的pgpgin/out
值/proc/vmstat
是自启动以来调入/调出的 KiB 数。
我的问题是:
pages paged in/out
”,而不是“ KiBs paged in/out
”。这令人困惑。关于/proc/vmstat
似乎更新这些值的函数中的计数器submit_bio
位于 中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);
Run Code Online (Sandbox Code Playgroud)
bio_sectors
是一个宏Linux/include/linux/bio.h
64 #define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
Run Code Online (Sandbox Code Playgroud)
这似乎表明这些数字是按扇区大小(512)字节计算的。鉴于这就是如果您将字节计数右移九个您最终会得到的值。
无论如何,这似乎是内核 2.6.27 - 4.0.x 之间的类似设置。