Como ativar o TRIM no Linux para sua unidade SSD

O TRIM é um recurso fundamental para quem tem uma unidade SSD no seu sistema e deseja garantir o máximo de eficiência deste tipo de dispositivo.
O recurso já vem incluído nas versões do kernel Linux superiores a 2.6.33. No Ubuntu, a partir da versão 14.04 LTS Trusty Tahr, ele já é padrão do sistema.

Contudo, se você deseja verificar se o recurso está em funcionamento ou se você usa outro sabor do Linux, vou mostrar como dominar este recurso neste artigo.
Já expliquei anteriormente o principal motivo de um drive SSD apresentar problemas acentuados de lentidão — o que pode comprometer o desempenho de todo o sistema.

O que é o TRIM

Quando um arquivo é removido de uma mídia, quase todos os sistemas operacionais removem as referências a ele e não os blocos de dados do arquivo na mídia.
Para as unidades SSD, isto acaba por deixar blocos de dados supérfluos na mídia que, eventualmente precisarão ser sobrescritos.
O SSD TRIM é um função da interface SATA, que diz à interface SSD para esvaziar definitivamente os blocos sem uso.

O TRIM é um comando SATA que habilita o sistema operacional a informar à unidade SSD quais blocos de dados gravados não são mais necessários, como resultado de terem sido apagados — com um “delete” ou com um “format”.

O resultado da execução do TRIM é que o dispositivo de estado sólido ganha mais espaço livre, o que melhora a performance de sua escrita.

O comando TRIM precisa ser suportado pela controladora SSD — caso contrário, os LBAs (endereçamento lógico de blocos ou Logical Block Address) que receberem o comando não irão ser marcados como inválidos e o drive irá continuar a coleta de lixo de dados, como se ainda fosse válidos.

Possíveis problemas

Apenas quando o sistema operacional gravar novos dados nestes LBAs, é que a unidade SSD irá saber que eles são inválidos — e aí, o problema, descrito aqui, já estará criado: o processo de gravação se torna progressivamente mais lento.

Se a sua controladora não tem suporte ao TRIM, há 2 formas de solucionar o problema — se disponível, fazer atualização do firmware da controladora SSD. Se não, executar periodicamente um aplicativo utilitário, que realize o TRIM na unidade.

No Linux, o comando que realiza o TRIM é o fstrim.

Ainda que a controladora da unidade SSD suporte o comando TRIM, isto não significa que ela voltará à sua velocidade máxima imediatamente.

O espaço a ser liberado pelo TRIM está espalhado aleatoriamente na unidade — serão necessárias algumas execuções até que o processo se consolide e a performance seja restabelecida.

Limitações do TRIM

Há algumas limitações, mais ou menos, óbvias.

Se você tem um espaço total de 100 Gb no seu SSD e já ocupou 95 Gb — O TRIM não vai lhe adicionar espaço significativo ao drive.

sandisk ssd issd 128 gb

Eu sugiro que você leia este texto, para entender por que.
Unidades SSD mais antigas podem não ser muito eficientes com recursos de coletar lixo ou suporte ao TRIM.

A Kingston oferece, para as suas unidades mais antigas alguns aplicativos que melhoram a performance dos drives SSD.

As versões atuais do Linux, tem suporte automático a unidades SSD Intel e Samsung.
Mas é possível executar o comando TRIM em unidades SSD de outras marcas também — veja, no próximo tópico como fazer isto.

Como obter informações sobre o seu drive SSD

Há várias formas de obter informações sobre o seu dispositivo.
Se quiser se certificar de que ele é um SSD, use o comando SMARTCTL:


sudo smartctl -a /dev/sdb | grep -i rotation

Rotation Rate:    Solid State Device

Para saber a marca, tente isto:


sudo smartctl -a /dev/sdb | grep -i device

Repare na linha em destaque (no meu resultado):

Device Model:     SanDisk SSD i100 24GB
LU WWN Device Id: 5 001b44 7bae1fb91
Rotation Rate:    Solid State Device
Device is:        Not in smartctl database [for details use: -P showall]
SMART support is: Available - device has SMART capability.

O comando LSHW, também pode dar informações mais detalhadas sobre o seu sistema:


sudo lshw | less

Com um pouco mais de pesquisa, você vai descobrir que, no Linux, há inúmeras outras formas de obter informações sobre o seu drive.

Como executar o TRIM no Linux

O comando fstrim-all é um frontend pro fstrim. O primeiro, executa o TRIM em todos os dispositivos SSD presentes no seu sistema — o segundo precisa que você indique o diretório em que você quer que o TRIM seja aplicado.
É necessário que os dispositivos estejam montados, para que o fstrim funcione.

Veja como rodar o fstrim em um diretório local, montado em uma unidade de estado sólido:


sudo fstrim -v /usr/

Se tudo der certo, você vai obter uma mensagem semelhante a esta:

/usr/: 20903276544 bytes were trimmed

Com o uso da opção ‘-v’ o fstrim vai exibir o número de bytes fornecidos pelo sistema de arquivos para descarte.
Este número é o máximo a ser descartado, na perspectiva do dispositivo de armazenamento.

Se você repetir o comando, em seguida, obterá o mesmo número.
Acontece que o fstrim irá mostrar a mesma quantidade de bytes, em potencial, a ser descartada no dispositivo. Este valor ainda poderá sofrer ajustes pelo kernel, mais a frente, antes que o TRIM seja efetivamente aplicado.

Se quiser, use o fstrim-all — o aplicativo detecta sozinho quais unidades são SSD.

Você pode usar a opção ‘–no-model’ para executá-lo em drives de outras marcas, mas pode sofrer perda de dados, ao rodar o fstrim em um sistema com alta carga de entrada/saída de dados — mantenha o seu backup atualizado e espere o sistema ficar ocioso, antes de realizar a operação.


sudo fstrim-all --no-model

O fstrim-all não costuma dar retorno de suas atividades ao usuário —. Lembre-se: estes aplicativos são feitos para rodar em silêncio, nos bastidores.

Veja como inserir o comando TRIM no cron, para que ele seja realizado periodicamente no seu sistema, sem verificar o modelo do seu drive:


sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim

Mais opções de uso do fstrim

O site Askubuntu recomenda 3 formas de uso do fstrim:

  • manual — esta é a forma mais fácil e pode ser executada diretamente no terminal (como já foi visto, acima):
    
    sudo fstrim /nome_diretório
    

    Contudo, ela é desnecessária, se você estiver usando o comando agendado ou automatizado;

  • agendada e
  • automatizada (não recomendada nos sistemas atuais e, portanto, não será abordada neste texto).

Como agendar a execução do fstrim

Este é o método recomendado e, nas versões atuais do Ubuntu, já ocorre por padrão.

Ao agendar a tarefa, você não precisa mais se preocupar com o problema — o sistema se encarregará de cuidar dele periodicamente.
Veja como agendar uma tarefa para execução semanal do fstrim no cron:
sudo nano gedit /etc/cron.weekly/fstrim
No exemplo, acima, usei o nano. Se você preferir, pode usar outro editor de textos — mas precisa executá-lo com privilégios administrativos.
Copie e cole o seguinte código no arquivo:

#! /bin/sh  

# Este script pressupoe que o diretório /usr está em uma unidade SSD.
# Altere o ponto de montagem de acordo com sua realidade
# Voce pode adicionar outros pontos de montagem, separados por espacos.
# Certifique-se de que todos os pontos de montagem estejam entre as aspas
# simples, conforme o exemplo abaixo:
# SSD_MOUNT_POINTS='/ /boot /home /media/my_other_ssd'  

SSD_MOUNT_POINTS='/usr'  

for mount_point in $SSD_MOUNT_POINTS
do  
    fstrim $mount_point  
done

Agora, torne o script executável:


sudo chmod +x /etc/cron.weekly/fstrim

Agora, teste-o:


sudo /etc/cron.weekly/fstrim

Se você não obtiver mensagens de erro, o seu cron job estará funcionando bem.

Referências

en.wikipedia.org/wiki/Write_amplification
http://askubuntu.com/questions/18903/how-to-enable-trim
http://www.kingston.com/us/support/technical/products?model=sv300s3

Por que as unidades SSD se tornam mais lentas com o tempo

O principal motivo de uma unidade SSD se tornar mais lenta é estar com sua capacidade quase esgotada.
Neste artigo, vou mostrar por que isto acontece e como você pode evitar ou resolver o problema –, se ele já estiver ocorrendo.
ssd kingston - por que a unidade está mais lenta.
Resultados de testes mostram que as unidades de estado sólido, SSD (Solid-state drives), perdem eficiência à medida em que suas capacidades de armazenamento vai se esgotando.
Se você tem uma unidade SSD, pode fazer o teste por sim mesmo — principalmente se a capacidade for pequena (de algumas dezenas de gigabytes). Ela fica mais lenta, quando fica mais cheia.
O motivo para este comportamento está nas características dos SSDs e dos dispositivos de armazenamento flash NAND.
O fato é que você deve evitar a todo custo preencher toda a capacidade de um drive SSD — uma das consequências de um drive lento é que todo o seu sistema vai sofrer com isto.

Blocos vazios e blocos parcialmente preenchidos

Quando você manda gravar um arquivo na sua unidade de estado sólido, ela procura por blocos vazios onde o possa acomodar.
A operação de gravação é mais rápida sempre que ocorrer em um bloco vazio.
Nos discos rígidos (HDs), os blocos não são automaticamente esvaziados, quando os arquivos que os ocupam são apagados pelo sistema operacional — por isto é que é quase sempre possível recuperar arquivos apagados, acidentalmente ou não, em discos rígidos.
Na verdade, um disco rígido costuma estar sempre repleto de bits de arquivos que já foram “apagados”.
— e, só para não ficar mal entendido: quando eu digo que “é possível” recuperar arquivos “deletados” de um disco rígido isto não quer dizer que seja fácil ou mesmo líquido e certo.
No que tange as unidades SSD, os sistemas operacionais mais novos usam um recurso chamado TRIM — que consiste em remover os dados do arquivo na unidade, tão logo você o apague no sistema operacional.
Não há bits de dados, que você desejava que fossem removidos, espalhados pela unidade de estado sólido — por que o TRIM se assegura de que cada bloco esteja vazio para receber rapidamente os novos dados que chegarem no futuro.

Se você usa uma versão atual do Linux, como o Ubuntu 14.04 LTS, o seu sistema operacional tem total suporte ao TRIM. (OMGUbuntu!)

Esta é uma das diferenças entre o HDD e o SSD — pro primeiro, escrever dados novos em cima dos dados velhos, em um bloco já usado, é tão rápido quanto escrever em um bloco totalmente vazio.
As memórias flash NAND gravam dados em páginas de 4Kb dentro de blocos de 256 Kb. Para adicionar páginas a um bloco parcialmente ocupado a unidade de estado sólido precisa apagar todo o bloco antes de gravar nele.

nand flash memory pages and blocks.png
Clique, para ver detalhes.

À medida em que o espaço disponível na sua unidade SSD vai se reduzindo, ela vai ter cada vez menos blocos totalmente vazios e mais blocos parcialmente preenchidos.
Como você já sabe, a unidade não grava em blocos parcialmente preenchidos — ela precisa limpar seu conteúdo antes.
Portanto, em vez de simplesmente gravar os dados, como um HD faria, ela faz o seguinte:

  • lê o conteúdo do bloco e o armazena no cache;
  • acrescenta os novos dados ao conteúdo armazenado no cache e
  • grava tudo de volta no bloco.

Agora, leve em conta que a gravação de um arquivo pode envolver uma grande quantidade de blocos, o que multiplica a quantidade de vezes que ese processo vai ter que ser realizado.

O TRIM não consolida os blocos parcialmente preenchidos

Ao esgotar a capacidade de armazenamento de um drive, ele provavelmente conterá uma grande quantidade de blocos parcialmente preenchidos, antes de você começar a remover arquivos.
O recurso TRIM, de que falamos antes, não força o dispositivo a qualquer procedimento de limpeza ou reorganização.
Tudo o que ele faz é remover os dados do arquivo quando o sistema operacional manda apagar (em vez de apenas marcar o seu espaço como disponível).
Em outras palavras, a capacidade de armazenamento de um dispositivo de estado-sólido se esgota, mesmo tendo uma enorme quantidade de blocos parcialmente preenchidos.
O drive não vai reorganizar o espaço por conta própria, preventivamente.
E, assim, a performance da gravação de novos dados sofrerá uma crescente degradação.

Prevenção: Overprovisioning e Garbage Collection

Para impedir que você preencha completamente o seu drive e prejudique seriamente sua eficiência, os fabricantes adotaram algumas medidas.
As unidades vêm com um percentual do seu espaço reservado e não disponível ao usuário — isto é chamado de overprovisioning.
Trata-se de um espaço extra de armazenamento, que não é visível pro computador como área disponível para guardar seus dados.
Assim, o drive nunca vai ficar completamente cheio.
Aliado a isto, cada controladora de unidade SSD tem um algoritmo que executa a coleta de lixo (garbage collection) — que consiste em tentar encontrar os blocos parcialmente preenchidos e consolidá-los, liberando a maior quantidade possível de blocos.
A maneira e a frequência com que esta operação é realizada, bem como a quantidade de armazenamento extra, variam de acordo com os fabricantes e modelos de controladoras.

Conclusão

Uma das formas de se resolver o problema é adquirir novos dispositivos de armazenamento, com maiores capacidades, sempre que necessário.
Mas todo mundo sabe que nem sempre isto é possível (quase sempre, não é).
Enfim, é por isto que acredito que as pessoas consultam o geek — elas querem a melhor solução, pelo menor custo, da maneira mais fácil (sem sacrificar a qualidade) etc.
Já que não existe mágica, a recomendação é mais ou menos a óbvia: não permitir que o seu drive chegue a 75% de ocupação.
Com esta taxa, é possível ter um equilíbrio razoável entre o que pagou, pela capacidade de armazenamento que possuiu e pela eficiência do drive.
Planeje o uso da sua unidade SSD para manter sempre 25% de seu espaço livre. Eventualmente, você pode precisar usar este espaço e “pagar o preço” da queda do desempenho, temporariamente.
Se precisar de mais espaço, pense em soluções de armazenamento de dados nas nuvens ou em mídia externa.

Referências:
pt.wikipedia.org/wiki/Memória_flash#Flash_NAND
en.wikipedia.org/wiki/Write_amplification
http://www.howtogeek.com/165542/why-solid-state-drives-slow-down-as-you-fill-them-up/