====== 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 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 В файл 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