preloader
  • Início
  • Aumentando o desempenho de disco do Linux: O poder do cache de RAM

Como usar o cache de memória para acelerar a gravação e a leitura de arquivos

blog-thumb

Problemas com IOPS na nuvem? Seus discos não são rápidos o bastante para suas necessidades?

Neste artigo, ensinarei a você como aumentar o desempenho de disco no Linux usando cache de memória, através de um perfil preparado especialmente para aumentar o desempenho de acesso ao disco.


Introdução

Em alguns casos, a capacidade dos discos rígidos é suficiente para atender às demandas de armazenamento. No entanto, em muitos casos, precisamos ter tanto uma grande capacidade de armazenamento quanto um alto desempenho.

Sabemos que os discos mais rápidos atualmente são os SSDs, que podem ser encontrados nas interfaces SAS/SATA tradicionais, bem como os novos modelos NVME, que por meio do barramento PCIE, têm um caminho direto para o acesso aos dados, o que os torna muito mais rápidos que os SSDs tradicionais.

O problema é que, quanto maior o desempenho, mais caro é o produto, fazendo com que o custo por megabyte de um NVME seja até 5 vezes maior do que o de um disco SSD tradicional.


Meio termo

Nem sempre é possível fazer os investimentos necessários para obter o desempenho desejado, alinhado a capacidade de armazenamento. Isso é especialmente verdade em tempos de crise de TI, quando precisamos resolver um problema no menor tempo possível.

E se pudéssemos, de alguma forma, aumentar o desempenho de um disco SAS/SATA tradicional sem ter que desembolsar uma grande quantia de dinheiro?


Cache para desempenho

Para um projeto pessoal, desenvolvi um perfil Tuned especial que instrui o kernel do Linux a utilizar uma grande quantidade de RAM para armazenar em cache dados que serão escritos em disco. Isso culminou em resultados expressivos de desempenho de leitura e gravação (em torno de 900 Mbps). Dê uma olhada na imagem abaixo.

* Imagem capturada de um Xeon 2620v3 com 32GB DDR4 e discos SATA:

Diskcache Tuned Profile

Esse alto desempenho será obtido desde que exista RAM disponível para armazenar arquivos inteiros. Quando não houver mais memória para cache, o desempenho cairá para cerca de 200/300 Mbps, o que também não é ruim.

Holy Cow

Advertências

Apesar do bom resultado, esse tipo de ajuste do kernel apresenta alguns riscos. Por exemplo, enquanto os dados são armazenados em cache, o ambiente precisa permanecer ligado. Uma queda repentina de energia resultará na perda de dados que ainda não foram efetivamente gravados no disco.

Dito isso, minha recomendação é usar essa técnica somente em ambientes controlados que tenham o suporte de um no-break de boa qualidade. Técnicas como políticas de antiafinidade (caso esteja trabalhando com máquinas virtuais) também são muito bem-vindas.


Onde usar

Esse perfil Tuned é recomendado para qualquer necessidade de acesso a dados de alto desempenho (desde que o ambiente seja controlado), como:

- Servidores de arquivos

- Clusters de banco de dados

- Clusters do Elasticsearch

- Clusters de armazenamento de registros

- Qualquer coisa que leia/grave arquivos intensivamente

NOTA: No caso de bancos de dados, certifique-se de que o ambiente siga bons padrões de energia e antiafinidade, bem como uma estratégia correta para evitar a perda de dados.

Example of a fault-resilient DB architecture

Uma técnica comumente usada é configurar um cluster ativo-ativo, mas tratá-lo como se fosse ativo-passivo:

* Use um único nó para INSERÇÕES e ATUALIZAÇÕES, e os outros nós para consultas.

Dessa forma, um nó com falha terá seu conteúdo recuperado automaticamente sem interações humanas.


Tuned Profile

Não vou te ensinar como criar um perfil Tuned (você pode pesquisar isso no Google). Portanto, apresentarei apenas o conteúdo do perfil.

As explicações estão no próprio arquivo e neste link.

$ cat /usr/lib/tuned/disk-cache/tuned.conf
#
# tuned configuration
#

[main]
summary=Maximize RAM usage for disk operations
include=throughput-performance

[sysctl]
# tell the kernel to use up to 99% of the RAM as cache for writes and instruct kernel to use up to 50% of RAM before slowing down the process that's writing (default for dirty_background_ratio is 10).
vm.dirty_ratio = 99

# Start background writeback (via writeback threads) at this percentage
vm.dirty_background_ratio = 50

# And tell that 1h write delay is ok to even start writing stuff on the disk (again, I recommend caution):
vm.dirty_expire_centisecs = 360000
vm.dirty_writeback_centisecs = 360000

# vfs_cache_pressure at 2000 causes that most of computing happens in the RAM and very late disk writes.
vm.vfs_cache_pressure = 2000

Verifique se pode listar o novo perfil Tuned, e caso positivo, aplique-o:

$ tuned-adm list | grep cache
- disk-cache - Maximize RAM usage for disk operations

Use com moderação

Tenha sempre em mente os riscos de usar esse perfil Tuned. Deve-se fazer consideração especial antes de usar algo assim em ambientes de produção.

Pense da seguinte forma: O risco é maior do que o benefício? Em caso afirmativo, talvez você não devesse usar.

DICA: Você pode usar o comando “sync” do Linux para gravar no disco os arquivos que estiverem em cache. Uma atualização completa do cache pode levar de 2 a 3 minutos.

Full Cache Disk Sync

Finalizando

Espero que essa técnica possa ajudá-lo a sair de uma situação de crise. Se tiver alguma sugestão ou dúvida, me envie uma mensagem.

Sonic

Gostou do conteúdo? Dê uma olhada nestes outros artigos interessantes! 🔥



Pode ajudar?

Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️

comments powered by Disqus