Testes de desempenho para sistemas de alta carga e distribuídos

O Midair corre sempre a mesma carga na mesma bancada. Cada execução regista as suas medições no registo e fica como um registo separado.

Um número de desempenho sozinho diz pouco. Ganha sentido ao lado do mesmo número do build anterior, medido da mesma forma.

perf/http_latency · build 2.4.1Exemplo
load
wrk · 4 threads · 256 connections · 60 s
requests
41 230 req/s
latency
p50 1.9 ms · p99 9.1 ms
energy
408 J over 60 s · avg 6.8 W · peak 9.4 W
bench
lab-2 · 3 hosts · lock 9c41e07
record
run 312 · kept with its configuration

O que são testes de desempenho.Números com uma carga conhecida.

Os testes de desempenho medem como um sistema se comporta com carga: o débito, a latência, os pedidos que serve por segundo e a energia que gasta.

Os testes de carga verificam a carga que o sistema deve suportar. Os testes de stress vão além desse ponto para ver onde e como o sistema falha.

Em dispositivos e redes, a bancada conta tanto como o código. O mesmo build dá números diferentes noutra máquina, noutra ligação ou noutra fonte de alimentação.

O que uma execução mede.Escolha um tipo de medição.

Débito

Bits ou pacotes por segundo através de uma ligação, de um dispositivo ou de um serviço. O iperf e o iperf3 têm uma interface comum, por isso o teste pode trocar de ferramenta sem ser reescrito.

Ferramentas
iperf, iperf3, netperf, TRex
No registo da execução
throughput  mean 912 Mbit/s  min 884  max 931
iperf3 · TCP · 8 streams · 60 s · Exemplo

Latência

Tempo de ida e volta e latência dos pedidos, registados como mediana e percentis. A cauda costuma mudar antes da mediana.

Ferramentas
wrk, ping, netperf, sfnt-pingpong
No registo da execução
rtt  median 0.41 ms  p99 1.90 ms  stdev 0.22 ms
sfnt-pingpong · UDP · 64 bytes · Exemplo

Pedidos

Pedidos e ligações por segundo contra servidores HTTP, Redis e memcached.

Ferramentas
wrk, redis-benchmark, memtier, memaslap
No registo da execução
rps  41 230 req/s    cps  2 950 conn/s
wrk · 256 connections · 60 s · Exemplo

Energia

Energia na janela do teste, em joules e miliwatts-hora, com a potência média e de pico. Funciona com instrumentos de bancada SCPI e com os perfiladores PPK2, Joulescope, Otii e Monsoon.

Ferramentas
tsf-power
No registo da execução
energy  408 J (113.3 mWh) over 60 s
power   avg 6.8 W  peak 9.4 W
tsf-power · Joulescope · Exemplo

O teste escreve cada valor no registo do Test Environment como uma medição, com a unidade e a forma de agregação: mínimo, média, mediana, percentil ou a série completa.

Comparar dois builds.A mesma carga, a mesma bancada, uma alteração.

Um gráfico de exemplo feito a partir de duas execuções registadas do mesmo teste. Mova o cursor ou aponte para o gráfico para ler cada passo de carga.

Latência p99 por ligações simultâneas build 2.4.0 build 2.4.1 Exemplo
Latência p99, ms 0 5 10 15 20 25326496128160192224256288320Ligações simultâneas 2.4.0 2.4.1
Ligações
256
build 2.4.0
4,8 ms
build 2.4.1
9,1 ms
Diferença
+90%

O Midair não tem um ecrã para comparar duas execuções. Cada execução é um registo separado, com as medições no seu próprio registo. Se publicar as execuções no Bublik, a vista de histórico mostra uma medição ao longo de várias execuções.

Ver os números
Ligaçõesbuild 2.4.0, msbuild 2.4.1, msDiferença
322,12,0-5%
642,22,1-5%
962,42,3-4%
1282,62,5-4%
1602,92,90%
1923,33,6+9%
2243,95,4+38%
2564,89,1+90%
2886,214,8+139%
3208,422,6+169%

O que torna duas execuções comparáveis.Cinco coisas que cada registo fixa.

  1. O código

    O builder.conf.lock guarda o commit exato da suite e de cada biblioteca que ela compila.

  2. A bancada

    Os ficheiros env e run.conf de cada bancada indicam as máquinas, as interfaces e os instrumentos que a execução usa.

  3. O resultado esperado

    O trc.xml guarda o veredicto esperado de cada teste. Um teste falha quando a medição passa o limite que ele verifica.

  4. Várias máquinas, uma execução

    O Test Environment coordena geradores de carga e recetores em várias máquinas na mesma execução, com um único registo.

  5. Um registo novo de cada vez

    Cada arranque cria um registo novo com a sua configuração. O Midair nunca escreve por cima de uma execução anterior.

Perguntas.Respostas curtas.

O que são testes de desempenho?

Os testes de desempenho medem como um sistema se comporta com carga: o débito, a latência e os recursos que usa à medida que a carga aumenta.

Qual é a diferença entre testes de carga e testes de stress?

Os testes de carga verificam o desempenho com o tráfego que o sistema deve suportar. Os testes de stress vão além desse ponto para ver onde o sistema falha e como se comporta enquanto falha.

Que ferramentas de carga um teste pode controlar?

O Test Environment tem wrappers prontos para iperf, iperf3, netperf, TRex, wrk, redis-benchmark, memtier, memaslap, sfnt-pingpong e stress. O teste arranca-os nas máquinas dos agentes e lê os resultados.

O Midair compara dois builds?

Não num único ecrã. Corre a mesma suite nos dois builds, e cada execução guarda as medições no seu próprio registo. Se publicar as execuções no Bublik, a vista de histórico mostra uma medição ao longo de várias execuções.

Podemos medir o consumo de energia?

Sim. O tsf-power mede a energia que um dispositivo gasta na janela do teste, com instrumentos de bancada SCPI ou perfiladores USB como PPK2, Joulescope, Otii e Monsoon.

Encaixa na nossa CI?

Sim. As execuções começam a partir da sua CI, por exemplo com o plugin para Jenkins. Um assistente de IA pode lançar execuções e ler falhas através de MCP.

Comece por uma carga numa bancada.Depois meça cada build da mesma forma.

Compare os planos na página de preços. Os preços são mensais, em euros.

Iniciar o seu piloto