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