Native Command Queuing
Inom databehandling är Native Command Queuing ( NCQ ) en förlängning av Serial ATA- protokollet som tillåter hårddiskar att internt optimera ordningen i vilken mottagna läs- och skrivkommandon exekveras. Detta kan minska mängden onödiga rörelser av drivhuvudet, vilket resulterar i ökad prestanda (och något minskat slitage på disken) för arbetsbelastningar där flera samtidiga läs-/skrivförfrågningar är utestående, som oftast förekommer i applikationer av servertyp .
Historia
Native Command Queuing föregicks av Parallel ATA: s version av Tagged Command Queuing (TCQ). ATA:s försök att integrera TCQ begränsades av kravet att ATA-värdbussadaptrar använder ISA -bussenhetsprotokoll för att interagera med operativsystemet. Den resulterande höga CPU-overheaden och försumbara prestandavinsten bidrog till en bristande marknadsacceptans för TCQ.
NCQ skiljer sig från TCQ genom att, med NCQ, varje kommando är lika viktigt, men NCQ:s värdbussadapter programmerar också sin egen förstaparts DMA- motor med CPU-givna DMA -parametrar under sin kommandosekvens, medan TCQ avbryter CPU:n under kommandoförfrågningar och kräver den för att modulera ATA-värdbussadapterns tredje parts DMA- motor. NCQ:s implementering är att föredra eftersom frekvensomriktaren har mer exakt kunskap om dess prestandaegenskaper och kan redogöra för dess rotationsposition. Både NCQ och TCQ har en maximal kölängd på 32 utestående kommandon.
För att NCQ ska aktiveras måste det stödjas och aktiveras i SATA-värdbussadaptern och på själva hårddisken. Lämplig drivrutin måste laddas in i operativsystemet för att aktivera NCQ på värdbussadaptern.
Många nyare styrkretsar stöder Advanced Host Controller Interface (AHCI), vilket gör att operativsystemen kan styra dem universellt och aktivera NCQ. DragonFly BSD har stödt AHCI med NCQ sedan 2.3 2009. Linux-kärnor stöder AHCI inbyggt sedan version 2.6.19, och FreeBSD stöder fullt ut AHCI sedan version 8.0. Windows Vista och Windows 7 stöder också AHCI, men deras AHCI-stöd (via msahci-tjänsten) måste aktiveras manuellt via registerredigering om styrenhetsstöd inte fanns under den första installationen. Windows 7 :s AHCI möjliggör inte bara NCQ utan även TRIM- stöd på SSD- enheter (med deras stödjande firmware). Äldre operativsystem som Windows XP kräver installation av en leverantörsspecifik drivrutin (liknande installation av en RAID- eller SCSI -kontroller) även om AHCI finns på värdbussadaptern, vilket gör den initiala installationen mer tråkig och konverteringar av befintliga installationer relativt svåra. eftersom de flesta kontroller inte kan använda sina portar i blandat AHCI–SATA/IDE/legacy-läge.
Hårddiskar
Prestanda
Ett test från 2004 med den första generationens NCQ-enhet (Seagate 7200.7 NCQ) fann att medan NCQ ökade IOMeters prestanda, minskade prestanda för stationära applikationer. En recension 2010 fann förbättringar i storleksordningen 9 % (i genomsnitt) med NCQ aktiverat i en serie Windows-multitasking-tester.
NCQ kan negativt störa operativsystemets I/O-schemaläggare , vilket minskar prestandan; detta har observerats i praktiken på Linux med RAID-5 . Det finns ingen mekanism i NCQ för värden att specificera någon form av deadlines för en I/O, som hur många gånger en begäran kan ignoreras till förmån för andra. I teorin kan en förfrågan i kö försenas av enheten en godtycklig tid medan den betjänar andra (eventuellt nya) förfrågningar under I/O-tryck. Eftersom algoritmerna som används inuti hårddiskarnas firmware för NCQ-utskicksbeställning i allmänhet inte är allmänt kända, introducerar detta ytterligare en nivå av osäkerhet för hårdvara/firmwares prestanda. Tester hos Google runt 2008 har visat att NCQ kan fördröja en I/O i upp till 1–2 sekunder. En föreslagen lösning är att operativsystemet artificiellt svälter ut NCQ-kön tidigare för att tillfredsställa applikationer med låg latens i tid.
På vissa hårddiskars firmware, som WD Raptor cirka 2007, inaktiveras read-ahead när NCQ är aktiverat, vilket resulterar i långsammare sekventiell prestanda.
Säkerhet (FUA)
En mindre känd egenskap hos NCQ är att den, till skillnad från dess ATA TCQ-föregångare, tillåter värden att specificera om den vill bli meddelad när data når diskens plattor eller när den når diskens buffert (inbyggd cache). Om man antar en korrekt hårdvaruimplementering tillåter denna funktion att datakonsistens kan garanteras när diskens inbyggda cache används i samband med systemanrop som fsync . Den tillhörande skrivflaggan, som också är lånad från SCSI, kallas Force Unit Access (FUA).
Solid-state-enheter
NCQ används också i nyare solid-state-enheter där enheten stöter på latens på värden, snarare än tvärtom. Till exempel Intels X25-E Extreme solid-state-enhet NCQ för att säkerställa att enheten har kommandon att bearbeta medan värdsystemet är upptaget med att bearbeta CPU-uppgifter.
NCQ gör det också möjligt för SSD-styrenheten att utföra kommandon samtidigt (eller delvis samtidigt, till exempel med hjälp av pipelines) där enhetens interna organisation möjliggör sådan bearbetning.
Standarden NVM Express (NVMe) stöder också kommandokö, i en form optimerad för SSD:er. NVMe tillåter flera köer för en enda styrenhet och enhet, vilket samtidigt tillåter mycket högre djup för varje kö, vilket bättre matchar hur den underliggande SSD-hårdvaran fungerar.
Se även
externa länkar
- Serial ATA and the 7 Deadly Sins of Parallel ATA at Lost Circuits (för TCQ)
- Hype vs. verklighetsanalys på Tom's Hardware