Я задавал подобный вопрос несколько лет назад.
Сейчас моя машина имеет четыре 1G hugepages и 256 2MB hugepages:
# cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
4
# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
256
Но затем numstat -vm
показывает:
Per-node system memory usage (in MBs):
Node 0 Total
--------------- ---------------
MemTotal 65205.89 65205.89
MemFree 58656.55 58656.55
MemUsed 6549.34 6549.34
Active 158.62 158.62
Inactive 89.90 89.90
Active(anon) 15.32 15.32
Inactive(anon) 9.04 9.04
Active(file) 143.30 143.30
Inactive(file) 80.86 80.86
Unevictable 10.69 10.69
Mlocked 10.69 10.69
Dirty 0.02 0.02
Writeback 0.00 0.00
FilePages 235.87 235.87
Mapped 16.08 16.08
AnonPages 23.42 23.42
Shmem 9.43 9.43
KernelStack 5.38 5.38
PageTables 2.84 2.84
NFS_Unstable 0.00 0.00
Bounce 0.00 0.00
WritebackTmp 0.00 0.00
Slab 50.60 50.60
SReclaimable 23.14 23.14
SUnreclaim 27.46 27.46
AnonHugePages 0.00 0.00
HugePages_Total 4096.00 4096.00
HugePages_Free 4096.00 4096.00
HugePages_Surp 0.00 0.00
Исходя из ответа на мой предыдущий пост, 4096 должно быть "единицей". Теперь я в замешательстве. Единица чего здесь?
Мне кажется, что "единица" - это "МБ", и numastat
не включает эти 2 МБ огромных страниц?
И почему 2 МБ огромных страниц не сообщается здесь?
Огромные страницы в Linux не так просто понять. Особенно, когда одни инструменты показывают то, чего нет у других, и каждый выполняет свои собственные преобразования единиц.
Общесистемный / proc / meminfo
покажет сумму всех размеров больших страниц как Hugetlb
Hugetlb
- общий объем памяти (в килобайтах), потребляемый огромные страницы всех размеров. Если используются огромные страницы разного размера, это число будет превышать HugePages_Total * Hugepagesize. Чтобы получить более подробную информацию, обратитесь к / sys / kernel / mm / hugepages
numastat -m выведет "meminfo-like" на основе статистики узла NUMA в / sys / devices / system / node / node? / meminfo
, но он также преобразует единицы измерения в МБ. Я не знаю, почему здесь явно не хватает суммы всех размеров. Может быть, ядро настаивает на этом и позволяет пользовательским инструментам делать то, что они хотят, с данными для каждого узла? Предположительно, вы получили только 4 страницы по 1 ГБ.
hugeadm (из libhugetlbfs) основывает свой рекомендуемый shmmax, суммируя каждый из размеров страниц в / sys / kernel / mm / hugepages /
. hugeadm --explain
также полезен для проверки значений по умолчанию и размера каждого пула.
Упростить работу с использованием только одного огромного размера страницы. Менее 5 ГБ из 2 МБ страниц - это относительно мало, все они могут составлять 2 МБ. Размер страницы 1 ГБ работает, но может быть неэффективным использованием пространства для небольших выделений.