Berkat @frostschutz, saya bisa mengukur performa tulis di Linux tanpa fitur NCQ. Parameter boot kernel libata.force=noncq
menonaktifkan NCQ sepenuhnya.
Mengenai masalah kinerja tulis Seagate 6TB saya, tidak ada perubahan kecepatan. Linux masih mencapai 180 MiB/dtk.
Tapi kemudian saya punya ide lain:
Driver Linux tidak menggunakan transfer potongan 32 MiB. Buffer kernel jauh lebih kecil, terutama jika NCQ dengan 32 antrean diaktifkan (32 antrean * 32 MiB => 1 GiB buffer AHCI).
Jadi saya menguji pengontrol SATA saya dengan transfer 256 KiB dan voila, mungkin mencapai 185 MiB/dtk.
Jadi saya kira firmware Seagate ST6000AS0002 tidak mampu menangani transfer burst ATA yang besar. Standar ATA memungkinkan hingga 65.536 blok logis, yang setara dengan 32 MiB.
SMR - Perekaman Magnetik Sirap
Kemungkinan lain untuk kinerja penulisan yang buruk bisa jadi adalah teknik perekaman magnetik sirap, yang digunakan oleh Seagate di perangkat pengarsipan ini. Jelas, saya memicu efek langka dengan implementasi FPGA saya.
Menyetel kedalaman antrean ke 1 (/sys/block/sd*/device/queue_depth
) menonaktifkan NCQ, tidak perlu menggunakan parameter kernel libata.force=noncq
(yang hanya dapat disetel saat boot).
komit 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.