StackExchangeや他の場所で多くの人が述べているように、Linuxの一般的なカーネル/ mmuページサイズは4KiBです。これが私のOS /アーキテクチャ(RHEL 6.6、Intel Xeon E5-2690)に当てはまることを確認しました。
とりわけ、vmstat -s
コマンドは、起動時に0から始まるカウンターである「ページインされたページ」と「ページアウトされたページ」についてレポートします。いつでも、これらの値が/proc/vmstat
のpgpgin
およびpgpgout
エントリで見つかった値と正確に等しいことを確認しました(vmstatを実行します)コマンドは/proc/vmstat
?)からそれらを取得します。他のコマンド、特にsar -B
はpgpgin/s
とpgpgout/s
を、特定の間隔で1秒あたりにページイン/ページアウトしたキビバイトとして報告します。
最近のテストでは、sarのpgpgin/s
とpgpgout/s
の値も、指定された間隔のvmstat値から計算されたレートに正確に対応していることがわかりました。これにより、vmstatが1KiBのサイズのページの値を報告していると結論付けることができます。したがって、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);
bio_sectors
はLinux/include/linux/bio.h
のマクロです
64 #define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
これは、数値がセクターサイズ(512)バイトでカウントされていることを示唆しているようです。それを考えると、バイトカウントを9ずつ右にシフトした場合に最終的に得られる値はどれですか。
とにかく、これはカーネル2.6.27〜4.0.x間で同様の設定のようです。