Я запускаю определенные приложения через DPDK, из соображений экономии памяти, я постоянно регулирую количество огромных страниц, устанавливая "nr_hugepages"
echo 8192> /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
cat /proc/meminfo | grep -i huge
AnonHugePages: 0 kB
HugePages_Total: 8192
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
free -g
total used free shared buff/cache available
Mem: 188 17 159 0 11 170
Swap: 191 0 191
Однако, когда я достиг 64 КБ, я, кажется, застрял и не могу снова изменить Hugepages.
echo 65536 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
sudo hugeadm --pool-list
Size Minimum Current Maximum Default
2097152 65536 65536 65536 *
1073741824 0 0
cat /proc/meminfo | grep -i huge
AnonHugePages: 0 kB
HugePages_Total: 65536
HugePages_Free: 64
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Теперь, даже если я установил nr_hugepages на 512
echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
nr_hugepages читается как 64K
cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
65472
Я точно столкнулся с этой проблемой и, наконец, нашел основную причину и способ решения этой проблемы. Чаще всего это происходит при использовании приложения DPDK с версией DPDK до 18.05.
Проблема в том, что мы останавливаем приложение DPDK или приложение DPDK дает сбой. Огромные страницы, созданные или используемые DPDK, не будут освобождены автоматически. Ожидается повторное использование вторичным процессом.
Проблема может заключаться в том, что вы удалили / mnt / huge и пытались изменить nr_hugepage
Numa case:
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
non-NUMA case:
echo 0 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
шаги, которые необходимо выполнить при отключении отображения огромной страницы:
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
rtemap_0 rtemap_1202 rtemap_1408 rtemap_1613 rtemap_1819 rtemap_2023 rtemap_387 rtemap_592 rtemap_798
rtemap_1 rtemap_1203 rtemap_1409 rtemap_1614 rtemap_182 rtemap_2024 rtemap_388 rtemap_593 rtemap_799
Если есть abive файлы, удалите их все.
Пример вывода:
[root@localhost hugepages]# cat /proc/meminfo | grep Huge
AnonHugePages: 161792 kB
HugePages_Total: 4096
HugePages_Free: 4096
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
2048
# cat /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
2048
# cat /proc/sys/vm/nr_hugepages
4096
# cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
4096
# echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
# echo 0 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
# cat /proc/meminfo | grep Huge
AnonHugePages: 161792 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB