Я запускаю программу, которая считывает большой объем выделенной памяти. У меня включены прозрачные огромные страницы. Более того, я не использую обычные огромные страницы, а даже если бы и использовал, их размер установлен на 2 МБ, как видно из
Код: Выделить всё
ShmemHugePages: 0 kB
FileHugePages: 4096 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
Когда я запускаю статистику производительности со следующими событиями, я получаю
Код: Выделить всё
95,918,466 DTLB_LOAD_MISSES.WALK_COMPLETED
3,376 DTLB_LOAD_MISSES.WALK_COMPLETED_4K
95,915,062 DTLB_LOAD_MISSES.WALK_COMPLETED_2M_4M
28 DTLB_LOAD_MISSES.WALK_COMPLETED_1G
Как вы можете видеть, есть несколько обходов таблицы страниц, вызванных страницами размером 4 КБ, но большинство обходов таблицы страниц вызваны страницами размером 2 МБ. Учитывая, что я работаю с прозрачными огромными страницами, это именно то, чего я ожидал. Но откуда берутся прогулки по 1Гб?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... sing-any-1