Analisando o rendimento do sistema com a Intel PMU

1

Eu confio em um lugar apropriado para essa pergunta. Não é relacionado a programação ou eu poderia ter perguntado no Stackoverflow. No entanto, aqui está a questão. Eu estou fazendo um benchmarking de taxa de transferência de rede. Eu tenho duas NICs de 40GbE conectadas atualmente verificando diretamente a largura de banda. (Para conseguir isso, estou usando o iperf3 ).

Meus sistemas de teste são dual Xeon E5 2667 (de / proc / cpuinfo model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz ) expondo 24 processadores lógicos. Há um hipercubo NUMA de dois nós com metade dos processadores conectados a cada um deles. Há 32 GB de RAM na forma de DDR3 não-ECC. Em cada caso, a NIC 40GbE é conectada a um slot PCIe Gen 3 x8 que está associado ao nó NUMA 0.

Quando executo um teste com iperf3 com um mínimo de opções (essencialmente usando padrões que são suficientes para meus propósitos), não consigo ver a largura de banda para o teste TCP subir acima de 21x Gbps (ok, então, ocasionalmente fica acima de 21, mas geralmente é 21.x). No entanto, se eu usar a opção iperf3 -A n que restringe iperf3 ao processador <n> , vejo ~ 36 Gbps, que é muito mais parecido com o que eu esperava. Eu gostaria de entender o porquê.

Eu experimentei alguns com numactl para vincular alocações de memória, nós de processador e processador físico para iperf3 . Estranhamente, não consigo atingir o mesmo rendimento usando numactl quando uso a opção iperf3 -A . Brincando com várias coisas / opções (veja numactl man page para mais), principalmente --physcpubind=<n> , --cpunodebind=<n> e --membind=<n> não consigo mais do que ~ 31Gbps neste teste. Eu gostaria de entender o porquê.

Para isso, comecei a usar o pacote perf que o linux fornece. No entanto, não estou achando muita coisa na documentação disponível do Linux ou da Intel sobre as coisas da PMU disponíveis. Ah, isso explica como executá-lo, mas pouco é dito sobre o que as coisas realmente significam . Como exemplo, bus-cycles aparece em "Eventos de hardware" e "Eventos do Kernel PMU". Qual é a diferença? perf list delineia os "eventos" que podem ser monitorados; é demorado. A documentação que encontrei da Intel para o Xeon E5 2667 (que acredito ser uma configuração Haswell) mostra que várias coisas relacionadas a NUMA são suportadas e perf list mostra uncore_imc_0/cas_count_read/ e uncore_qpi_0/drs_data/ (entre muitas outras) que devem estar relacionadas para isso. No entanto, quando executo iperf3 ao tentar monitorar isso, percebo que ele não é suportado. Por exemplo:

$ perf stat -e uncore_qpi_0/drs_data/ -- iperf3 -c 192.168.0.244 -A 0
.... program output ....
Performance counter stats for 'iperf3 -c 192.168.0.244 -A 0':

  <not supported>      uncore_qpi_0/drs_data/   

No entanto, os documentos mostram que deveria ser. Existe alguma maneira de descobrir o que é suportado pelo meu processador sem executar o programa apenas para descobrir o posfácio que não é? Alguém teria sugestões de métricas importantes para entender a disparidade? (Marcado com RHEL porque essa é a plataforma de destino para a solução.)

    
por Andrew Falanga 21.04.2017 / 22:08

0 respostas