bcache vs dm-cache: Comparação do cache SSD do Linux
11 min de leitura - 28 de maio de 2026

Compare bcache e dm-cache para armazenamento em cache de SSD no Linux. Configuração, desempenho, modos de cache e quando usar cada um.
bcache vs dm-cache: Cache SSD no Linux
Os SSDs são rápidos, mas caros por gigabyte. Os HDDs são baratos, mas lentos. O Linux oferece duas ferramentas ao nível do kernel para combiná-los: bcache e dm-cache. Ambas utilizam um SSD como cache transparente à frente de um HDD de maior capacidade, mas diferem na arquitetura, nos requisitos de configuração e no contexto em que apresentam melhor desempenho.
Como funciona o bcache
O bcache está presente no kernel do Linux desde a versão 3.10 (junho de 2013). Funciona na camada de blocos, pelo que é compatível com qualquer sistema de ficheiros que suporte UUIDs.
Internamente, o bcache utiliza uma estrutura híbrida de árvore B+/registo. Divide o armazenamento SSD em compartimentos de tamanho fixo (128K a 2MB), alinhados com os limites dos blocos de apagamento. Isto converte gravações aleatórias em sequenciais, o que reduz a amplificação de gravação e prolonga a vida útil do SSD. As operações de E/S sequenciais superiores a 4MB contornam automaticamente a cache, mantendo o SSD focado nos padrões de acesso aleatório onde acrescenta mais valor.
O bcache também monitoriza a latência do SSD em tempo real. Se a latência de leitura exceder 2 ms ou a latência de escrita ultrapassar 20 ms, ele limita o tráfego para evitar que o dispositivo de cache se torne um gargalo.
Configuração
Instale bcache-toolse, em seguida, formate o seu dispositivo de backup e o dispositivo de cache:
make-bcache -B /dev/sdb # format HDD as backing device
make-bcache -C /dev/sdc # format SSD as cache device
echo <UUID> > /sys/block/bcache0/bcache/attach # attach cacheO ajuste em tempo de execução é feito através da /sys/block/bcache<N>/bcache/ interface sysfs, onde pode ajustar os modos de cache, os limites de E/S sequencial e as metas de latência. Para matrizes RAID, utilize --data-offset para alinhar com a largura da faixa.
O problema: a configuração é destrutiva. Ambos os dispositivos devem ser formatados como destinos bcache, pelo que não é possível adicionar o bcache a um sistema de ficheiros existente sem o apagar primeiro. Os dispositivos bcache também não podem ser redimensionados após a criação.
Desempenho
A consolidação de gravação do Bcache proporciona-lhe excelentes números de gravação aleatória. Em testes de desempenho, atingiu cerca de 18 500 IOPS de gravação aleatória de 4K, em comparação com 12 200 IOPS apenas no SSD bruto. A taxa de transferência de leitura aleatória pode atingir aproximadamente 1 000 000 IOPS com hardware adequado.
Para cargas de trabalho encriptadas, aplique a camada dm-crypt sobre o /dev/bcache<N> dispositivo, em vez de encriptar as unidades subjacentes individualmente. Isto tem normalmente um melhor desempenho porque o bcache ainda consegue consolidar as gravações antes da encriptação.
Como funciona o dm-cache
O dm-cache é um destino do Device Mapper que se situa acima de um volume lógico existente. Utiliza três subdispositivos: um dispositivo de origem (HDD), um dispositivo de cache (SSD ou NVMe) e um dispositivo de metadados que rastreia localizações de blocos e estados de alteração. A política de cache predefinida é smq (Stochastic Multi-Queue), que identifica dados ativos em cargas de trabalho mistas.
A principal vantagem: o dm-cache pode ser sobreposto a um volume LVM ativo sem destruir os dados existentes. Também é possível redimensioná-lo utilizando comandos LVM padrão.
Configuração com LVM
A forma prática de configurar o dm-cache é através de lvmcache. A dmsetup é possível, mas é propensa a erros e não sobrevive a reinicializações. A abordagem LVM:
- Crie Volumes Físicos (PVs) tanto no HDD como no SSD.
- Adicione ambos os PVs a um único Grupo de Volumes (VG).
- Crie três volumes lógicos: um para dados de backup (HDD), um para cache (SSD) e um para metadados (SSD).
- Combine os LVs de cache e metadados num conjunto de cache:
lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv> - Ligue o conjunto à origem:
lvconvert --type cache --cachepool <pool_lv> <data_lv>
Uma coisa a ter em atenção: monte o sistema de ficheiros através do seu /dev/mapper/ caminho, não pelo UUID. A montagem pelo UUID pode contornar a camada de cache e aceder diretamente ao dispositivo de origem.
Desempenho e memória
No modo de gravação posterior (writeback) sob uma carga de trabalho Zipf de 90/10 de leitura/gravação, o dm-cache atingiu velocidades de leitura de cerca de 193 MB/s e velocidades de gravação de aproximadamente 21 MB/s. Noutro teste de desempenho, o armazenamento em cache de um HDD de 100 GB com uma partição NVMe de 10 GB aumentou as IOPS de gravação aleatória de 118 para 798.
A contrapartida é a memória. A sobrecarga de metadados do dm-cache depende do tamanho do bloco. Um tamanho de bloco de 512 bytes pode consumir mais de 16 GB de RAM por cada 100 GB de cache. Aumentar isso para 4.096 bytes reduz o uso de memória para cerca de 2 GB por cada 100 GB. Escolha um tamanho de bloco próximo do seu tamanho médio de E/S (64 KB é um ponto de partida razoável) e certifique-se de que é um múltiplo de 64 setores (32 KB), dentro do intervalo de 32 KB a 1 GB.
Os metadados são descarregados em cada escrita FLUSH ou FUA, ou pelo menos uma vez por segundo. Para alta disponibilidade, espelhe o dispositivo de metadados para evitar um ponto único de falha.
Modos de cache
Tanto o bcache como o dm-cache suportam os mesmos modos de cache principais. A escolha afeta tanto o desempenho como a segurança dos dados.
| Modo | Como funciona | Velocidade | Risco |
|---|---|---|---|
| Gravação direta | As gravações são feitas simultaneamente no SSD e no HDD | Apenas aumento de velocidade de leitura | Baixa. O HDD tem sempre os dados atuais. |
| Gravação posterior | As gravações vão primeiro para o SSD e são transferidas posteriormente para o HDD | Aumento de leitura e gravação | Mais elevado. Uma falha no SSD antes da transferência para o HDD implica perda de dados. |
| Contorno de gravação / Passagem direta | As gravações ignoram totalmente o cache | Apenas aumento da velocidade de leitura, desgaste reduzido do SSD | Baixo. O HDD tem sempre os dados atuais. |
O Writethrough é a opção padrão segura para ambas as ferramentas. O Writeback é mais rápido, mas apresenta um risco real: se o SSD avariar enquanto mantém dados não descarregados, esses dados perdem-se e o sistema de ficheiros pode ficar corrompido. Utilize o Writeback apenas quando tiver SSDs redundantes ou puder tolerar a perda ocasional de dados.
bcache vs dm-cache: Qual usar
| Fator | bcache | dm-cache |
|---|---|---|
| Configuração em dados existentes | Destrutiva (requer limpeza) | Não destrutivo (conversão online) |
| Redimensionamento | Não suportado | Suportado via LVM |
| Otimização de gravação aleatória | Forte (consolidação de gravação sequencial) | Padrão |
| Desvio de E/S sequencial | Automático (>4 MB) | Gerido pela política smq |
| Sobrecarga de memória | Baixa (árvore B+) | Mais elevado (depende do tamanho do bloco) |
| Metadados | No dispositivo de cache | Dispositivo separado, pode ser espelhado |
Utilize o bcache quando estiver a construir um novo sistema a partir do zero e pretender o melhor desempenho possível em E/S aleatória. É a melhor escolha para cargas de trabalho com grande volume de gravação, como bases de dados e armazenamento de máquinas virtuais, e para matrizes RAID 6 onde as penalizações de gravação aleatória são severas.
Utilize o dm-cache quando precisar de adicionar cache a um servidor que já esteja em produção. A sua integração com o LVM significa que pode ligar um cache sem tempo de inatividade ou migração de dados. É mais adequado para cargas de trabalho com grande volume de leituras e ambientes onde é necessária flexibilidade para redimensionar ou reconfigurar o armazenamento em tempo real.
Conclusão
Ambas as ferramentas resolvem o mesmo problema, mas adequam-se a situações diferentes. O Bcache é a escolha ideal em termos de desempenho para novas instalações. O dm-cache é a escolha prática para sistemas LVM existentes. Seja qual for a sua escolha, comece com o modo writethrough até se sentir confiante na fiabilidade do seu SSD e, em seguida, mude para o modo writeback se precisar de desempenho de gravação.
Se precisar de servidores dedicados com configurações de cache SSD, explore as opções de servidores dedicados da FDC.
XDP e eBPF para processamento de pacotes em Linux
Como o XDP e o eBPF processam milhões de pacotes por segundo ao nível do controlador da placa de rede. Benchmarks, casos de uso de DDoS, configuração da cadeia de ferramentas e requisitos de hardware.
14 min de leitura - 27 de maio de 2026
Porque é que é importante ter um VPS potente e ilimitado
3 min de leitura - 9 de maio de 2025