Grâce à @frostschutz, j'ai pu mesurer les performances d'écriture sous Linux sans la fonctionnalité NCQ. Le paramètre de démarrage du noyau libata.force=noncq
complètement désactivé NCQ.
En ce qui concerne mon problème de performances d'écriture Seagate 6 To, il n'y a eu aucun changement de vitesse. Linux atteint toujours 180 Mio/s.
Mais ensuite j'ai eu une autre idée :
Le pilote Linux n'utilise pas les transferts de blocs de 32 Mio. Le tampon du noyau est beaucoup plus petit, surtout si NCQ avec 32 files d'attente est activé (32 files d'attente * 32 Mio => 1 Gio de tampon AHCI).
J'ai donc testé mon contrôleur SATA avec des transferts de 256 Kio et voilà, il est possible d'atteindre 185 Mio/s.
Je suppose donc que le micrologiciel Seagate ST6000AS0002 n'est pas capable de gérer de gros transferts en rafale ATA. La norme ATA autorise jusqu'à 65 536 blocs logiques, ce qui équivaut à 32 Mio.
SMR - Enregistrement magnétique en bardeaux
Une autre possibilité de mauvaises performances d'écriture pourrait être la technique d'enregistrement magnétique en bardeaux, qui est utilisée par Seagate dans ces périphériques d'archivage. Évidemment, j'ai déclenché un effet rare avec mon implémentation FPGA.
Définition de la profondeur de la file d'attente à 1 (/sys/block/sd*/device/queue_depth
) désactive NCQ, il n'est pas nécessaire d'utiliser le paramètre noyau libata.force=noncq
(qui ne peut être défini qu'au démarrage).
valider 360f654e7cda850034f3f6252a7a7cff3fa77356
Date: Sat Sep 30 19:45:00 2006 +0900
[PATCH] libata: turn off NCQ if queue depth is adjusted to 1
Turn off NCQ if queue depth is adjusted to 1.