NCQ (Native Command Queuing) – natywne kolejkowanie zadań
NCQ to programowe rozszerzenie interfejsu SATA polegające na kolejkowaniu zadań zapisu/odczytu (I/O) w taki sposób, by zwiększyć wydajność (liczbę operacji I/O na sekundę) zarówno dysków HDD, jak i SSD. |
W tradycyjnych dyskach twardych (HDD) odbywa się to poprzez zbuforowanie do 32 poleceń i dobranie ich kolejności tak, by dysk wykonał zadania przy minimalnej liczbie obrotów talerza i ruchów głowicy. Pozwala to na zmniejszenie czasu niezbędnego do przeprowadzenia operacji I/O oraz spowalnia starzenie się elementów elektromechanicznych dysku. |
Rys.1. Wykonywanie operacji odczytu/zapisu przez dyski: (a) bez NCQ, (b) z NCQ |
Przedstawiony na rys. 1 dysk zrealizuje operacje I/O: (a) z wyłączoną obsługą NCQ – w kolejności od A do F, wykonując przy tym 3,5 obrotu talerza; (b) z obsługą NCQ – w kolejności C → A → B → D → F → E w trakcie niecałych 2 obrotów talerza. |
NCQ jest rozwinięciem idei kolejkowania zawartej w technologii TCQ (Tagged Command Queuing) zastosowanej pierwotnie w dyskach SCSI, a następnie zaimplementowanej w dyskach ATA i częściowo w SATA-I. Różni się od pierwowzoru przede wszystkim liczbą jednocześnie przetwarzanych operacji I/O oraz tym, że NCQ pozwala na wydanie kolejnego polecenia przez hosta w trakcie pracy HDD nad innym zadaniem. |
Za funkcjonalność NCQ odpowiadają trzy kluczowe protokoły: |
W interfejsie SATA-III wprowadzono wiele zmian w funkcjonowaniu NCQ. Poprawiono m.in. zarządzanie kolejkowaniem oraz dodano polecenia związane z lepszą obsługą przesyłu strumieniowego treści multimedialnych, dzięki zezwoleniu hostowi na przekazywanie informacji czy i które operacje mają być zatrzymane, a którym należy zwiększyć priorytet. W wyniku tego nastąpiła ogólna poprawa wydajności systemu, a nie tylko zwiększenie liczby wykonywanych przez dysk operacji I/O na sekundę. |
NCQ zaimplementowane w interfejsie SATA-II mogło również wpływać negatywnie na wykonywanie niektórych planowanych zadań I/O, powodując spadek wydajności systemu operacyjnego. Algorytm ten nie miał ustalonych czasów na wykonanie poszczególnych operacji I/O. Także liczba przesunięć konkretnego planowanego zadania I/O na koniec kolejki nie była ograniczona. Wykonanie jednego polecenia I/O mogło więc być odwlekane w czasie na rzecz coraz nowszych zapytań, prowadząc do tzw. zagłodzenia procesu. |
Ze względu na budowę dysków SSD (wiele kości pamięci NAND podłączonych do jednego kontrolera oraz brak elementów mechanicznych) zadania NCQ realizowane są w odmienny sposób – poprzez tzw. głębokie kolejkowanie. Polega to na grupowaniu przez kontroler planowanych zadań I/O i wykonywaniu ich jednocześnie na wielu kościach pamięci NAND. |
NCQ może być obsługiwane tylko w przypadku współpracy HDD/SSD z kontrolerem dysków wspierającym tę technologię. |