Até agora eu sei que isso cat /sys/block/<devicename>/queue/rotational
me dirá se minha unidade é um SSD ou HDD. Existe algo semelhante para descobrir se usa SMR (Shingled Magnetic Recording)?
Responder1
A única maneira de ter certeza é avaliar a unidade com acesso de gravação aleatório suficiente. O SMR "gerenciado por unidade" deve ser totalmente transparente para o computador host e às vezes os fabricantes não mencionam o SMR. No entanto, o "transparente" trata apenas do comportamento lógico, não do desempenho (ou latência).
Eu sugiro seguir. Execute fio
o seguinte (primeiro cd
no diretório do disco para testar, pois a seguir criará o arquivo de teste de benchmark no diretório de trabalho atual):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randwrite --size=500g --io_size=1500g --blocksize=10m --ioengine=libaio --iodepth=1 --direct=1 --numjobs=1 --runtime=3600 --group_reporting
Este exemplo criará um arquivo de 500 GB preenchido com dados pseudoaleatórios e, em seguida, selecionará um local aleatório dentro dele e gravará 10 MB de dados pseudoaleatórios no arquivo. Em seguida, ele repete a seleção do local aleatório e a gravação por até 1 hora ou até que 1,5 TB tenha sido gravado. Observe as linhas ETA que se parecem com isto:
Jobs: 1 (f=1): [w(1)] [20.0% done] [0KB/40960KB/0KB /s] [0/4/0 iops] [eta 00m:28s]
O comando acima emitirá uma nova linha ETA a cada 5 segundos. Observe a taxa de transferência atual e o IOPS entre as barras ( 40960KB
e 4
) acima. Para a unidade SMR, você deve obter bons valores primeiro (100 MB +/s e 10+ IOPS), mas à medida que o teste avança e o cache interno da unidade SMR é preenchido (geralmente em torno de 20 GB), o desempenho irá para todos os lados. Às vezes estará próximo da velocidade inicial, às vezes serão longos períodos de tempo em torno de 0 MB/s e 0-1 IOPS. Nunca deve haver erros, no entanto.
Esteja avisado que as unidades SMR ficarão mais lentas quando usadas ou avaliadas! Algumas unidades suportam o comando TRIM e fstrim
podem ajudar a recuperar a velocidade da unidade ao original.
Mesmo sem o TRIM, um SMR "gerenciado por unidade" bem executado adquirirá sua velocidade original quando deixado em marcha lenta por tempo suficiente. Talvez seja necessário desativar a rotação do disco (gerenciamento de energia) se ele entrar no modo de suspensão antes que o cache interno tenha sido totalmente liberado para a área SMR. Como alternativa, você pode configurar um visual que escreva um pouco de vez em quando. Mesmo uma linha única como
while true; do date >> timestamps.txt; sleep 5m; done
em um diretório armazenado no dispositivo para teste funcionará perfeitamente e você só precisará finalizá-lo com Ctrl + C quando terminar. Para as unidades Seagate SMR que usei, a limpeza completa do cache parece levar cerca de meia hora. Durante esse período, a unidade parece estar gravando dados, embora nada tenha sido gravado na unidade pelo computador. Infelizmente, não conheço nenhuma maneira de consultar o status da descarga da unidade. Ouça os sons da unidade ou simplesmente espere o tempo suficiente.
Exemplo: a unidade Seagate SMR parece feliz em dormir no meio da descarga do SMR (provavelmente para fingir que é totalmente transparente para o usuário) e continuar a descarga quando for despertada novamente no futuro. Isto é transparente no sentido de que não ocorrerá corrupção de dados mesmo se a energia for cortada. No entanto, isso resulta em um desempenho muito ruim se você gravar grandes rajadas de vez em quando e imediatamente colocar a unidade em suspensão (por exemplo, use essa unidade como uma unidade de backup que é imediatamente desmontada e desconectada após a conclusão lógica do backup). Na próxima vez que você fizer outro backup, o novo backup competirá com a liberação SMR do backup anterior e o desempenho será muito baixo. Se você mantiver essa unidade sempre ligada e gravar apenas até 10 GB de uma só vez, ela será tão ou mais rápida que a unidade HDD PMR normal.
Responder2
Versões modernas desg3_utilspossui um comando sg_rep_zones, que irá interrogar o drive e perguntar sobre sua configuração SMR. Talvez você precise compilar isso manualmente se sua distribuição não tiver uma versão recente.
Isso pode dizer definitivamente se a unidadeéSMR.
No entanto, mesmo que o comando relate Report zones command not supported
, isso não indica com certeza se a unidadenão éSMR. Algumas unidades SMR usam SMR "gerenciado por unidade", o que significa que a unidade lida com tudo magicamente e você supostamente não precisa se preocupar com isso. Neste caso, não necessariamente suportaria o comando report zones.
Outra coisa a tentar - veja se a unidade suporta os comandos "unmap" ou "trim" - sg_unmap, também parte do sg3_utils. É improvável que uma unidade não SMR suporte esse comando (mas, novamente, nem todas as unidades SMR o suportarão).