Porque é que o seu novo servidor mede pior do que o antigo, quando não é mais lento.
Um valor de bogomips mais baixo depois de uma migração não é um servidor mais lento, é um artefacto da virtualização. O que mede realmente, e como testar o trabalho real.
Neste artigo 5 secções
Uma pergunta comum depois de uma migração é se um valor de bogomips mais baixo significa um servidor mais lento. Não significa. Eis como lhe respondemos.
- Um cliente que acabava de migrar para a nossa plataforma reparou que um valor chamado bogomips aparecia mais baixo do que na máquina antiga, e perguntou se o novo servidor era mais lento.
- O bogomips não mede nada que quisesse comprar. É um ciclo de calibração que o kernel corre no arranque para dimensionar os seus próprios atrasos internos. Num host virtual reflete o relógio apresentado ao guest, enquanto o núcleo físico por baixo continua a correr em turbo máximo.
- Não aceite o indicador indireto de confiança. Corra os benchmarks reais, cargas criptográficas e de CPU, nas duas máquinas: uma geração de processador mais recente é mais rápida, com instruções mais largas. O trabalho real responde à pergunta.
- A lição: uma medição vale o que mede. Não discuta o indicador. Diga o que ele mede realmente, e deixe o trabalho real decidir.
O número por trás da pergunta
Tinha comparado o bogomips na máquina antiga e na nova, e o valor novo veio mais baixo. Lido à letra, parece um downgrade. Não é, e para perceber porquê é preciso saber o que é esse número.
$ grep -m1 bogomips /proc/cpuinfoO que o bogomips mede realmente
O bogomips não é um benchmark. É um ciclo de calibração que o kernel corre uma vez no arranque para dimensionar os seus próprios atrasos internos de temporização, de modo a saber aproximadamente quantos busy-loops cabem num dado intervalo. O nome é uma piada que os programadores do kernel fizeram à própria custa: bogus millions of instructions per second. Num host virtualizado o número é mais bogus do que o habitual, porque reflete o relógio apresentado ao guest, o valor que o hypervisor entrega à VM, enquanto o núcleo físico por baixo continua a correr em turbo máximo. Um valor de bogomips mais baixo é uma peculiaridade da forma como a virtualização expõe o relógio, não a perda de nada real.
“O bogomips não mede nada que quisesse comprar.”
O valor desceu. O silício não.
O indicador indireto contra o trabalho real
Toda a discussão do tipo «o meu servidor ficou mais lento» é na verdade uma disputa sobre o que escolheu medir. Ponha o indicador ao lado do trabalho e a disputa acaba.
| O INDICADOR: BOGOMIPS | O TRABALHO REAL: UM BENCHMARK | |
|---|---|---|
| O que é realmente | Um ciclo de calibração que o kernel corre uma vez no arranque para dimensionar os seus atrasos de temporização | Cargas criptográficas e de CPU que representam o que a sua aplicação faz sob carga |
| O que lê num host virtual | O relógio apresentado ao guest, um número que o hypervisor entrega à VM | Instruções concluídas no núcleo físico, que continua a correr em turbo máximo |
| THE ONE THAT MATTERSMuda quando o hardware fica mais recente? | Não de forma fiável. Segue um valor de relógio virtualizado, não o silício | Sim. Uma geração mais recente com instruções mais largas faz mais por ciclo |
| Quando é medido | Uma vez, no arranque, e nunca mais | A pedido, as vezes que quiser, por si |
| Pode comprá-lo? | Ninguém vende bogomips, e nenhum utilizador alguma vez sentiu um | Sim. Este é o trabalho que paga para ser feito mais depressa |
Meça o trabalho, não o indicador
A jogada perdedora é dizer que o bogomips não significa nada e ficar por aí, porque pede a um cliente que troque o seu número pela nossa palavra. Por isso fizemos o contrário. Dissemos o que o bogomips mede realmente, e depois entregámos-lhe os benchmarks para correr ele próprio: cargas criptográficas e de CPU reais, do tipo que representa o que uma aplicação faz de facto. Acrescentámos uma nota. A geração de processador mais recente por baixo da VM dele é mais rápida, com instruções mais largas, por isso o trabalho real muito provavelmente sairia à frente, não atrás.
# stop measuring the proxy. measure the work.
$ openssl speed -evp aes-256-gcm # cryptographic throughput
$ sysbench cpu --cpu-max-prime=20000 run # raw CPU work
# run on the old box and the new one, then compare the work, not the clock.Meça o trabalho, não o relógio
: Escolha cargas que se pareçam com a sua aplicação. O throughput criptográfico e um teste de CPU são um começo justo e honesto. O bogomips, os MHz e as «pontuações» de um único número são indicadores indiretos. Salte-os.
Corra comandos idênticos nas duas máquinas
: A única coisa que está a comparar é quanto trabalho real cada uma termina no mesmo tempo de relógio.
Deixe o resultado decidir
: Se a máquina nova faz mais trabalho, a migração foi um upgrade e o valor de bogomips era ruído. Se realmente faz menos, agora tem um número real, e agora nós temos algo que vale a pena investigar em conjunto.
A lição
Uma medição vale o que realmente mede. Quando um cliente chega com um indicador indireto, a jogada não é discutir o número. É dizer o que o número mede realmente, e depois deixar o trabalho real decidir. A máquina por baixo esteve calma e rápida o tempo todo. A única coisa que ficou mais lenta foi o benchmark.
Respostas diretas
Um número de bogomips mais baixo no meu novo servidor é um problema?+
Quase nunca. O bogomips é um ciclo de calibração do kernel no arranque, não um benchmark de desempenho. Numa máquina virtual reflete o relógio apresentado ao guest, enquanto o núcleo físico por baixo pode continuar a correr em turbo máximo. Um valor mais baixo é normalmente um artefacto da virtualização, não desempenho perdido.
Porque é que o bogomips é mais baixo numa máquina virtual ou depois de mudar para um VPS?+
Porque o hypervisor apresenta um valor de relógio ao guest, e o kernel calibra-se com base nesse número apresentado no arranque. O núcleo físico continua a correr à sua velocidade turbo real, muitas vezes mais alta. O valor mudou. O silício não.
O meu novo servidor parece mais lento depois de migrar. O que devo verificar primeiro?+
Primeiro, confirme que está a medir o trabalho e não um indicador como o bogomips, os MHz do relógio ou uma pontuação sintética de um único número. Depois verifique os verdadeiros culpados do nosso guia de diagnóstico: latência das queries da base de dados, profundidade da fila do disco, saturação dos workers PHP ou espera de rede. Depois de uma migração, a primeira coisa que verificamos é se mudou a métrica, não a máquina.
Como é que percebo realmente se o meu novo servidor é mais lento?+
Corra o trabalho, não o indicador. Faça benchmark de cargas que se pareçam com a sua aplicação, um teste de throughput criptográfico (openssl speed) e um teste de CPU (sysbench), e corra comandos idênticos nas duas máquinas. O trabalho real decide em minutos.
Uma frequência de relógio mais baixa no novo CPU não é um downgrade?+
Não por si só. A frequência é um dos fatores. Uma geração mais recente com instruções mais largas faz mais trabalho por ciclo, por isso pode terminar mais depressa com um relógio nominal mais baixo. É exatamente por isso que um valor de um único número o engana.
Acabei de migrar e algo parece mais lento. Ajudam-me a verificar?+
Sim. Envie-nos o número. Dizemos-lhe o que ele mede realmente, e entregamos-lhe o benchmark para correr por si. Se o trabalho real for genuinamente mais lento, isso é um ticket a sério e vamos investigar consigo. Se não for, terá a prova em dois minutos.
Acabou de migrar, e algo parece mais lento?
Envie-nos o número e dizemos-lhe o que mede. Não precisa de confiar em nós.
Fale com um engenheiroChegou ao fim.
Ponha a leitura em prática
O que executa?
Fale-nos da carga de trabalho, do tráfego e dos requisitos de recuperação. Comece pelo configurador de servidores ou discuta os detalhes com um engenheiro.
Escrito pelos engenheiros que constroem e operam a infraestrutura que descreve.Fale com um engenheiro
