В 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 как Kibibytes выгружается в / выход в секунду в течение определенного интервала.

В недавних тестах я видел, что 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.

Другие вопросы по тегам