В 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
количество КиБ, выгружаемых в / из после загрузки.
Мои вопросы:
- Это правильный вывод, и
- Если это так, то почему 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.