Como usar um pendrive para acelerar o Linux v2

Alguns meses atrás uma pergunta aqui no forum instigou minha curiosidade. (Como usar um pendrive para acelerar o Linux) Pesquisei se um pendrive poderia turbinar uma instalação do linux. Achei algumas opções sendo que o bcache parecia mais fácil de ser implementado. Porém eu não tinha nenhum pendrive recente que fosse efetivamente mais rápido que o disco rígido.

Pouco tempo atrás resolvi comprar um de 16G (velocidade de leitura 110 MB/s) e também uma expansão pra USB 3.0 pro meu notebook velhinho. Foi então que aquela ideia de março voltou com tudo e resolvi colocar em prática!

Hardware:

HDD:

gentooe6410 /etc/udev/rules.d # dmesg | grep ST916
[    1.597332] ata1.00: ATA-8: ST9160314AS, D005DEM1, max UDMA/133
[    2.890684] scsi 0:0:0:0: Direct-Access     ATA      ST9160314AS      DEM1 PQ: 0 ANSI: 5
gentooe6410 /etc/udev/rules.d # hdparm -tT --direct /dev/sdb

/dev/sdb:
 Timing O_DIRECT cached reads:   122 MB in  2.02 seconds =  60.40 MB/sec
 Timing O_DIRECT disk reads: 192 MB in  3.04 seconds =  63.08 MB/sec

Pendrive:

gentooe6410 /etc/udev/rules.d # dmesg | grep San
[    1.844211] usb 4-1: Manufacturer: SanDisk
[    2.884436] scsi 6:0:0:0: Direct-Access     SanDisk  Ultra Fit        1.00 PQ: 0 ANSI: 6
gentooe6410 /etc/udev/rules.d # hdparm -tT --direct /dev/sda

/dev/sda:
 Timing O_DIRECT cached reads:   192 MB in  2.01 seconds =  95.69 MB/sec
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 14 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 Timing O_DIRECT disk reads:  94 MB in  3.02 seconds =  31.15 MB/sec

Instalação:

A página na wiki do Arch é bem completa. Segui a instalação de lá: Bcache - ArchWiki Para descobrir o tamanho do bucket lancei mão do flashbench. A grosso modo o bcache funciona como uma camada similar à criptografia. Primeiro cria-se o dispositivo bcache com as ferramentas do pacote bcache-utils, podendo-se utilizar o dispositivo de disco inteiro ou apenas partições. Depois de criado o dispositivo bcache, pode-se usá-lo inteiro ou então criar partições.
No meu caso eu usei uma partição do HD como dispositivo de armazenamento e o dispositivo de bloco inteiro para o cache. Um ponto ruim é criar o dispositivo bcache apaga os dados anteriores dos dispositivos… Depois que é necessário formatar o dispositivo bcache criado para então proceder a instalação do sistema ou recuperar uma instalação anterior (que foi o meu caso).
Outra particularidade é que o GRUB não tem suporte a dispositivo bcache, então eu tive que usar uma outra partição como /boot (Só se usa um /boot em partição separada nesses casos específicos que são bem raros!!!) O processo de transplante de instalação é um tanto trabalhoso e ainda é necessário adicionar o modulo bcache no initrd, mas foge do escopo desse texto.

Resultados:

Após usar o notebook durante uma semana, e ativando também o cache de escrita, tenho esses resultados:

Com bcache

gentooe6410 /home/rod # systemd-analyze 
Startup finished in 3.148s (kernel) + 7.723s (initrd) + 8.994s (userspace) = 19.866s 
graphical.target reached after 8.977s in userspace

O carregamento da área de trabalho (sddm senha até aparecer o o painel do kde Plasma, medido por cronômetro.)
16 segundos

Sem bcache

rod@gentooe6410 ~ $ sudo systemd-analyze
Senha: 
Startup finished in 5.004s (kernel) + 16.534s (userspace) = 21.538s 
graphical.target reached after 16.522s in userspace

O carregamento da área de trabalho (sddm senha até aparecer o o painel do kde Plasma, medido por cronômetro.)
28 segundos

Conclusão:

O computador ficou sensivelmente mais rápido, o tempo de inicialização caiu pela metade! Atenção que não podemos tomar muito precisas essas medições pois parte delas foi manual e também houve mais modificações no sistema durante o uso, como uma atualização do sistema. Obviamente nenhuma atualização de sistema impacta tanto a inicialização a ponto de cair pela metade o tempo. Com um pendrive pequeno não há problema do uso do notebook, mas se for um pendrive grande, ficará complicado usar pois se houver desconexão do dispositivo pode haver problemas, principalmente se for escolhido usar o cache de escrita! Também o tamanho do cache ficou desproporcional, pois usei um cache de 16G para uma partição de 30G. Até o presente momento apenas 10G de cache estavam utilizados.
Se eu fosse refazer a instação eu mudaria algumas coisas. Considerando que o pendrive ficará permamentemente ligado ao computador eu faria uma partição pequena para o /boot nele, pois é mais rapido de carregar os 30M de kernel + initrd (no meu caso que compilo o kernel e módulos, distribuições outras podem ter valores diferentes para esses arquivos). Talvez eu considerasse também adicionar uma terceira partição no pendrive para usar de swap. Embora a velocidade seja menor de escrita, o pendrive ganha em tempo de acesso e leitura aleatória!
Analisando o custo/benefício, um pendrive desse (16G) está em torno de 50 reais, e o um ssd de 120G custa 150. Também é difícil achar um pendrive rápido com pequena capacidade. Vale a pena como desafio ou pra quem tem bastante conhecimento e verba extremamente pequena para upgrades. Porém parece ser uma ótima opção para usar um SSD de cache para um HD bem grande (estimo que usar um ssd em torno de 5 a 10% seja suficiente) e turbinar a velocidade de acesso! Só atenção para habilitar o cache de escrita apenas se tiver redundância na alimentação do computador (nobreak ou bateria)!!!

6 Curtidas