Perché la vostra VM non ha swap
Lo swap permette a una macchina di fingere di avere più memoria di quanta ne abbia. Su flash enterprise quella finzione costa usura dello storage e un precipizio di latenza, quindi dimensioniamo la RAM al suo posto.
In questo articolo 5 sezioni
- La RAM risponde in circa 100 nanosecondi. Un flash veloce risponde in circa 100 microsecondi. Un carico che cade nello swap gira su una memoria circa mille volte più lenta.
- Lo swap converte una carenza di RAM in usura dello storage e in un precipizio di latenza. Il carico fallisce più lentamente e in modo più confuso invece di fallire chiaramente.
- Noi dimensioniamo la RAM al suo posto. La procedura guidata di dimensionamento chiede il vostro output reale di free -m prima di proporre qualsiasi cosa.
Le macchine virtuali che costruiamo vengono consegnate senza swap. Quando una esaurisce la memoria, il guasto è immediato e visibile, e la soluzione è una conversazione sulla RAM. Su una scheda tecnica si legge come un'omissione, quindi ecco il ragionamento per intero. Nulla di tutto questo dipende dal nostro hardware; potete applicare l'argomento a qualsiasi VM gestiate ovunque.
Lo swap esiste per far girare una macchina oltre la sua memoria fisica
Lo swap è la valvola di sfogo del kernel. Quando la memoria fisica scarseggia, sposta su disco le pagine che giudica più fredde e consegna la RAM liberata a chiunque la stia chiedendo. La macchina può dichiarare più memoria di quanta il silicio ne contenga, ogni allocazione può riuscire, e la verità arriva dopo, come latenza, ogni volta che un processo tocca una pagina che si è rivelata vivere su disco dopotutto.
Quello scambio aveva senso quando è stato inventato. La RAM era scarsa e costosa, le macchine erano condivise tra molti job, e un job batch che strisciava di notte batteva un job batch che moriva. Ogni parte di quel contesto si è da allora invertita: la RAM è la più economica di sempre per gigabyte, la macchina è solo vostra, e i carichi sono servizi interattivi dove un'escursione di latenza di dieci volte è indistinguibile da un disservizio. La valvola di sfogo è rimasta comunque nei default, perché i default sopravvivono alle loro ragioni.
Cadere fuori dalla RAM vi costa tre ordini di grandezza
Il caso contro lo swap è aritmetica prima di essere filosofia. Memoria e storage stanno su piani diversi dell'edificio della latenza, e la scala tra loro è lunga.
- CACHE CPU
- circa un nanosecondo
- RAM
- circa 100 nanosecondi
- FLASH VELOCE
- circa 100 microsecondi, mille volte più lento della RAM
- UN PAGE FAULT NELLO SWAP
- l'intero giro di andata e ritorno allo storage, più l'accodamento, sul percorso più caldo che il vostro carico abbia
Le cifre esatte variano con l'hardware; i divari tra i piani no. Sotto reale pressione di memoria la macchina percorre quella scala di continuo: il kernel espelle pagine, il carico le richiama subito dentro con un fault, e la CPU spende i suoi cicli ad aspettare lo storage. Il load average sale mentre il throughput utile collassa.
~0,1 a 1 ms
100 ns
~10.000×
Lo swap brucia flash enterprise per nascondere un errore di dimensionamento
Sui dischi rotativi, lo swap era semplicemente lento. Su flash è anche corrosivo. Il traffico di swap è il peggior pattern che possiate dare in pasto al flash: un flusso continuo di piccole scritture casuali che esistono per nessun motivo se non che la macchina è a corto di RAM. Ognuna di quelle scritture invecchia una cella per preservare un'illusione.
E il carico non ottiene nulla in cambio dell'usura. Zoppica al ritmo dello storage finché la pressione non finisce o qualcuno non interviene. L'array sotto la vostra VM qui è HPE 3PAR all-flash, e il suo compito è servire i vostri dati a velocità. Spendere la sua resistenza in scrittura come finta memoria è un cattivo scambio a qualsiasi prezzo, ed è per questo che preferiamo fare la conversazione sul dimensionamento in anticipo piuttosto che coprirla con la paginazione.
Senza swap, l'esaurimento della memoria produce una riga di log invece di un mistero
L'argomento più forte è diagnostico, e chiunque abbia inseguito una settimana lenta attraverso uno stack di monitoraggio lo conosce già. Con lo swap, esaurire la memoria assomiglia a tutto tranne che a esaurire la memoria. La latenza sale su ogni servizio insieme, nessun errore compare in alcun log, e i dashboard puntano ovunque l'attesa venga sentita, che di solito è il database e lo storage. I team perdono giorni in quella caccia, e lo swap la fabbrica su una singola macchina, di routine, per progetto.
- La latenza sale su ogni servizio insieme, senza alcun errore in alcun log
- I dashboard incolpano il database, poi lo storage, poi la rete
- L'array assorbe un flusso di piccole scritture casuali il cui unico compito è nascondere la carenza
- La diagnosi arriva giorni dopo, quando qualcuno correla i grafici
- Il kernel uccide il colpevole più grande e lo nomina nel log
- Il guasto ha un timestamp, un nome di processo e un totale di memoria
- L'array spende le sue scritture su dati reali
- La soluzione è una conversazione di ridimensionamento lo stesso giorno
Un grafico della memoria su una macchina senza swap dice la verità fino al bordo.
Dimensioniamo la RAM onestamente e chiediamo il vostro vero free -m
La soluzione onesta per una carenza di memoria è la stessa da quando la paginazione è stata inventata: più RAM, o un working set più piccolo. Quindi è lì che spendiamo lo sforzo. La procedura guidata di dimensionamento chiede l'output reale di free -m dalla vostra macchina attuale prima di proporre qualsiasi cosa, perché la colonna available di quel comando chiude discussioni che gli aggettivi non chiuderanno mai, e la stessa lettura che elimina il bisogno di swap di solito riduce anche il preventivo.
Il metodo completo, con esempi svolti di ogni numero che chiediamo, è in come dimensionare un server. Su hardware di proprietà il margine sta già nella macchina che avete pagato, quindi provisionarlo non costa nulla in più al vostro picco, il che rimuove l'ultima scusa economica per trattare lo storage come RAM di sfogo.
Risposte dirette
Il kernel non ha bisogno di un po' di swap per girare bene?+
Il kernel può usare lo swap per espellere pagine davvero fredde e consegnare la RAM recuperata alla cache del disco, e su una macchina cronicamente stretta questo aiuta al margine. Il margine è il problema. Compra qualche punto percentuale di memoria effettiva mentre nasconde se la macchina sia abbastanza grande in assoluto, e sfoca ogni grafico della memoria da cui dipenderete in seguito. Su una macchina dimensionata correttamente il guadagno delle pagine fredde si arrotonda a zero, e la chiarezza diagnostica di un confine di memoria netto vale molto di più alle 3 di notte.
Come scopro quanta RAM uso davvero?+
Eseguite free -m durante un picco reale e leggete la colonna available. Il metodo completo, con esempi svolti di ogni numero, è nel nostro post sul dimensionamento, come dimensionare un server. Se quella colonna dice che siete davvero stretti, la risposta è più RAM, e ve lo diremo.
Niente swap è una piccola decisione a valle di decisioni più grandi: dimensionare le macchine su numeri reali invece che su fatture, e mettere hardware serio sotto di esse perché i numeri reggano in una brutta notte. La conversazione sulla RAM costa meno del mistero che previene.
Dimensionate la RAM onestamente
La procedura guidata di dimensionamento parte dai numeri reali della vostra macchina e propone una build dai nostri veri mattoni. Quando i vostri numeri dicono meno, vi dimensiona al ribasso.
Apri la procedura guidataSiete 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
