Como fazer o JBoss usar “HugePages”

Na verdade o título deveria ser “Como fazer o Java usar HugePages“.

Primeiro quero esclarecer que eu já estou contando que você saiba o que é HugePages, o intuito aqui é mostrar só como fazer com o que o Java, mais especificamente utilizando o JBoss, utilize este recurso.

Primeiro você precisa configurar os usuários e grupo que vão poder utilizar o recurso, para isso existe um helper que vai te ajudar fazer isso, provavelmente só em RHEL5 e RHEL6 e derivados, nas outras distriuições você vai ter que fazer na mão.

O helper é o huge_page_setup_helper.py provido pelo pacote libhugetlbfs-utils, também em RHEL5 e 6 e derivados.

Executadndo o helper para alocar 4GB de memória para seja utilizado HugePages.

[root@hostjboss ~]# huge_page_setup_helper.py
Current configuration:
* Total System Memory……:   7872 MB
* Shared Mem Max Mapping…:      0 MB
* System Huge Page Size….:      2 MB
* Number of Huge Pages…..:   2048
* Total size of Huge Pages.:   4096 MB
* Remaining System Memory..:   3776 MB
* Huge Page User Group…..:  jboss (497)

How much memory would you like to allocate for huge pages? (input in MB, unless postfixed with GB): 4096 <- Inserir a quantidade de memória em MB que você quer alocar
Okay, we’ll try to allocate 4096 MB for huge pages…

What group should have access to the huge pages?(The group will be created, if need be) [hugepages]: jboss <- Insira o grupo que deverá poderá usar as HugePages, se não existir um grupo “hugepages” é sugerido, e se você não informar nenhum este grupo será utilizado.
Okay, we’ll give group jboss access to the huge pages
Group jboss (gid 497) already exists, we’ll use it

What user(s) should have access to the huge pages (space-delimited list, users created as needed)? jboss <- insira os usuários separados por virgula que poderão utilizar o recurso.
Adding user jboss to huge page group

Saved original /etc/sysctl.conf as /etc/sysctl.conf.backup
Saved original /etc/security/limits.d/hugepages.conf as /etc/security/limits.d/hugepages.conf.backup

Final configuration:
* Total System Memory……:   7872 MB
* Shared Mem Max Mapping…:   4096 MB
* System Huge Page Size….:      2 MB
* Available Huge Pages…..:   2048
* Total size of Huge Pages.:   4096 MB
* Remaining System Memory..:   3776 MB
* Huge Page User Group…..:  jboss (497)

Feito isso um arquivo “/etc/security/limits.d/hugepages.conf” será criado para que o usuário jboss possa usar o recurso de lock de endereçamento de memória.

O conteúdo do arquivo depois de executado o helper:

[root@hostjboss ~]# cat /etc/security/limits.d/hugepages.conf

# Huge page access configuration
jboss        soft    memlock        4194304
jboss        hard    memlock        4194304

Só por curiosidade, este valor é 4GB em KB (Kilobytes).

A outra parte da configuração diz respeito a shared memory (SHM), que é feito no /etc/sysctl.conf, como é mostrado  a seguir:

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296
kernel.shmmax = 4294967296
vm.nr_hugepages = 2048
vm.hugetlb_shm_group = 497

Rapidamente, os valores de shmall e shmmax são expressos em Bytes, e equivalem aos 4GB especificados no helper, o vm.nr_hugepages é a quantidade de páginas de memórias que serão alocadas para configura o recurso de HugePages, o tamanho da página de memória no RHEL6 é de 2048KB (2MB) que multipolicado por 2048 vai dar os 4GB especifidados, e por último o hugetlb_shm_group que é o grupo especificado para utilizar o recurso de HugePages.

Feito esta configuração os usuários do grupo jboss estarão aptos a utlizar as HugePages, entretanto é preciso que o software que você utilize saiba utilizar este recurso. o Java sabe!

E para fazer o Java utilizar este recurso, especificamente utilzando Jboss, dentro do arquivo run.conf adicione a seguinte opção no JAVA_OPTS:

-XX:+UseLargePages

Exemplo:

JAVA_OPTS=”-Xms1024m -Xmx1024m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -XX:+UseLargePages

Pronto, agora é iniciar o Jboss.

E como eu sei que o recurso está sento utilizado? Simples, execute o seguinte comando:

cat /proc/meminfo | grep  Huge
HugePages_Total:    2048
HugePages_Free:      901
HugePages_Rsvd:      776
HugePages_Surp:        0
Hugepagesize:       2048 kB

Perceba esta informação:

HugePages_Free:      901

Isto quer dizer que das 2048 páginas que você alocou, ainda restam 901.

Done.

My first day on Canada.

Yeah, this is mys first day on Canada…. pois é mas não pensem que vou fazer um post em inglês por que eu vim aqui para apreder inglês hehe!!
Putz, saí de BSB dia 15 às 15:22….mofei em GRU até as 20:10, daí então parti para Toronto.
Quase 11 horas de viagem, cheguei quebrado em Toronto às 6 da matina… As contas não vão bater por causa do fuso, mas foi isso mesmo.
Como se não bastasse, mofei até 9:25 da manhã em Toronto, hora que embarquei para Vancouver, e adivinha?
Mais 5 horas de voo…
Bem, cheguei, um bagaço de pessoa mas cheguei.
A única coisa que eu sei é que tinha que ir para o endereço da minha homestay, então nem pensei duas veze e já cai pra dentro de um taxi.
Uauuuu… 15 minutinhos de primeiro mundo, Vancouver me deixou de queixo caído pela organização de tudo. Sem palavras.
CAD $26,00 (O taxista me levou CAD $30,00, mas eu que dei os 4 de gorjeta) do aeroporto até onde eu vou ficar pelo próximo mês.
Quem me recebeu na homestay foi um Mexicano de 20 anos de idade e que deve pesar +- 130 Kg hehehe, gente finíssima.
A mom e dady da homestay ainda não estavam aqui, o cara me ofereceu um rango (por sinal tinha pimenta pra cacete, não podia ser diferente vindo de um mexicano hehe) tentamo conversar, obviamente eu falando tudo errado e entendendo menos ainda, mas conseguimos nos comunicar bem. Isac é o nome dele.
Essa hora já eram por volta de 12:00 em Vancouver, então por volta de 13:00 fui dar uma cochilada e acordei as 22 hehehehehe, digo acordei as 17, tomei um banho, e dormi novamente até as 22, onde acordei e encontrei com a galera toda.
Minha mom e o marido dela são Filipinos, então comida filipina no jantar …. tirando a forma de fazer, e a forma com que misturam, o rango é bem parecido com o do Brasil.
Rangamo e batemo papo até agora… hora que estou escrevendo este post e vou dormir…
Bem, em resumo eu fiquei com um pouco de medo, mas já me sindo um pouco mais a vontade.
Amanhã, depois e o dia em que sobrar tempo eu escrevo mais contando mais detalhes… isso aqui foi só para não passar batido minha chegada :D