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
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