web-dev-qa-db-ja.com

Linuxでは、vmstatコマンドや/ proc / vmstatによって報告されるページのサイズはどれくらいですか?

StackExchangeや他の場所で多くの人が述べているように、Linuxの一般的なカーネル/ mmuページサイズは4KiBです。これが私のOS /アーキテクチャ(RHEL 6.6、Intel Xeon E5-2690)に当てはまることを確認しました。

とりわけ、vmstat -sコマンドは、起動時に0から始まるカウンターである「ページインされたページ」と「ページアウトされたページ」についてレポートします。いつでも、これらの値が/proc/vmstatpgpginおよびpgpgoutエントリで見つかった値と正確に等しいことを確認しました(vmstatを実行します)コマンドは/proc/vmstat?)からそれらを取得します。他のコマンド、特にsar -Bpgpgin/spgpgout/sを、特定の間隔で1秒あたりにページイン/ページアウトしたキビバイトとして報告します。

最近のテストでは、sarのpgpgin/spgpgout/sの値も、指定された間隔のvmstat値から計算されたレートに正確に対応していることがわかりました。これにより、vmstatが1KiBのサイズのページの値を報告していると結論付けることができます。したがって、pgpgin/out/proc/vmstat値は、起動後にページイン/ページアウトされたKiBの数です。

私の質問は次のとおりです。

  1. これは有効な結論ですか、そして
  2. もしそうなら、なぜvmstatや他の機能はOSとアーキテクチャの「共通通貨」である4KiBページではなく1KiBページで報告するのですか?特に、vmstatは「pages paged in/out」ではなく「KiBs paged in/out」と言っています。これは紛らわしいです。
7
Marc C

/proc/vmstatのカウンターに関して、これらの値を更新するように見える関数は、submit_bioLinux/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のマクロです

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

これは、数値がセクターサイズ(512)バイトでカウントされていることを示唆しているようです。それを考えると、バイトカウントを9ずつ右にシフトした場合に最終的に得られる値はどれですか。

とにかく、これはカーネル2.6.27〜4.0.x間で同様の設定のようです。

4
Matthew Ife