[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Aplicações em multicore. [RESOLVIDO]



On Thu, 01 Sep 2011, Cleber Ianes wrote:
> Muito obrigado Fabricio.
> É exatemente isso que preciso, agora já tenho o "caminho" a seguir. 

Seguem mais umas dicas:


0. Portar uma aplicação com elevado paralelismo para rodar em GPU, quando
   possível, é praticamente a única resposta correta.  O aumento de
   performance é medido em ordens de grandeza.


1. Use o hwloc para sempre amarrar o processo em todos os irmãos HT ao
   mesmo tempo.

   E use o hwloc para amarrar o resto do sistema para longe daquele core e
   de todas as suas threads.  *Não* toque nos processos do kernel a menos
   que saiba o que está fazendo, alguns precisam poder rodar na mesma CPU
   que o seu processo para melhor performance em algumas syscalls.

   Você quer que o processo possa rodar em todas as threads do core, e
   quer manter outros processos longe de todas as threads do core.  O
   objetivo é manter os caches L2 e L3 do core quentes com o que o
   processo precisa.

   Dá para fazer tudo isso para cada thread do processo se necessário, mas
   se você entregar várias "CPUs" para o processo, o kernel vai espalhar
   as threads dele em todas essas CPUs sozinho.

2. Se o equipamento for NUMA (e se for servidor recente com mais de um
   soquete, as chances são enormes de que seja), configure o BIOS/ UEFI
   corretamente e use o numactl e o hwloc para aumentar a afinidade do
   processo com a memória mais perto do processador onde ele irá rodar.

3. A única forma de ter certeza que você fez o que é melhor para a sua
   aplicação é testando.

4. Se o processo faz muito IO de rede, pode ser necessário trabalhar
   também na afinidade das interrupções.

5. Use um equipamento próprio para HPC se puder, e coloque tudo no
   BIOS/UEFI para "performance", na tentativa de evitar que o firmware
   fique desperdiçando performance fazendo besteira em SMM.

6. Use o schedtool para mudar o modelo de scheduling do processo para
   o quer for realmente correto para ele.  Provavelmente SCHED_BATCH.

7. Leve em conta a CPU que tem.  Se o processo não precisa de todos os
   cores, e o resto do sistema também não, é possível que desativá-los
   permita que o auto-overclock de uma CPU Intel suba a performance da
   aplicação, ou que diminua a pressão nos caches L3 ou a quantidade de
   mensagens inter-CPU (IPIs).  Tem um utilitário não empacotado, o
   turbostat, distribuido no fonte dos kernel mais novos, capaz de medir o
   "turbo mode" dos Intel.

   AMD tem suas peculiaridades que são bem diferentes das dos Intel.
   Infelizmente não as conheço bem para listar aqui.

8. Tudo isso (exceto a regra "0") não vai aumentar a performance de forma
   estrodosa, a menos que tenha algo de muito errado para começo de
   história, ou seja, muitas vezes não vale o esforço.

-- 
  "One disk to rule them all, One disk to find them. One disk to bring
  them all and in the darkness grind them. In the Land of Redmond
  where the shadows lie." -- The Silicon Valley Tarot
  Henrique Holschuh


Reply to: