1 pontos por GN⁺ 2 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Após a implantação de uma nova camada de cache, a latência média piorou de 112 ms para 122 ms, mas a mediana melhorou de 99 ms para 54 ms e o p99 piorou de 309 ms para 678 ms, tornando difícil julgar sucesso ou fracasso com uma única estatística
  • Depois da implantação, a distribuição de latência se dividiu de um pico para dois; ao sobrepor a função de distribuição acumulada (CDF), vê-se que, em torno de 140 ms, as requisições rápidas melhoraram e as lentas pioraram
  • A função de deslocamento, que mostra a variação por percentil, junto com gráficos de ridgeline diários e heatmaps, revela a magnitude das melhorias e regressões, além de como o grupo de requisições lentas cresceu enquanto a taxa de implantação subia de 0% para 100%
  • Ao dividir os dados por resultado do cache e tamanho da resposta, foi possível confirmar a causa da distribuição bimodal: acertos de cache em respostas pequenas ficaram mais rápidos, enquanto misses de cache em respostas grandes ficaram mais lentos por causa de um hop adicional
  • Se escolhermos apenas a média ou um percentil específico, é possível justificar conclusões opostas; por isso, é preciso analisar a distribuição inteira e os subgrupos para chegar a ações como aumentar o tamanho máximo de objeto no cache ou dividir respostas grandes

Melhorias de desempenho que não apareciam em produção

  • Melhorias de desempenho relacionadas ao lld apareceram em benchmarks, mas, nos dashboards reais de produção, era difícil encontrar uma mudança clara por causa do ruído nos dados
  • A velocidade de build pode variar muito conforme várias variáveis, como cache frio, builds incrementais, execução local ou remota, estado do sistema e workload
  • Um caso de avaliação de desempenho de build com função de distribuição acumulada (CDF) mostrou a necessidade de examinar os próprios dados de várias maneiras, em vez de depender de uma única imagem ou estatística
  • Todos os exemplos foram gerados a partir de um único dataset sintético com seed fixa, e o script completo, incluindo um shebang de nix-shell, permite reproduzir exatamente cada figura em um ambiente Nix
  • IA foi usada para criar os dados e os gráficos da narrativa

Uma implantação de cache que parecia fracasso pela média

  • Para reduzir a latência das requisições de um serviço web, uma nova camada de cache foi implantada ao longo de uma semana, mas a latência média aumentou 9%, de 112 ms para 122 ms
  • Olhando apenas a média, é fácil interpretar a mudança como uma regressão que justificaria reverter a alteração e iniciar resposta a incidente e post-mortem

Quatro conclusões a partir dos mesmos dados

  • As estatísticas antes e depois da implantação apontam em direções diferentes
    • Média: 112 ms → 122 ms, 9% pior
    • Mediana p50: 99 ms → 54 ms, 46% melhor
    • p95: 224 ms → 454 ms, 103% pior
    • p99: 309 ms → 678 ms, 119% pior
  • A média indica uma regressão leve, mas a mediana mostra que requisições típicas ficaram quase duas vezes mais rápidas, enquanto o p99 revela um problema sério em que as piores requisições ficaram mais de duas vezes mais lentas
  • Como média e mediana calculadas sobre os mesmos dados apontam em direções opostas, é fácil escolher apenas a estatística que sustenta seu julgamento

Duas populações de requisições reveladas pela forma da distribuição

  • No gráfico de densidade, a distribuição antes da implantação tinha um único pico, mas depois da implantação se dividiu em dois picos
  • Essa forma explica a contradição entre as estatísticas, mas gráficos de densidade também têm limitações
    • A forma muda conforme o parâmetro de suavização escolhido
    • Quando as áreas preenchidas de duas distribuições se sobrepõem, a leitura fica difícil
    • A existência de dois grupos aparece, mas é difícil identificar diretamente a posição de percentis como a mediana

Comparando todos os percentis com CDF

  • A função de distribuição acumulada (CDF) mostra, para cada latência x, a proporção de requisições concluídas em até x milissegundos
  • Ao sobrepor as CDFs antes e depois da implantação em um único gráfico, é possível ver como cada percentil se deslocou em toda a população de requisições
  • Depois da implantação, a curva se desloca para a esquerda abaixo de 140 ms, indicando que mais requisições ficaram mais rápidas do que antes; depois de 140 ms, porém, mais requisições ficaram mais lentas
  • O ponto em torno de 140 ms em que as duas curvas se cruzam é a fronteira onde o efeito da mudança passa de melhoria para piora
  • Quando duas CDFs se cruzam, a direção do efeito depende do percentil escolhido, então nenhum percentil isolado consegue resumir toda a mudança

Medindo a variação em cada percentil

  • A CDF mostra se cada faixa ficou mais rápida ou mais lenta, mas não mostra diretamente a magnitude da mudança
  • A função de deslocamento (shift function) calcula, para cada percentil p, a diferença entre a latência depois da implantação e a latência antes da implantação
    • Abaixo de 0 estão as faixas que melhoraram
    • Acima de 0 estão as faixas que ficaram mais lentas
  • Com isso, é possível verificar não só a direção da mudança em cada ponto da distribuição, mas também sua magnitude

A regressão que cresceu durante a implantação

  • A nova camada de cache foi expandida gradualmente de 0% para 100% do tráfego ao longo de uma semana; comparar apenas dois momentos, antes e depois da implantação, faz perder as mudanças intermediárias
  • Em um gráfico ridgeline com as distribuições diárias empilhadas, o pico principal das requisições rápidas se desloca para a esquerda conforme a implantação avança, enquanto um segundo pico de requisições lentas aparece à direita
  • Ao mesmo tempo em que a mediana cai, a quantidade e a latência das requisições lentas aumentam silenciosamente
  • Como a latência segue aproximadamente uma distribuição lognormal, usa-se escala logarítmica no eixo x
    • Em um eixo linear, o pico das requisições rápidas sobe muito e as requisições lentas se espalham de forma tênue, dificultando ler os dois picos juntos
  • Em um heatmap que mostra colunas por dia e a quantidade de tráfego por latência usando cores, a nova população de requisições também aparece de forma sutil
  • Se a semana inteira for combinada em um único valor agregado, desaparecem as sete distribuições diárias diferentes e a tendência de mudança

Decompondo a distribuição bimodal em acertos e misses de cache

  • Na análise real do lld, foi necessário dividir os dados pelo tamanho do binário, por exemplo se era maior que 50 MiB, para identificar a distribuição bimodal da latência
  • Na nova camada do caso sintético, as requisições se dividem entre acertos (hits), atendidos pelo cache, e misses, encaminhados ao backend passando por um hop adicional
  • Ao separar a CDF das requisições pós-implantação por resultado do cache, cada grupo volta a ter um único pico
    • Acertos de cache se deslocam para a esquerda em relação à baseline existente, ficando mais rápidos
    • Misses de cache ficam muito mais à direita por causa do custo do hop adicional

Causa e ação encontradas no tamanho da resposta

  • Miss de cache é apenas o mecanismo de funcionamento; para entender quais requisições causam misses e por quê, é preciso olhar também para o tamanho da resposta
  • O cache mantém objetos pequenos e usados com frequência, mas objetos grandes são expulsos ou nem entram nele desde o início
  • Em um jointplot, que diferencia por cor acertos e misses de cache na relação entre latência e tamanho da resposta e combina as distribuições de densidade de cada eixo, os dois grupos aparecem claramente
    • O grupo de respostas pequenas e baixa latência corresponde a acertos de cache
    • O grupo de respostas grandes e alta latência corresponde a misses de cache
  • A distribuição bimodal da latência veio da bimodalidade da distribuição de tamanhos de resposta, e é possível responder aumentando o tamanho máximo de objeto no cache ou dividindo respostas grandes

Olhar para a distribuição inteira, além de um único gráfico

  • Um único painel ou gráfico não é suficiente para capturar toda a situação e, dependendo do caso, pode levar a uma decisão equivocada
  • É preciso examinar os mesmos dados de várias formas para entender conjuntamente a forma da distribuição, o efeito por percentil, a mudança ao longo do tempo, os subgrupos e suas causas
  • Em especial, a CDF é útil para comparar várias populações de requisições e representar a distribuição inteira em um único gráfico

Ainda não há comentários.

Ainda não há comentários.