Dank @frostschutz konnte ich die Schreibleistung unter Linux ohne NCQ-Feature messen. Der Kernel-Boot-Parameter libata.force=noncq
NCQ vollständig deaktiviert.
In Bezug auf mein Problem mit der Schreibleistung von Seagate 6 TB gab es keine Änderung der Geschwindigkeit. Linux erreicht immer noch 180 MiB/s.
Aber dann hatte ich eine andere Idee:
Der Linux-Treiber verwendet keine Übertragungen von 32-MiB-Blöcken. Der Kernelpuffer ist viel kleiner, insbesondere wenn NCQ mit 32 Warteschlangen aktiviert ist (32 Warteschlangen * 32 MiB => 1 GiB AHCI-Puffer).
Also habe ich meinen SATA-Controller mit 256 KiB Transfers getestet und voilà, es ist möglich, 185 MiB/s zu erreichen.
Ich denke also, dass die Seagate ST6000AS0002-Firmware nicht in der Lage ist, große ATA-Burst-Übertragungen zu verarbeiten. Der ATA-Standard erlaubt bis zu 65.536 logische Blöcke, was 32 MiB entspricht.
SMR – Shingled Magnetic Recording
Eine weitere Möglichkeit für die schlechte Schreibleistung könnte die magnetische Magnetaufzeichnungstechnik sein, die von Seagate in diesen Archivgeräten verwendet wird. Offensichtlich habe ich mit meiner FPGA-Implementierung einen seltenen Effekt ausgelöst.
Festlegen der Warteschlangentiefe auf 1 (/sys/block/sd*/device/queue_depth
) NCQ deaktiviert, ist es nicht notwendig, den Kernelparameter libata.force=noncq
zu verwenden (kann nur beim Booten eingestellt werden).
Begehen Sie 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.