@frostschutz のおかげで、NCQ 機能なしで Linux の書き込みパフォーマンスを測定できました。カーネル ブート パラメータ libata.force=noncq
NCQ を完全に無効にしました。
Seagate 6TB の書き込みパフォーマンスの問題に関しては、速度に変化はありませんでした。 Linux は依然として 180 MiB/s に達しています。
しかし、私は別のアイデアを思いつきました:
Linux ドライバーは、32 MiB チャンクの転送を使用しません。特に 32 個のキューを持つ NCQ が有効になっている場合 (32 個のキュー * 32 MiB => 1 GiB AHCI バッファー)、カーネルバッファーははるかに小さくなります。
そこで、256 KiB の転送で SATA コントローラーをテストしたところ、185 MiB/秒に達する可能性があります。
したがって、Seagate ST6000AS0002 ファームウェアは、大きな ATA バースト転送を処理できないと思います。 ATA 標準では、最大 65.536 論理ブロック (32 MiB に相当) が許可されます。
SMR - シングル磁気記録
悪い書き込みパフォーマンスのもう 1 つの可能性は、これらのアーカイブ デバイスで Seagate が使用しているシングル磁気記録技術である可能性があります。明らかに、FPGA 実装でまれな効果を引き起こしました。
キューの深さを 1 に設定 (/sys/block/sd*/device/queue_depth
) は NCQ を無効にします。カーネル パラメーター libata.force=noncq
を使用する必要はありません。 (これは起動時にのみ設定できます)。
コミット 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.