Назад | Перейти на главную страницу

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

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

Теперь среди прочего vmstat -s Команда сообщает о «выгруженных страницах» и «выгруженных страницах», которые являются счетчиками, которые начинаются с 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". Это смущает.

Что касается счетчиков в /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.