Olá a todos,
Desde as minha experiência em memory overcommit via swap num SSD tenho estado a investigar mais utilizações de combinação híbrida de SSD’s e discos mecânicos.
Sim, é verdade que já existem discos SSD’s de grande capacidade ou discos mecânicos híbridos. Ambas as opções, a meu ver ainda são demasiado caras.
A somar a isto, muitos de nós fizeram investimentos em armazenamento (alguns dentro de garantia) pelo que deitar fora o que existe não é aceitável.
Com isto em mente, andei a investigar a forma de hibridar um disco mecânico, utilizando para tal um SSD e cheguei a uma tecnologia emergente em Linux (existe equivalente para windows) chamado Bcache.
O bcache é um Linux kernel block layer cache e permite usar o SSD (e a sua velocidade superior) para fornecer cache a um disco mecânico.
No nosso exemplo especifico, iremos utilizar um sistema virtualizado em KVM, com um disco de 16GB em disco SSD (para cache) e um disco virtual de 200GB em disco mecânico:
Disk /dev/vda: 200 GiB, 214748364800 bytes, 419430400 sectors
Disk /dev/vdb: 16 GiB, 17179869184 bytes, 33554432 sectors
Em termos de velocidade testada via hdparm temos antes da configuração utilizando bcache:
HDD: Timing buffered disk reads: 288 MB in 3.00 seconds = 95.99 MB/sec
SSD: Timing buffered disk reads: 552 MB in 3.06 seconds = 180.28 MB/sec
(É importante lembrar que ambos os discos virtuais fazem parte de uma pool de discos que já estão a ser usados por várias máquinas virtuais, pelo que a velocidade pode estar longe da performance mais alta).
Primeiro inicializamos o SSD device (vdb) para responder como a cache:
fvlab03:~ # make-bcache -C /dev/vdb
UUID: 1470a21a-322f-45c7-9e5a-b2db3b3e838d
Set UUID: 456de471-e8fa-475e-bfcc-df2c85328f15
Em seguida o backing device (vda):
fvlab03:~ # make-bcache -B /dev/vda
UUID: 0c5fee8b-b269-4ca9-9e3f-299736bd7206
Set UUID: 0897dc1a-0796-4358-87d1-f96f188c36d5
Após a inicialização dos devices chega a altura de os registar como bcache devices:
root@fvlab03:~# echo /dev/vda > /sys/fs/bcache/register
root@fvlab03:~# echo /dev/vdb > /sys/fs/bcache/register
root@fvlab03:~# echo 456de471-e8fa-475e-bfcc-df2c85328f15 > /sys/block/bcache0/bcache/attach
root@fvlab03:~# echo writeback > /sys/block/bcache0/bcache/cache_mode
Nota: o novo device criado com a união do SSD com o HDD é o /dev/bcache0 e os echos acima tornam-se persistentes após colocação.
Finalmente podemos testar novamente a velocidade obtida utilizando a configuração em bcache:
fvlab03:~ # hdparm -T /dev/bcache0: Timing cached reads: 6780 MB in 2.00 seconds = 3391.91 MB/sec
Todos os dados do exemplo aqui apresentado, foram recolhidos dentro de um sistema virtualizado em KVM.
Nada vos impede de efetuar o mesmo, não dentro de um sistema KVM, mas no próprio virtualizador em si.
A alteração irá obrigar a várias alterações (lembrar que o bcache não é block cache dentro de LVM mas sim block cache a devices físicos – layer abaixo – e que a utilização do mesmo obriga sempre a migrações de dados).
No meu caso especifico, irei efetuar isto nos próximos builds de servidores KVM que venha a possuir. Para já e independentemente do piscar de olho que o ganho de velocidade me possa eventualmente fazer, simplesmente não tenho tempo para tal 😉
Abr
Higgs
Bibliografia: https://grepular.com/Disk_Caching_with_SSDs_Linux_and_Windows