Какой размер страниц сообщается командой vmstat и/или /proc/vmstat в Linux?

Какой размер страниц сообщается командой vmstat и/или /proc/vmstat в Linux?

Как многие заявляли на StackExchange и в других местах, типичный размер страницы ядра/mmu для Linux составляет 4 КБ. Я проверил, что это так на моей ОС/архитектуре (RHEL 6.6, Intel Xeon E5-2690).

Теперь, среди прочего, vmstat -sкоманда сообщает о "pages in" и "pages out", которые являются счетчиками, которые начинаются с 0 во время загрузки. Я подтвердил, что в любой момент эти значения точно равны значениям, найденным для записей pgpginи pgpgoutв/proc/vmstat(команда vmstat получает их из /proc/vmstat?). Другие команды, в частности, sar -Bсообщают pgpgin/sи pgpgout/sкак Кибибайты, загруженные/выгруженные в секунду в течение определенного интервала.

В недавних тестах я увидел, что pgpgin/sи pgpgout/sзначения из sar также точно соответствуют скорости, рассчитанной из значений vmstat для указанного интервала. Это приводит меня к выводу, что vmstat сообщает значения для страниц размером 1 КиБ. Таким образом, pgpgin/outзначения/proc/vmstatколичество КиБ, загруженных/выгруженных с момента загрузки.

У меня есть вопросы:

  1. Является ли это обоснованным выводом, и
  2. Если так, почему vmstat и другие службы выдают отчеты на страницах по 1 КиБ вместо страниц по 4 КиБ, которые являются «общей валютой» ОС и архитектуры? В частности, vmstat говорит « pages paged in/out», а не « KiBs paged in/out». Это сбивает с толку.

решение1

Что касается счетчиков, то /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) байт. Учитывая, какое значение вы получите в итоге, если сдвинете вправо количество байт на девять.

В любом случае, похоже, что это схожая настройка для ядер 2.6.27 - 4.0.x.

Связанный контент