LibNUMA 
Afinidade de 
Memória e CPU 
Cleverson Lopes Ledur 
Prof. Dr. Luiz Gustavo L. Fernandes 
Programação Paralela 
PP...
Resumo 
● Revisão Arquiteturas 
○ SMP 
○ Arquiteturas UMA e NUMA 
○ Afinidade de Memória 
○ Afinidade de CPU 
● API NUMA 
...
Revisando Algumas Arquiteturas
SMP (Symmetric Multiprocessor) 
No modelo SMP, o computador possui um único 
controlador de memória que é compartilhado po...
UMA (Unified Memory Access) 
● Unified Memory Access 
● Memória se torna um 
gargalo 
● Aumento do número de 
processadore...
NUMA (Non Unified Memory Access) 
● A memória é distribuída 
entre os processadores. 
● A memória pode ser 
endereçada loc...
Afinidade e NUMA 
● Problemas com NUMA: 
○ Threads das aplicações veem a memória como um 
espaço de memória único. 
○ Aces...
Afinidade e NUMA 
Em quais núcleos as threads ou processos 
estão rodando? 
Onde a memória será alocada?
Afinidade e NUMA 
Afinidade: 
Afinidade de CPU: Vincular um processo ou 
thread em um núcleo. Se o sistema operacional 
in...
Afinidade e NUMA 
Afinidade: 
Afinidade de CPU: Vincular um processo ou 
thread em um núcleo. Se o sistema operacional 
in...
Políticas NUMA 
A API NUMA possui políticas que podem ser 
utilizadas para áreas da memória ou para 
CPUs. 
Cada regra tem...
Políticas NUMA 
➔ Default 
◆ Alocar no nodo local. 
➔ Bind 
◆ Alocar no conjunto de nodos. 
➔ Interleave 
◆ Alocar de form...
numactl 
Ferramenta onde podemos rodar processos 
utilizando as políticas NUMA. 
Possibilidade de uso para programas que n...
numactl 
Exemplo: 
numactl --cpubind=0 --membind=0,1 nomeprograma
numactl 
Exemplo: 
numactl --cpubind=0 --membind=0,1 nomeprograma 
Chamada 
numactl 
Executar 
na CPU 0 
Somente 
Alocar a...
numactl 
Outras opções: 
--preferred=<nodenum> 
--interleave=nodemask 
--membind=1 
--localalloc 
--hardware 
Utilizar nod...
numactl 
A numaclt permite a aplicação das políticas 
para programas já compilados, de uma forma 
geral. 
É pouco eficient...
LibNUMA
libnuma 
É uma biblioteca que faz a ligacão entre os programas e as 
políticas NUMA. Possui uma interface de alto nível qu...
libnuma 
#include <numa.h> 
#include <stdio.h> 
int main(){ 
if (numa_available() < 0) { 
printf(‘‘Seu sistema não suporta...
libnuma: Nodemasks 
Nodemasks são conjuntos de nodos. 
nodemask_t mask; 
nodemask_zero(&mask); //inicializo zerado 
nodema...
libnuma: Políticas 
Com essas funções, todas as futuras 
alocações irão respeitar a política aplicada. 
numa_set_preferred...
libnuma: Políticas 
Exemplo: 
numamask_t oldmask = numa_get_interleave_mask(); 
//salva a configuração atual de política 
...
libnuma: Vinculando CPUs 
Funções para vincular threads em CPUs: 
numa_run_on_node(1); 
numa_set_prefered(1); 
//Executar ...
libnuma: Vinculando CPUs 
Liberar a thread para executar em qualquer 
nodo. 
numa_run_on_node_mask(&numa_all_nodes); 
//nu...
libnuma: Outras funções 
numa_node_size 
//retorna tamanho da memória do nodo. 
numa_node_to_cpus 
//retorna os números de...
Código Exemplo 
Programa recebe [N0] [N1] [N2] 
Bind processo para N0 
Bind memória para N1 
Escrever na memória alocada n...
Mai (Memory Affinity Interface) 
Mai é uma interface de 
alto nível que 
disponibiliza funções 
para utilizar afinidade de...
Mai (Memory Affinity Interface) 
● Simples de utilizar (menos 
complexo que a API NUMA, 
numactl, etc) e controle de 
memó...
Mai (Memory Affinity Interface)
Mai (Memory Affinity Interface)
Comparação Libnuma vs Mai 
Item LibNUMA Mai 
Complexidade de 
Utilização 
Médio Fácil 
Alto Nível Sim Sim 
CPU Affinity Si...
Conclusão 
Apresentamos aqui uma biblioteca que permite a utilização de técnicas para 
ganho de desempenho em arquiteturas...
Referências
Libnuma - Afinidade de Memória e CPU
Libnuma - Afinidade de Memória e CPU
Libnuma - Afinidade de Memória e CPU
Libnuma - Afinidade de Memória e CPU
Libnuma - Afinidade de Memória e CPU
Próximos SlideShares
Carregando em…5
×

Libnuma - Afinidade de Memória e CPU

280 visualizações

Publicada em

Libnuma - Afinidade de Memória e CPU

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
280
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Libnuma - Afinidade de Memória e CPU

  1. 1. LibNUMA Afinidade de Memória e CPU Cleverson Lopes Ledur Prof. Dr. Luiz Gustavo L. Fernandes Programação Paralela PPGCC - PUCRS 10/2014
  2. 2. Resumo ● Revisão Arquiteturas ○ SMP ○ Arquiteturas UMA e NUMA ○ Afinidade de Memória ○ Afinidade de CPU ● API NUMA ● LibNuma ● Mai ● Comparação Libnuma vs. Mai ● Conclusão
  3. 3. Revisando Algumas Arquiteturas
  4. 4. SMP (Symmetric Multiprocessor) No modelo SMP, o computador possui um único controlador de memória que é compartilhado por todos os processadores.
  5. 5. UMA (Unified Memory Access) ● Unified Memory Access ● Memória se torna um gargalo ● Aumento do número de processadores compromete a escalabilidade. ● Mesmo tempo de acesso à memória.
  6. 6. NUMA (Non Unified Memory Access) ● A memória é distribuída entre os processadores. ● A memória pode ser endereçada localmente ou remotamente. ● Tempo de acesso à memória é diferente.
  7. 7. Afinidade e NUMA ● Problemas com NUMA: ○ Threads das aplicações veem a memória como um espaço de memória único. ○ Acesso excessivo de memória em diferentes domínios NUMA.
  8. 8. Afinidade e NUMA Em quais núcleos as threads ou processos estão rodando? Onde a memória será alocada?
  9. 9. Afinidade e NUMA Afinidade: Afinidade de CPU: Vincular um processo ou thread em um núcleo. Se o sistema operacional interromper Em quais núcleos a tarefa, as ela threads não será estão migrada rodando? para outro núcleo e irá esperar até que o núcleo esteja livre novamente. Onde a memória será alocada?
  10. 10. Afinidade e NUMA Afinidade: Afinidade de CPU: Vincular um processo ou thread em um núcleo. Se o sistema operacional interromper Em quais núcleos a tarefa, as ela threads não será estão migrada rodando? para outro núcleo e irá esperar até que o núcleo esteja livre novamente. Afinidade Onde a memória de Memória: será Alocação alocada? da memória o mais próximo possível do núcleo que está utilizando.
  11. 11. Políticas NUMA A API NUMA possui políticas que podem ser utilizadas para áreas da memória ou para CPUs. Cada regra tem como objetivo realizar uma acão que permita utilizar algum modelo de alocacão ou associação de CPU em uma thread.
  12. 12. Políticas NUMA ➔ Default ◆ Alocar no nodo local. ➔ Bind ◆ Alocar no conjunto de nodos. ➔ Interleave ◆ Alocar de forma intercalada entre os nodos. (round-robin) ➔ Preferred ◆ Tentar alocar no nodo específico.
  13. 13. numactl Ferramenta onde podemos rodar processos utilizando as políticas NUMA. Possibilidade de uso para programas que não podem ser alterados ou recompilados. Instalação no Ubuntu: sudo apt-get install numactl
  14. 14. numactl Exemplo: numactl --cpubind=0 --membind=0,1 nomeprograma
  15. 15. numactl Exemplo: numactl --cpubind=0 --membind=0,1 nomeprograma Chamada numactl Executar na CPU 0 Somente Alocar a memória na CPU 0 e 1 somente Nome do programa que será executado com as políticas
  16. 16. numactl Outras opções: --preferred=<nodenum> --interleave=nodemask --membind=1 --localalloc --hardware Utilizar nodo específico preferêncialmente. Intercalar memória no conjunto de nodos (nodemask). Aloca a memória no nodo da CPU 1. Aloca a memória somente no nodo local. Intercalar memória no conjunto de nodos (nodemask).
  17. 17. numactl A numaclt permite a aplicação das políticas para programas já compilados, de uma forma geral. É pouco eficiente quando necessitamos otimizar partes da memória ou determinadas threads dentro de um programa. Para isso, podemos usar a biblioteca libnuma.
  18. 18. LibNUMA
  19. 19. libnuma É uma biblioteca que faz a ligacão entre os programas e as políticas NUMA. Possui uma interface de alto nível que tem como base as chamadas da API NUMA. Projeto mantido pela Silicon Graphics International Corp. Autor = Andi Kleen, SUSE Labs Version 1.0.3-rc1 mantida por Cliff Wickman and Christoph Lameter, SGI Instalação no Ubuntu: sudo apt-get install libnuma1 libnuma-dev
  20. 20. libnuma #include <numa.h> #include <stdio.h> int main(){ if (numa_available() < 0) { printf(‘‘Seu sistema não suporta a API NUMAn’’); } }
  21. 21. libnuma: Nodemasks Nodemasks são conjuntos de nodos. nodemask_t mask; nodemask_zero(&mask); //inicializo zerado nodemask_set(&mask,maxnode); //add nodo if (nodemask_isset(&mask,1)){ //maior = 1 … } nodemask_clr(&mask,maxnode); //remove nodo
  22. 22. libnuma: Políticas Com essas funções, todas as futuras alocações irão respeitar a política aplicada. numa_set_preferred numa_set_membind numa_get_interleave_mask numa_set_localalloc
  23. 23. libnuma: Políticas Exemplo: numamask_t oldmask = numa_get_interleave_mask(); //salva a configuração atual de política numa_set_interleave_mask(&numa_all_nodes); //aplica política de memória intercalada //usando modelo round robin … //realiza a alocação intercalada numa_set_interleave_mask(&oldmask); //volta a configuração antiga
  24. 24. libnuma: Vinculando CPUs Funções para vincular threads em CPUs: numa_run_on_node(1); numa_set_prefered(1); //Executar thread no node 1 nodemask_t mask; nodemask_zero(&mask); nodemask_set(&mask 1); numa_bind(&mask); //Também executa no node 1, mas usando numa_bind
  25. 25. libnuma: Vinculando CPUs Liberar a thread para executar em qualquer nodo. numa_run_on_node_mask(&numa_all_nodes); //numa_all_nodes é uma mask com todos os nodos //disponíveis.
  26. 26. libnuma: Outras funções numa_node_size //retorna tamanho da memória do nodo. numa_node_to_cpus //retorna os números de todas as CPUs do nodo. numa_exit_on_error //finaliza o programa quando ocorrer algum erro.
  27. 27. Código Exemplo Programa recebe [N0] [N1] [N2] Bind processo para N0 Bind memória para N1 Escrever na memória alocada na N1 Imprimir tempo Bind na memória para N2 memcpy do N1 para N2 Imprimir tempo
  28. 28. Mai (Memory Affinity Interface) Mai é uma interface de alto nível que disponibiliza funções para utilizar afinidade de memória em aplicações científicas executadas em arquiteturas ccNUMA.
  29. 29. Mai (Memory Affinity Interface) ● Simples de utilizar (menos complexo que a API NUMA, numactl, etc) e controle de memória mais sofisticado (diversas políticas de memória baseadas em vetores), ● Portabilidade (abstração do Hardware) ● Desempenho (desempenho melhor que outras soluções tradicionais).
  30. 30. Mai (Memory Affinity Interface)
  31. 31. Mai (Memory Affinity Interface)
  32. 32. Comparação Libnuma vs Mai Item LibNUMA Mai Complexidade de Utilização Médio Fácil Alto Nível Sim Sim CPU Affinity Sim Não Memory Affinity Sim Sim É necessário se preocupar com ponteiros e endereço de memória Sim Não Portabilidade Não Sim
  33. 33. Conclusão Apresentamos aqui uma biblioteca que permite a utilização de técnicas para ganho de desempenho em arquiteturas NUMA. Podemos verificar que com ela, podemos utilizar as políticas em partes da alocação da memória em forma particular, tendo um nível de detalhamento muito maior. Também foi verificada uma outra opção de biblioteca chamada Mai, que fornece uma interface de alto nível para a aplicação das políticas, abstraindo algumas configurações necessárias quando utilizando libnuma ou numaclt. Embora a biblioteca libnuma ofereça a opção de utilização das políticas de uma forma bastante dinâmica, a biblioteca Mai se mostrou mais fácil de utilizar e mais completa uma vez que oferece mecanismos mais sofisticados para o tratamento da afinidade de memória. No entanto, não apresenta opções para utilizar Afinidade de CPU, presente na libnuma.
  34. 34. Referências

×