Инструменты пользователя

Инструменты сайта


it:postgresql:hugepages

hugepages

https://postgrespro.ru/docs/postgresql/15/runtime-config-resource#GUC-HUGE-PAGES
https://postgrespro.ru/docs/postgresql/15/kernel-resources#LINUX-HUGE-PAGES

https://habr.com/ru/companies/oleg-bunin/articles/655887/ mht - Чем Linux HugePages важны для серверов баз данных?
https://www.hippolab.ru/kvm-optimizaciya-raboty-s-pamyatyu-pri-pomoshchi-hugepages mht - KVM. Оптимизация работы с памятью при помощи Hugepages
https://habr.com/ru/companies/otus/articles/460403/ mht - Преимущества и недостатки HugePages
https://www.cybertec-postgresql.com/en/a-formula-to-calculate-pgbench-scaling-factor-for-target-db-size/ mht - A FORMULA TO CALCULATE “PGBENCH” SCALING FACTOR FOR TARGET DB SIZE
https://www.percona.com/blog/benchmark-postgresql-with-linux-hugepages/ mht - Benchmark PostgreSQL With Linux HugePages
https://www.enterprisedb.com/blog/improving-postgresql-performance-without-making-changes-postgresql mht - Improving PostgreSQL performance without making changes to PostgreSQL

1. Поддержка HugePages
Чтобы такие страницы можно было задействовать в PostgreSQL, ядро должно быть собрано с параметрами CONFIG_HUGETLBFS=y и CONFIG_HUGETLB_PAGE=y.

Если есть файл конфигурации сборки ядра

gunzip -c /proc/config.gz | grep HUGETLB

Иначе можно посмотреть

grep HUGETLB /boot/config-`uname -r`

Должно быть:

CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y

2. Файловая система hugetlbfs

mount | grep huge

Если нет, то монтирвовать

mkdir /hugepages
mount -t hugetlbfs hugetlbfs /hugepages
/etc/fstab
hugetlbfs /hugepages hugetlbfs defaults 0 0

для 1Gb

mkdir /hugepages_1GB
mount -t hugetlbfs nodev /hugepages_1GB -o pagesize=1GB
/etc/fstab
 

3. Количество страниц
Использование огромных страниц (huge pages) снижает накладные расходы при работе с большими непрерывными блоками памяти, что характерно для PostgreSQL, особенно при большом объёме shared_buffers. Чтобы оценить требуемое количество огромных страниц, запустите PostgreSQL без поддержки огромных страниц и определите размер сегмента анонимной разделяемой памяти процесса postmaster, а также узнайте размер огромной страницы по умолчанию и поддерживаемый размер, воспользовавшись файловыми системами /proc и /sys.

Размер сегмента анонимной разделяемой памяти

ps=`ps aux | grep postmaster.| grep jatoba | awk '{print $2}'`
grep ^VmPeak /proc/$ps/status | awk '{print $2}'

Размер огромной страницы по умолчанию

grep ^Hugepagesize /proc/meminfo

Поддерживаемые размеры hugepages

ls /sys/kernel/mm/hugepages

Пример:
Размер памяти: 68757136 Размер страницы: 2048 kB Необходимое количество страниц: 68757136 / 2048 = 33572,8

В файл

/etc/sysctl.conf
vm.nr_hugepages = 33580
vm.hugetlb_shm_group = 26

Потом

sysctl -p

4. Ядро grub-mkconfig > /boot/grub/grub.cfg

5. Postgres

huge_pages = on
huge_page_size = 2MB
huge_page_size = 1GB
it/postgresql/hugepages.txt · Последнее изменение: 2023/07/28 16:46 — ura2404