
Native Command Queuing (NCQ) to technologia zaprojektowana w celu zwiększenia wydajności dysków twardych pracujących w interfejsie SATA. Mechanizm polega na tym, że dysk przyjmując wiele jednoczesnych żądań od systemu operacyjnego może wewnętrznie zmienić kolejność ich wykonania tak, aby zminimalizować liczbę niepotrzebnych ruchów głowicy i czasy oczekiwania związane z pozycjonowaniem i latencją obrotową. W praktyce daje to poprawę wydajności przy obciążeniach z dużą liczbą równoległych, losowych operacji wejścia/wyjścia — typowych dla serwerów, baz danych i aplikacji wielowątkowych.
Jak działa i kiedy pomaga
NCQ pozwala dyskowi na „posortowanie” do 32 (w teorii; w praktyce zwykle 31) poleceń oczekujących w kolejce. Dzięki temu dysk może wybierać następne żądanie tak, by minimalizować ruchy głowicy i skrócić średni czas dostępu. Największe korzyści obserwuje się przy:
- losowych odczytach/zapisach przy wielu jednoczesnych żądaniach (np. serwery plików, bazy danych),
- obciążeniu mieszanym z wieloma wątkami aplikacji wysyłającymi żądania I/O.
W przypadku sekwencyjnych odczytów lub zapisów (np. kopiowanie dużych plików, gry wczytujące zasoby liniowo) logiczne przemieszczanie poleceń może dodać niewielkie opóźnienie związane z analizą i reorganizacją kolejki, dlatego w niektórych starszych konfiguracjach rzeczywiście obserwowano pogorszenie responsywności lub wydajności. [przestarzały fakt]
Historia i porównanie z innymi rozwiązaniami
NCQ został wprowadzony jako następca rozwiązania ATA Tagged Command Queuing (TCQ) stosowanego dla PATA. Implementacja TCQ dla PATA miała problemy praktyczne — duże obciążenie procesora i słaba integracja z kontrolerami powodowały niską akceptację. NCQ różni się tym, że to dysk (firmware) decyduje o kolejności wykonywania poleceń, a nie system operacyjny — co jest korzystne, bo dysk ma najlepszą wiedzę o swoim stanie i może uwzględniać położenie obrotowe talerzy.
NCQ i PATA TCQ mają maksymalną długość kolejki do 32 poleceń w locie (praktycznie 31), podczas gdy w świecie SCSI TCQ obsługiwane są znacznie dłuższe kolejki (zwykle setki poleceń), co daje inną skalę równoległości w typowych architekturach serwerowych.
Wymagania i wsparcie
Aby NCQ działało, muszą być spełnione trzy warunki:
- dysk twardy musi obsługiwać NCQ,
- kontroler SATA (adapter magistrali hosta) musi wspierać NCQ,
- system operacyjny musi korzystać ze sterownika, który umożliwia tryb AHCI/NCQ lub natywną obsługę NCQ.
Wiele nowszych chipsetów obsługuje standard Advanced Host Controller Interface (AHCI), który udostępnia funkcje takie jak NCQ i hot-plug. Dzięki AHCI system operacyjny może w prosty sposób korzystać z NCQ za pomocą ogólnego sterownika. Nowoczesne jądra Linuksa obsługują AHCI natywnie. W praktyce Microsoft wprowadził domyślny sterownik AHCI dopiero od Windows Vista; systemy starsze, takie jak Windows XP, zwykle wymagają instalacji sterownika producenta przed przełączeniem kontrolera w tryb AHCI.
NCQ i dyski SSD
NCQ powstało z myślą o dyskach talerzowych, gdzie kolejność żądań znacząco wpływa na ruchy mechaniczne. Dyski SSD nie mają elementów mechanicznych, więc tradycyjne korzyści z rejestrowania pozycji głowicy nie występują. Mimo to wiele nowoczesnych SSD wspiera NCQ (oraz inne mechanizmy równoległości), co pozwala lepiej wykorzystać wewnętrzną wielokanałowość kontrolera SSD i zwiększa przepustowość przy równoległych operacjach I/O. Ogólnie: SSD zwykle zyskują mniej na NCQ niż HDD, ale wciąż może to być korzystne przy dużej liczbie równoległych żądań.
Sprawdzanie i włączanie NCQ
Jak sprawdzić, czy NCQ jest dostępne i włączone:
- W systemie Windows: w Menedżerze urządzeń (Device Manager) sprawdź kontrolery IDE ATA/ATAPI — obecność sterownika AHCI lub sterownika producenta sugeruje wsparcie NCQ. W praktyce dla nowych systemów (Windows Vista/7/10/11) AHCI jest standardowo obsługiwane. Zmiana trybu SATA w BIOS/UEFI na AHCI jest często wymagana — przy przełączaniu z trybu IDE/Compatibility na AHCI zaleca się najpierw zainstalować odpowiedni sterownik systemowy, by uniknąć problemów z bootowaniem.
- W Linuksie: użyteczne są narzędzia i pliki sysfs. Przykłady:
- cat /sys/block/sdX/device/queue_depth — pokazuje głębokość kolejki urządzenia,
- cat /sys/block/sdX/queue/nr_requests — maksymalna liczba równoległych żądań,
- sudo hdparm -I /dev/sdX | grep -i ncq — może pokazać informacje o wsparciu NCQ (jeśli dostępne),
- polecenie dmesg lub journalctl może zawierać komunikaty kontrolera AHCI i informację o aktywacji NCQ.
Wady, problemy i dobre praktyki
Chociaż NCQ zwykle poprawia wydajność przy obciążeniach równoległych, może w niektórych przypadkach dodawać niewielkie opóźnienie przy pojedynczych, sekwencyjnych operacjach. Dodatkowo starsze lub wadliwe firmware dysków potrafiło niewłaściwie zarządzać kolejkowaniem, co prowadziło do regresji wydajności lub problemów stabilności. Dlatego:
- dla typowego użytkownika desktopowego najlepszą praktyką jest pozostawienie NCQ włączonego — większość nowoczesnych dysków i sterowników działa poprawnie i przynosi korzyści,
- jeśli obserwujesz problemy z wydajnością w konkretnych aplikacjach (np. gry), przetestuj wydajność z NCQ włączonym i wyłączonym,
- w przypadku podejrzenia problemów z firmware sprawdź dostępność aktualizacji firmware producenta dysku,
- przy zmianie trybu SATA w BIOS/UEFI na AHCI postępuj ostrożnie i przygotuj kopię zapasową systemu.
Testowanie wpływu NCQ
Aby ocenić wpływ NCQ na wydajność w konkretnej konfiguracji, użyj narzędzi do benchmarków I/O:
- Linux: fio, iostat, bonnie++, hdparm, dd (z odpowiednimi parametrami dla losowych I/O),
- Windows: CrystalDiskMark, ATTO Disk Benchmark, IOMeter.
Porównaj wyniki dla obciążeń losowych (małe operacje, wiele wątków) i sekwencyjnych (duże transfery, pojedynczy wątek) przy NCQ włączonym i wyłączonym.
Podsumowanie
NCQ to efektywna technika poprawy wydajności dysków przy obciążeniach równoległych, szczególnie przy tradycyjnych dyskach talerzowych. Wymaga wsparcia ze strony dysku, kontrolera SATA i sterownika (najczęściej poprzez AHCI). Dla większości współczesnych systemów i zastosowań najlepiej pozostawić NCQ aktywne, a w razie problemów wykonać testy porównawcze i sprawdzić aktualizacje firmware/sterowników.