Perché il vostro nuovo server risulta più lento del vecchio, senza esserlo.
Un bogomips più basso dopo una migrazione non è un server più lento, è un artefatto della virtualizzazione. Che cosa misura davvero, e come si mette alla prova il lavoro reale.
In questo articolo 5 sezioni
Una domanda frequente dopo una migrazione è se un bogomips più basso significhi un server più lento. Non lo significa. Ecco come abbiamo risposto.
- Un cliente appena migrato sulla nostra piattaforma ha notato che un valore chiamato bogomips risultava più basso che sulla sua vecchia macchina, e ha chiesto se il nuovo server fosse più lento.
- Il bogomips non misura nulla che vorreste comprare. È un ciclo di calibrazione che il kernel esegue all'avvio per dimensionare i propri ritardi interni. Su un host virtuale riflette il clock presentato al guest, mentre il core fisico sottostante continua a girare a pieno turbo.
- Non fidatevi del dato sostitutivo a scatola chiusa. Eseguite voi stessi i benchmark reali, carichi crittografici e di calcolo, su entrambe le macchine: una generazione di processori più recente è più veloce, con istruzioni più larghe. Il lavoro reale risponde alla domanda.
- La lezione: una misura vale quanto ciò che misura. Non discutete il dato sostitutivo. Dite che cosa misura davvero, e lasciate che sia il lavoro reale a decidere.
Il numero dietro la domanda
Aveva confrontato il bogomips sulla vecchia macchina e sulla nuova, e la nuova lettura era risultata più bassa. Preso alla lettera, sembra un passo indietro. Non lo è, e per capire perché bisogna sapere che cos'è quel numero.
$ grep -m1 bogomips /proc/cpuinfoChe cosa misura davvero il bogomips
Il bogomips non è un benchmark. È un ciclo di calibrazione che il kernel esegue una volta all'avvio per dimensionare i propri ritardi interni di temporizzazione, così da sapere all'incirca quanti busy-loop stanno in un dato intervallo. Il nome è una battuta che gli sviluppatori del kernel hanno fatto a proprie spese: bogus millions of instructions per second. Su un host virtualizzato il numero è più bogus del solito, perché riflette il clock presentato al guest, il valore che l'hypervisor consegna alla VM, mentre il core fisico sottostante continua a girare a pieno turbo. Un bogomips più basso è una stranezza di come la virtualizzazione espone il clock, non la perdita di qualcosa di reale.
“Il bogomips non misura nulla che vorreste comprare.”
La lettura è scesa. Il silicio no.
Il dato sostitutivo contro il lavoro reale
Ogni discussione del tipo «il mio server è diventato più lento» è in realtà una lite su che cosa avete scelto di misurare. Mettete il dato sostitutivo accanto al lavoro e la lite finisce.
| IL DATO SOSTITUTIVO: BOGOMIPS | IL LAVORO REALE: UN BENCHMARK | |
|---|---|---|
| Che cos'è davvero | Un ciclo di calibrazione che il kernel esegue una volta all'avvio per dimensionare i propri ritardi di temporizzazione | Carichi crittografici e di calcolo che rappresentano ciò che la vostra applicazione fa sotto carico |
| Che cosa legge su un host virtuale | Il clock presentato al guest, un numero che l'hypervisor consegna alla VM | Istruzioni eseguite sul core fisico, che continua a girare a pieno turbo |
| THE ONE THAT MATTERSCambia quando l'hardware diventa più recente? | Non in modo affidabile. Segue un valore di clock virtualizzato, non il silicio | Sì. Una generazione più recente con istruzioni più larghe fa di più per ciclo |
| Quando viene misurato | Una volta, all'avvio, e poi mai più | A richiesta, tutte le volte che volete, da voi |
| Si può comprare? | Nessuno vende bogomips, e nessun utente ne ha mai percepito uno | Sì. È il lavoro che pagate perché venga svolto più in fretta |
Misurate il lavoro, non il dato sostitutivo
La mossa perdente è dire che il bogomips non significa nulla e lasciarla lì, perché chiede a un cliente di scambiare il suo numero con la nostra parola. Così abbiamo fatto il contrario. Abbiamo detto che cosa misura davvero il bogomips, poi gli abbiamo consegnato i benchmark da eseguire da sé: carichi crittografici e di calcolo reali, di quelli che rappresentano ciò che un'applicazione fa davvero. Abbiamo aggiunto una nota. La generazione di processori più recente sotto la sua VM è più veloce, con istruzioni più larghe, quindi il lavoro reale sarebbe risultato con ogni probabilità avanti, non indietro.
# 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.Misurate il lavoro, non il clock
: Scegliete carichi che somiglino alla vostra applicazione. Il throughput crittografico e un test CPU sono un inizio equo e onesto. Bogomips, MHz e «punteggi» a numero unico sono dati sostitutivi. Saltateli.
Eseguite comandi identici su entrambe le macchine
: L'unica cosa che confrontate è quanto lavoro reale ciascuna completa nello stesso tempo di orologio.
Lasciate che sia il risultato a decidere
: Se la nuova macchina fa più lavoro, la migrazione è stata un passo avanti e la lettura del bogomips era rumore. Se davvero ne fa meno, ora avete un numero reale, e ora abbiamo qualcosa che vale la pena indagare insieme.
La lezione
Una misura vale quanto la cosa che misura davvero. Quando un cliente arriva con un dato sostitutivo, la mossa non è discutere il numero. È dire che cosa misura davvero quel numero, e poi lasciare che sia il lavoro reale a decidere. La macchina sottostante è stata calma e veloce per tutto il tempo. L'unica cosa diventata più lenta era il benchmark.
Risposte dirette
Un bogomips più basso sul mio nuovo server è un problema?+
Quasi mai. Il bogomips è un ciclo di calibrazione del kernel all'avvio, non un benchmark di prestazioni. Su una macchina virtuale riflette il clock presentato al guest, mentre il core fisico sottostante può continuare a girare a pieno turbo. Una lettura più bassa è di solito un artefatto della virtualizzazione, non prestazioni perdute.
Perché il bogomips è più basso su una macchina virtuale o dopo il passaggio a un VPS?+
Perché l'hypervisor presenta un valore di clock al guest, e il kernel si calibra su quel numero presentato all'avvio. Il core fisico continua a girare alla sua velocità turbo reale, spesso più alta. La lettura è cambiata. Il silicio no.
Il mio nuovo server sembra più lento dopo la migrazione. Che cosa controllo per primo?+
Prima, verificate di misurare il lavoro e non un dato sostitutivo come bogomips, MHz del clock o un punteggio sintetico a numero unico. Poi controllate i veri colpevoli del nostro playbook diagnostico: latenza delle query del database, profondità della coda del disco, saturazione dei worker PHP, o attese di rete. Dopo una migrazione, la prima cosa che controlliamo è se è cambiata la metrica, non la macchina.
Come capisco davvero se il mio nuovo server è più lento?+
Eseguite il lavoro, non il dato sostitutivo. Fate benchmark di carichi che somiglino alla vostra applicazione, un test di throughput crittografico (openssl speed) e un test CPU (sysbench), ed eseguite comandi identici su entrambe le macchine. Il lavoro reale decide in pochi minuti.
Una frequenza di clock più bassa sulla nuova CPU non è un passo indietro?+
Non di per sé. La frequenza è un solo fattore. Una generazione più recente con istruzioni più larghe fa più lavoro per ciclo, quindi può finire prima a un clock nominale più basso. È esattamente per questo che una lettura a numero unico vi inganna.
Ho appena migrato e qualcosa risulta più lento. Mi aiutate a controllare?+
Sì. Mandateci il numero. Vi diremo che cosa misura davvero, e vi consegneremo il benchmark da eseguire da soli. Se il lavoro reale è davvero più lento, è un ticket vero e lo approfondiremo con voi. Se non lo è, avrete la prova in un paio di minuti.
Avete appena migrato, e qualcosa risulta più lento?
Mandateci il numero e vi diremo che cosa misura. Non serve fidarsi.
Parla con un ingegnereSiete arrivati alla fine.
Mettete la lettura al lavoro
Cosa fate girare?
Raccontateci il carico di lavoro, il traffico e i requisiti di ripristino. Partite dal configuratore di server, oppure discutete i dettagli con un ingegnere.
Scritto dagli ingegneri che costruiscono e gestiscono l'infrastruttura che descrive.Parla con un ingegnere
