Назад | Перейти на главную страницу

Кажется, что огромные страницы застряли

Я запускаю определенные приложения через 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

шаги, которые необходимо выполнить при отключении отображения огромной страницы:

  1. ls -l / mnt / огромный /.
    rm -rf rtemap_ * (если есть "rtemap_ *" удалить все)
  2. крепление | grep огромный.
   hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
  1. ls / dev / hugepages
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 файлы, удалите их все.

  1. sudo umount / mnt / огромный
  2. sudo rm -R / mnt / огромный
  3. Затем напишите 0 в nr_hugepages, упомянутый в начале.

Пример вывода:

[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