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