Permintaan storage tidak selalu harus selesai dalam urutan yang sama dengan saat software mengirimkannya. SATA Native Command Queuing, yang umum disingkat NCQ, memungkinkan host yang kompatibel mengirim beberapa command tanpa menunggu masing-masing selesai terlebih dahulu. Perangkat kemudian dapat menjadwalkan pekerjaan yang memenuhi syarat dalam urutan yang sesuai dengan operasi internalnya.

Mekanisme ini sangat berguna untuk hard disk drive, karena pergerakan head fisik dan posisi rotasi dapat membuat urutan permintaan memengaruhi waktu layanan. Solid-state drive tidak memiliki head bergerak, tetapi beberapa command yang outstanding tetap dapat mengekspos pekerjaan paralel kepada controller dan mengurangi jeda idle.

NCQ bukan izin tanpa batas untuk mengatur ulang setiap operasi. Semantik command, barrier, flush, penanganan error, desain controller, dan kebijakan sistem operasi semuanya membatasi reordering.

Queue mempertahankan lebih dari satu permintaan dalam flight

Tanpa command queuing, pertukaran storage sederhana dapat menjadi serial:

host sends request A
device completes A
host sends request B
device completes B
host sends request C
device completes C

Pola tersebut memberi perangkat sedikit kebebasan. Pada satu waktu, perangkat mungkin hanya memiliki satu permintaan untuk diproses.

Dengan NCQ, host dapat mengirim beberapa permintaan yang memenuhi syarat sebelum permintaan sebelumnya selesai:

host sends A, B, C, D
device schedules queued work
device reports completions

Setiap queued command membawa tag agar host dan perangkat dapat mengaitkan completion dengan permintaan outstanding yang benar. Urutan completion dapat berbeda dari urutan submission ketika protokol dan semantik permintaan mengizinkannya.

Queue yang lebih dalam memberi perangkat kumpulan pekerjaan pending yang lebih besar untuk dipilih. Namun, hal ini tidak menjamin latency yang lebih rendah untuk setiap command.

Hard drive dapat mengurangi pergerakan mekanis

Pada hard disk berputar, melayani permintaan dapat mengharuskan actuator memindahkan head ke track lain dan menunggu sector yang diinginkan berputar ke bawah head. Delay mekanis ini jauh lebih besar daripada waktu switching elektronik.

Misalkan empat permintaan menargetkan lokasi yang tersebar di platter. Memprosesnya secara ketat sesuai urutan kedatangan dapat memaksa head bergerak bolak-balik. Drive yang melihat beberapa permintaan sekaligus dapat memilih urutan yang mengurangi jarak seek atau memanfaatkan sector yang sedang mendekati head.

Algoritma scheduling yang tepat bersifat device-specific. NCQ menyediakan fasilitas protokol untuk beberapa outstanding command; NCQ tidak menetapkan satu disk scheduler universal.

Perbedaan ini penting karena queueing menciptakan peluang optimisasi, bukan hasil performa yang tetap. Firmware menentukan cara memanfaatkan peluang tersebut.

SSD menggunakan queue depth untuk alasan berbeda

SSD tidak memperoleh keuntungan dari memperpendek pergerakan head karena tidak memiliki head mekanis. Namun, controllernya tetap dapat memperoleh manfaat dari melihat beberapa operasi sekaligus.

Flash storage diatur dalam channel, die, plane, dan resource internal lainnya. Controller mungkin dapat menumpangtindihkan pekerjaan pada resource independen atau menjaga pipeline internal tetap sibuk ketika satu operasi menunggu media flash.

Beberapa outstanding SATA command karena itu dapat meningkatkan throughput pada workload SSD tertentu. Manfaatnya bergantung pada controller, organisasi flash, firmware, ukuran permintaan, pola akses, dan queue depth.

SATA NCQ juga memiliki ruang command tag yang terbatas, sehingga tidak sebanding dengan interface yang dirancang untuk jumlah queue dan command yang jauh lebih besar. NVMe, misalnya, menggunakan model queue berbeda yang dibangun untuk storage nonvolatile yang sangat paralel.

Queue depth mengubah latency dan throughput secara berbeda

Queue depth adalah jumlah permintaan outstanding pada suatu titik di jalur storage. Menaikkannya dapat meningkatkan throughput ketika perangkat memiliki kapasitas paralel atau dapat menjadwalkan pekerjaan dengan lebih efisien.

Namun, queue depth juga dapat menambah waktu tunggu.

Jika perangkat dapat menyelesaikan 10 permintaan per satuan waktu dan software mempertahankan backlog besar di depannya, permintaan baru dapat menunggu di belakang pekerjaan lain meskipun perangkat tetap sibuk penuh. Utilisasi tinggi dan latency per permintaan yang rendah bukan tujuan yang sama.

Hal ini terlihat pada benchmark. Sebuah drive dapat menghasilkan input/output operations per second yang jauh lebih tinggi pada queue depth 32 dibanding queue depth 1, tetapi sekaligus menunjukkan latency lebih besar untuk operasi individual.

Workload desktop interaktif sering memiliki burst singkat dan queue depth moderat. Server sibuk dan benchmark sintetis dapat mempertahankan queue yang lebih dalam untuk waktu lebih lama.

Tagged completion memisahkan urutan dari identitas

Reordering memerlukan cara yang andal untuk mengidentifikasi command. Jika permintaan B selesai sebelum A, host harus mengetahui operasi mana yang menghasilkan completion tersebut.

NCQ memberikan tag pada outstanding command. Tag bertindak sebagai identifier di dalam kumpulan command aktif, sehingga signaling completion dapat merujuk ke permintaan tertentu tanpa bergantung pada urutan first-in, first-out yang ketat.

Model bertag ini merupakan bagian inti queueing. Posisi submission saja tidak dapat mengidentifikasi completion setelah perangkat diizinkan memilih urutan layanan yang berbeda.

Tag digunakan kembali setelah command keluar dari kumpulan aktif. Tag bukan identifier permanen untuk data yang tersimpan.

Operasi yang sensitif terhadap ordering tetap membutuhkan batasan

Software storage terkadang membutuhkan ordering yang lebih kuat daripada yang diberikan read dan write biasa. Filesystem atau database mungkin perlu memastikan data sebelumnya mencapai media durable sebelum metadata berikutnya dianggap committed.

Kebutuhan tersebut tidak dapat dipenuhi hanya dengan menganggap urutan submission command sama dengan urutan persistence pada media. Cache dapat menunda write, dan queued command dapat dijadwalkan secara independen ketika diizinkan.

Storage stack menggunakan operasi seperti cache flush dan mekanisme ordering lain untuk menetapkan persistence point yang diperlukan. Perilaku tepatnya bergantung pada command set, konfigurasi perangkat, filesystem, driver, dan controller.

Karena itu, NCQ berada di dalam model konsistensi storage yang lebih besar. Queue reordering aman hanya ketika semantik protokol di sekitarnya mengizinkan.

Host scheduling dan device scheduling adalah layer terpisah

Sistem operasi dapat mempertahankan I/O queue sendiri sebelum command mencapai perangkat SATA. Sistem operasi dapat menggabungkan permintaan yang berdekatan, memprioritaskan kelas pekerjaan, atau memilih permintaan mana yang dikirim berikutnya.

Setelah dispatch, NCQ memberi perangkat visibilitas terhadap beberapa outstanding command dan ruang untuk device-level scheduling.

Kedua layer memiliki informasi berbeda. Sistem operasi dapat mengetahui prioritas proses dan konteks workload yang lebih luas. Firmware drive mengetahui state media internal dan detail timing device-specific yang mungkin tidak terlihat oleh host.

Performa berasal dari interaksi keduanya. Host yang hanya mengirim satu command pada satu waktu membatasi opsi scheduling perangkat, sedangkan backlog yang terlalu dalam dapat meningkatkan latency meskipun throughput naik.

NCQ tidak membuat setiap workload lebih cepat

Transfer sequential sudah menyajikan data dalam urutan alami dan sering dapat menjaga perangkat tetap sibuk tanpa reordering yang ekstensif. Queue tetap dapat membantu mempertahankan occupancy pipeline, tetapi pengurangan seek mekanis kurang relevan ketika sector memang diakses berurutan.

Workload yang sangat ringan juga dapat memperoleh sedikit manfaat karena tidak cukup banyak permintaan simultan untuk membentuk kumpulan scheduling yang berguna.

Keuntungan terbesar muncul ketika beberapa permintaan independen tersedia dan perangkat memiliki cara yang berarti untuk melayaninya dengan lebih efisien atau concurrent.

Hardware, driver, dan firmware juga berpengaruh. Fitur yang aktif tidak berarti setiap perangkat memiliki kualitas scheduling yang sama atau mencapai performa yang sama pada queue depth tertentu.

Queueing menukar urutan kedatangan yang ketat dengan kebebasan scheduling

NCQ mengubah jalur command SATA dari pertukaran satu-per-satu menjadi kumpulan operasi outstanding yang diberi tag. Hal ini memberi hard drive ruang untuk mengurangi delay mekanis dan memberi controller SSD lebih banyak peluang untuk menumpangtindihkan pekerjaan internal.

Hasil praktisnya bergantung pada bentuk workload. Queue yang lebih dalam dapat meningkatkan throughput, tetapi juga dapat menambah waktu tunggu. Software yang sensitif terhadap ordering harus menggunakan semantik storage eksplisit, bukan menganggap urutan submission sebagai jaminan durability.

NCQ paling tepat dipahami sebagai kebebasan scheduling yang terkontrol: host menyediakan beberapa permintaan yang memenuhi syarat, tag menjaga identitasnya tetap berbeda, dan perangkat memilih urutan eksekusi dalam batas yang ditetapkan protokol storage dan aturan konsistensi tingkat lebih tinggi.