Porque é que a sua VM não tem swap
O swap deixa uma máquina fingir que tem mais memória do que tem. Em flash enterprise, esse fingimento custa desgaste do storage e um precipício de latência, por isso dimensionamos a RAM em vez disso.
Neste artigo 5 secções
- A RAM responde em cerca de 100 nanossegundos. O flash rápido responde em cerca de 100 microssegundos. Uma carga de trabalho que cai em swap corre sobre memória aproximadamente mil vezes mais lenta.
- O swapping converte uma falta de RAM em desgaste do storage e num precipício de latência. A carga de trabalho falha mais devagar e de forma mais confusa, em vez de falhar com clareza.
- Nós dimensionamos a RAM em vez disso. O Sizing Desk pede a saída real do seu free -m antes de propor o que quer que seja.
As máquinas virtuais que construímos são entregues sem swap. Quando uma fica sem memória, a falha é imediata e visível, e a solução é uma conversa sobre RAM. Numa folha de especificações isso lê-se como uma omissão, por isso aqui fica o raciocínio completo. Nada disto depende do nosso hardware. Pode aplicar o argumento a qualquer VM que corra em qualquer lado.
O swap existe para deixar uma máquina correr para lá da sua memória física
O swap é a válvula de escape do kernel. Quando a memória física escasseia, move para o disco as páginas que julga mais frias e entrega a RAM libertada a quem a pedir. A máquina passa a reportar mais memória do que o silício contém, todas as alocações passam a ter sucesso, e a verdade chega mais tarde, sob a forma de latência, sempre que um processo toca numa página que afinal vivia no disco.
Essa troca fazia sentido quando foi inventada. A RAM era escassa e cara, as máquinas eram partilhadas por muitos trabalhos, e um trabalho batch que se arrastava durante a noite era melhor do que um trabalho batch que morria. Cada parte desse contexto entretanto inverteu-se: a RAM é a mais barata de sempre por gigabyte, a máquina é só sua, e as cargas de trabalho são serviços interativos em que um desvio de latência de dez vezes é indistinguível de uma indisponibilidade. A válvula de escape ficou nas predefinições na mesma, porque as predefinições sobrevivem às suas razões.
Cair fora da RAM custa-lhe três ordens de grandeza
O argumento contra o swap é aritmética antes de ser filosofia. A memória e o storage ficam em andares diferentes do edifício da latência, e a escada entre eles é longa.
- CACHE DA CPU
- cerca de um nanossegundo
- RAM
- cerca de 100 nanossegundos
- FLASH RÁPIDO
- cerca de 100 microssegundos, mil vezes mais lento do que a RAM
- UM PAGE FAULT PARA SWAP
- a viagem completa ao storage, mais a fila, no caminho mais quente que a sua carga de trabalho tem
Os valores exatos variam com o hardware. Os intervalos entre os andares não. Sob pressão real de memória, a máquina sobe e desce essa escada continuamente: o kernel despeja páginas, a carga de trabalho volta a chamá-las de imediato, e a CPU gasta os seus ciclos à espera do storage. O load average sobe enquanto o throughput útil colapsa.
~0,1 a 1 ms
100 ns
~10.000×
O swap queima flash enterprise para esconder um erro de dimensionamento
Nos discos rotativos, o swap era apenas lento. No flash é também corrosivo. O tráfego de swap é o pior padrão que se pode dar a flash: um fluxo contínuo de pequenas escritas aleatórias que existem sem outra razão que não a falta de RAM da máquina. Cada uma dessas escritas envelhece uma célula para preservar uma ilusão.
E a carga de trabalho não recebe nada em troca do desgaste. Coxeia ao ritmo do storage até a pressão terminar ou alguém intervir. O array por baixo da sua VM aqui é HPE 3PAR all-flash, e o seu trabalho é servir os seus dados com velocidade. Gastar a sua resistência de escrita como memória a fingir é um mau negócio a qualquer preço, e é por isso que preferimos ter a conversa do dimensionamento à partida em vez de a disfarçar com paging.
Sem swap, o esgotamento da memória produz uma linha de log em vez de um mistério
O argumento mais forte é o do diagnóstico, e quem já perseguiu uma semana lenta através de uma stack de monitorização já o conhece. Com swap, ficar sem memória parece tudo menos ficar sem memória. A latência sobe em todos os serviços ao mesmo tempo, nenhum erro aparece em nenhum log, e os dashboards apontam para todo o lado onde a espera se faz sentir, que normalmente é a base de dados e o storage. As equipas perdem dias nessa perseguição, e o swap fabrica-a numa única máquina, por rotina, por conceção.
- A latência sobe em todos os serviços ao mesmo tempo, sem erro em nenhum log
- Os dashboards culpam a base de dados, depois o storage, depois a rede
- O array absorve um fluxo de pequenas escritas aleatórias cujo único trabalho é esconder a falta
- O diagnóstico chega dias depois, depois de alguém correlacionar os gráficos
- O kernel mata o maior infrator e nomeia-o no log
- A falha tem uma marca temporal, um nome de processo e um total de memória
- O array gasta as suas escritas em dados reais
- A solução é uma conversa de redimensionamento no mesmo dia
Um gráfico de memória numa máquina sem swap diz a verdade até à beira.
Dimensionamos a RAM com honestidade e pedimos o seu free -m real
A solução honesta para uma falta de memória é a mesma desde que o paging foi inventado: mais RAM, ou um working set mais pequeno. É aí, portanto, que gastamos o esforço. O Sizing Desk pede a saída real do free -m da sua máquina atual antes de propor o que quer que seja, porque a coluna available desse comando encerra discussões que os adjetivos nunca encerram, e a mesma leitura que elimina a necessidade de swap normalmente também encolhe o orçamento.
O método completo, com exemplos trabalhados de cada número que pedimos, está em como dimensionar um servidor. Em hardware que nos pertence, a margem já está dentro da máquina que pagou, por isso aprovisioná-la não custa nada extra no seu pico, o que elimina a última desculpa económica para tratar o storage como RAM de reserva.
Respostas diretas
O kernel não precisa de algum swap para funcionar bem?+
O kernel pode usar swap para despejar páginas genuinamente frias e entregar a RAM recuperada à cache do disco, e numa máquina cronicamente apertada isso ajuda na margem. A margem é o problema. Compra uns poucos por cento de memória efetiva enquanto esconde se a máquina é sequer suficientemente grande, e desfoca todos os gráficos de memória de que mais tarde vai depender. Numa máquina bem dimensionada o ganho das páginas frias arredonda para zero, e a clareza de diagnóstico de um limite rígido de memória vale muito mais às 3 da manhã.
Como descubro quanta RAM uso realmente?+
Corra free -m durante um pico real e leia a coluna available. O método completo, com exemplos trabalhados de cada número, está no nosso artigo de dimensionamento, como dimensionar um servidor. Se essa coluna disser que está genuinamente apertado, a resposta é mais RAM, e diremos isso mesmo.
Sem swap é uma decisão pequena a jusante de outras maiores: dimensione as máquinas com números reais em vez de faturas, e ponha hardware sério por baixo delas para que os números aguentem numa noite má. A conversa sobre RAM é mais barata do que o mistério que evita.
Dimensione a RAM com honestidade
O Sizing Desk parte dos números reais da sua máquina e propõe uma configuração a partir dos nossos blocos de construção reais. Quando os seus números dizem menos, dimensiona-o para baixo.
Abra o Sizing DeskChegou 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
