Aproveitando o desempenho da Vertica reduzindo as chamadas do sistema da CPU

Qual é a conexão entre as chamadas do sistema kernel e o desempenho do banco de dados, e como podemos melhorar o desempenho, reduzindo o número de chamadas do sistema?

O desempenho de qualquer sistema de banco de dados depende de quatro recursos principais do sistema:

  • CPU
  • Memória
  • Disco de E / S
  • Rede

O desempenho aumentará ao ajustar ou dimensionar cada recurso - este blog abordará o recurso da CPU. É importante observar que sempre que liberamos um gargalo no sistema, podemos encontrar outro. Por exemplo, ao melhorar o desempenho da CPU, a carga do banco de dados muda para IO; portanto, a menos que nosso armazenamento seja capaz de oferecer mais IOPS, talvez não possamos realmente ver a melhoria que esperávamos. Mas não desanime, o ajuste de desempenho às vezes é um jogo de pancadaria…

Todos sabemos que quanto mais poder de processamento disponível para o servidor, melhor o desempenho geral do sistema. Especialmente quando a CPU passa a maior parte do tempo no estado do usuário e não no estado do kernel . No Avance Network, lutamos com dois casos que faziam com que o estado do Kernel consumisse muita CPU; seu sistema pode ter os mesmos problemas.

Como coletamos métricas de CPU no Avance Network?

As métricas são coletadas usando Graphite ; os painéis são construídos com o Grafana . O plug-in da CPU Sensu, cpu-metrics.rb, coleta as seguintes métricas da CPU: usuário, bom , sistema , inativo, iowait, irq, softirq, roubar, convidado. Como o processo Vertica é executado em um espaço de usuário da CPU que foi agregado , vamos nos concentrar principalmente nas métricas agradáveis ​​e do sistema.

O sistema chama o impacto da CPU chamando a função Vertica new_time

O que são chamadas de sistema?

As chamadas do sistema são como um programa entra no kernel para executar uma tarefa. Os programas usam chamadas do sistema para executar uma variedade de operações, como: criação de processos, execução de E / S de rede e arquivo e muito mais.

Se uma chamada do sistema é uma interface interna tão básica entre um aplicativo e o kernel do Linux, por que devemos nos preocupar com isso?

  • Às vezes, esse é o caso. No entanto, se o sistema chamar 'o uso da CPU permanece alto por longos períodos de tempo, isso pode ser uma indicação de que algo não está certo. Uma possível causa de picos de chamadas do sistema pode ser um problema com um módulo de driver / kernel ou, às vezes, devido à alta simultaneidade
  • Para executar uma chamada de sistema, a CPU precisa mudar do modo de usuário para o modo kernel, isso é chamado de alternância de contexto , pois a comutação ontext tem custos de desempenho .

 No Avance Network, todos os dados do registro de data e hora são salvos no fuso horário UTC. Os relatórios agregados para tabelas de dados brutos produzem relatórios convertidos no fuso horário do editor (cliente) usando função " new_time " da Vertica  para converter entre fusos horários.

Por exemplo, agregando ações por horas:

 

 

A imagem a seguir representa o uso geral da CPU de um servidor ao longo do tempo, empilhando todos os tipos de métricas de CPU:

Como perfilamos as chamadas de CPU?

O Linux perf é uma ferramenta poderosa para diagnosticar isso, e um FlameGraph pode ser usado para virtualizar o relatório perf, desenhando um gráfico.

Comandos perf úteis:

  • perf top - eventos em tempo real
  • perf record - execute um comando e registre seu perfil em perf.data
  • relatório perf - leia perf.data (criado pelo perf record) e exiba o perfil

 

A execução dos seguintes comandos registrará e relatará chamadas de CPU por uma duração de 5 minutos:

 

 

 


A saída do arquivo /tmp/report.out mostra o seguinte:

 

Se o gráfico de chama estiver instalado, podemos executar: