NCQ TRIM

A opção de montagem discard em geral prejudica o desempenho, pois os comandos TRIM esvaziam a fila NCQ, aumentando a latência. A especificação SATA 3.1 (julho de 2011) traz NCQ TRIM, async TRIM, que não drena a fila e, em teoria™, não prejudica o desempenho[1].

Foi adicionado ao kernel 3.12:

libata: Add support for SEND/RECEIVE FPDMA QUEUED
libata: Add support for queued DSM TRIM

O dispositivo precisa dizer ao sistema operacional que suporta o recurso. De alguns anos para cá, estão disponíveis SSDs com a tecnologia no mercado. Infelizmente, com uma tonelada de bugs. Muitos firmwares simplesmente corrompem dados ao receberem comandos NCQ TRIM. Foi necessário criar uma lista negra de modelos e versões de firmware com suporte quebrado (ver arquivo drivers/ata/libata-core.c no código fonte do kernel).

Na versão 4.2, ficou mais fácil ver o estado do suporte via sysfs, bem como habilitar ou não através de opções de boot:

libata: Expose TRIM capability in sysfs
libata: Allow NCQ TRIM to be enabled or disabled with a module parameter

Até o momento, a recomendação continua sendo não usar a opção discard e rodar o fstrim de vez em quando. Inclusive a suíte util-linux distribui fstrim.service e fstrim.timer com essa finalidade.

Quem tiver um SSD moderno, com firmware atualizado, e /sys/class/ata_device/devX.Y/trim contiver queued, pode arriscar adicionando discard em /etc/fstab e desabilitando TRIM periódico (batched discard) com systemctl disable fstrim.timer (Ubuntu 18.04+; demais distribuições adotaram fstrim.timer bem antes). Não me responsabilizo se você perder todos seus dados.


[1] Sempre há otimizações a serem feitas nos sistemas de arquivos, como estas propostas para o XFS por Christoph Hellwig.

Comentários