Страницы

Сохранить статью у себя в соцсети:

пятница, 17 августа 2012 г.

§ PostgreSQL with HugePages.

Настройка PostgreSQL для работы с HugePages.

В статье описывается настройка PostgreSQL с использованием больших страниц HugePages. Установка выполнялась в Gentoo Linux, но учитывая что технология HugeTLB является дистронезависимой, описанный подход будет универсален для любых дистрибутивов, чьи ядра поддерживают HugePages.
Проверяем поддержку больших страниц в ядре Linux
# zgrep HUGE /proc/config.gz 
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
Выполняем установку libhugetlbfs
# cave resolve libhugetlbfs -x
Теперь нужно создать пулы страниц. Для этого смотрим сколько всего доступно памяти и в зависимости от объема определяем минимальную и максимальную границу пула. Максимальный объем пула делаем 3,5 GB.
# free
             total       used       free     shared    buffers     cached
Mem:       4051308    3136496     914812          0     141180    2716328
-/+ buffers/cache:     278988    3772320
Swap:      1048572      19444    1029128
# hugeadm --pool-pages-min 2M:128M
# hugeadm --pool-pages-max 2M:3500M
Затем в соответствии с созданными пулами необходимо установить рекомендуемое значение shmmax.
# hugeadm --set-recommended-shmmax
# hugeadm --set-recommended-min_free_kbytes
Теперь нужно дать разрешение группе postgres использовать пулы hugetlb. Сначала выясняем id группы, затем подставляем этот id в качестве аргумента для set-shm-group
# id postgres
uid=70(postgres) gid=70(postgres) groups=70(postgres)
# hugeadm --set-shm-group 70
Монтируем файловую систему hugetlbfs
# mkdir /hugepages
# mount -t hugetlbfs hugetlbfs /hugepages
Состояние страниц можно проверить через /proc/meminfo. 
# grep Huge /proc/meminfo 
AnonHugePages:      4096 kB
HugePages_Total:      64
HugePages_Free:       64
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Как видно, текущий объем пула составляет 64MB это как раз минимальный указанный объем.
Дальше нужно слегка подправить скрипт запуска postgresql-9.0. Запускать postgres нужно через hugectl. Находим секцию запуска и правим ее до следующего вида
# vi /etc/init.d/postgresql-9.0
        start-stop-daemon --start \
                --user postgres \
                --exec /usr/bin/hugectl \
                --env "PGPORT=${configured_port}" \
                ${extraenv} \
                --pidfile ${DATA_DIR}/postmaster.pid \
                -- --shm /usr/lib/postgresql-9.0/bin/postgres \
                -D ${PGDATA} --data-directory=${DATA_DIR} --silent-mode=true ${PGOPTS}
        local retval=$?
Теперь запускаем postgresql и смотрим состояние в /proc/meminfo
# /etc/init.d/postgresql-9.0 start
# grep Huge /proc/meminfo 
AnonHugePages:      4096 kB
HugePages_Total:     725
HugePages_Free:      698
HugePages_Rsvd:      698
HugePages_Surp:      661
Hugepagesize:       2048 kB
Как видно заполненность пула изменилась. 
Чтобы настройки сохранились после перезагрузки, пропишем настройки в sysctl и применим их.
# vi /etc/sysctl.conf
vm.hugetlb_shm_group = 70
vm.nr_hugepages = 1000
vm.nr_overcommit_hugepages = 1800
# sysctl -p
На этом все.
На главную "Virtualizing Linux"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика