Huge Pages – Como configurar

Primeiro vamos definir o que é Huge Pages e seu conceito:
HugePages é um recurso do Linux que usa páginas de memória maiores (2MB em vez de 4KB). No Oracle, isso melhora o desempenho, porque diminui a carga de gerenciamento de memória, reduz o uso de CPU e evita que a memória seja trocada para o disco pois as páginas alocadas com HugePages são fixadas e bloqueadas na RAM.
Se for identificado que o seu sistema está utilizando swap, ou seja, usando o disco como se fosse memória, é importante verificar a configuração do swappiness
e conferir em quantos por cento ele está. Uma boa prática é manter o swappiness
entre 2% e 10%.
Para verificar o swappiness digite no bash:
# cat /proc/sys/vm/swapiness
O padrão deverá ser 30 (no oracle Linux)
Para alterar o valor :
1 – Edite o arquivo sysctl.conf
# vi /etc/sysctl.conf
2 – Inserir novo valor na ultima linha
vm.swappiness=10
Exemplo:
3 – Agora digite para carregar as informações
# sysctl -p
Pronto!! A parte de swappiness feito.. Voltando agora para HugePages, vamos configurar:
Primeira coisa, precisamos ter certeza que não estamos utilizando HugePages. Para tirar esta dúvida , vamos digitar no bash
# grep Huge /proc/meminfo
Caso você esteja utilizando , você deve se deparar com este tipo de informação:
Agora vamos calcular o valor de HugePages. Se os valores estiverem zerados, você pode usar um script fornecido pela Oracle ou simplesmente somar todas as SGAs e dividir por 2 MB. Lembrando que a soma das SGAs deve estar em MB, caso deseje dividir em megabytes.
Segue o script abaixo. Se quiser utilizá-lo, importe-o para o servidor do banco com a extensão .sh
e execute. Não se esqueça de dar permissão para execução.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/bash # # hugepages_setting.sh # # Linux bash script to compute values for the # recommended HugePages/HugeTLB configuration # # Note: This script does calculation for all shared memory # segments available when the script is run, no matter it # is an Oracle RDBMS shared memory segment or not. # Check for the kernel version KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'` # Find out the HugePage size HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}` # Start from 1 pages to be on the safe side and guarantee 1 free HugePage NUM_PG=1 # Cumulative number of pages required to handle the running shared memory segments for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"` do MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` if [ $MIN_PG -gt 0 ]; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fi done # Finish with results case $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6' | '3.8' | '3.10' | '4.1' | '4.14' ) echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;; esac # End |

/etc/sysctl.conf
e adicionar na última linha:use_large_pages
no banco de dados e garantir que esteja como TRUE
. Se estiver como FALSE
, será necessário alterá-lo para TRUE
.Os valores agora devem estar diferentes de zero.
OBS: Também podemos verificar no alert log do banco, mas deixo essa parte para a próxima.
Valeu, galera!!!