Tagged Command Queuing ( TCQ ) är en teknik som används i vissa ATA- och SCSI- hårddiskar. Denna teknik gör att operativsystemet kan skicka flera läs- och skrivförfrågningar till hårddisken. I sin funktion skiljer sig ATA TCQ från den mer effektiva NCQ -tekniken som används i SATA- enheter [1] . Men SCSI TCQ lider inte av samma begränsningar som ATA TCQ.
Före uppfinningen av TCQ kunde operativsystemet bara skicka en förfrågan åt gången. För att förbättra prestandan måste denna teknik beställa förfrågningar baserat på dess egna överväganden av hårddiskaktivitet. Med TCQ kan disken fatta sina egna beslut om hur förfrågningar ska beställas (vilket i sin tur bör avlasta operativsystemet från denna belastning). Som ett resultat kan TCQ förbättra den övergripande prestandan för en hårddisk om tekniken implementeras korrekt.
För att öka effektiviteten bör sektorer behandlas i ordning efter närhet till huvudets nuvarande position, det vill säga förfrågningar från de närmaste sektorerna behandlas först och de längst bort sist. Kön fylls ständigt på med nya förfrågningar, och avslutade förfrågningar raderas, och omdefinieringen av kön sker i enlighet med redan schemalagda läs-/skrivförfrågningar och förändringar i huvudets position. Den exakta ordningsalgoritmen kan bero på styrenheten och själva disken, medan själva datorn bara skickar förfrågningar när det är nödvändigt, och lämnar exekveringsdetaljerna till styrenhetens gottfinnande.
Denna kömekanism kallas ibland för " hisssökning ", på grund av likheten med hur moderna hissar rör sig i byggnader, svarar på många samtal och bearbetar dem för att minimera rörelser, vilket illustrerar denna idé ganska tydligt.
Om knapparna för våning 5, 2 och 4 trycks in i den ordningen och hissen höjs från första våningen, kommer den gamla hissen att röra sig genom våningarna i den ordning som förfrågningarna kom in. En modern hiss å andra sidan kommer att bearbeta och sekvensera förfrågningar för att stanna på våningarna i en logisk ordning på 2, 4 och 5 utan onödiga rörelser. Diskar utan kö kör förfrågningar i den ordning de tas emot, som de gamla hissarna ovan. Köade enheter utför förfrågningar i den mest effektiva ordningen. Detta möjliggör en viss förbättring av prestanda på system med en enda användare, men den största effekten av användningen av denna teknik uppnås i system som flera användare arbetar med samtidigt, och skickar förfrågningar som är kollektivt adresserade till hela diskytan.
SCSI TCQ är den första mest populära versionen av TCQ och fortsätter att vara populär idag. Det låter dig beställa uppgifter i en kö på ett av tre olika sätt [2] :
Framför köläget , som används uteslutande i SCSI TCQ, placeras uppgiften längst fram i kön, före alla andra uppgifter, inklusive tidigare schemalagda uppgifter för den tidigare chefen för kön [2] . [1] [3] . Detta läge används inte i stor utsträckning, eftersom det kan orsaka brist på data vid eventuella avvikelser.
I ordnat läge bör en uppgift köras omedelbart efter alla tidigare uppgifter och före alla nyare, exklusive endast de nyare uppgifterna i spetsen av kön [2] .
Enkelt läge låter dig utföra uppgifter i valfri ordning som inte bryter mot reglerna och begränsningarna för uppgifter som är associerade med de två tidigare lägena [2] . När ett kommando i en uppgift exekveras, skickar enheten ett meddelande till värdbussadaptern om att kommandot har slutförts [2] . Hur som helst, SCSI TCQ ådrar sig en hel del omkostnader vid användning av avbrott, beroende på bussen som är ansluten till SCSI-rotbussadaptern. För PCI, PCI-X, PCI Express och andra bussar som tillåter detta undviker man att använda DMA till priset av att sänka belastningen. Den äldre ISA-bussen kräver en SCSI-adapter för att generera avbrott för att komma åt processorn så att tredjeparts DMA-kontrollanter kan slutföra överföringen, och sedan krävs ytterligare ett avbrott för att meddela processorn att uppgiften i kön har slutförts [1] , därigenom orsakar ganska stor belastning på processorn.
SCSI-3-protokollet allokerar 64 bitar för användning som ett etikettfält (tagg) vilket tillåter upp till 264 uppgifter att passa i en överföringsuppsättning, vilket indikerar att några av kommandona måste slutföras innan efterföljande kommandon sänds [2] . Olika protokoll implementerade inom SCSI-protokollet kanske inte tillåter att alla 64 bitar används. Till exempel tillåter äldre parallell SCSI endast 8 bitar för etiketter (taggar), iSCSI tillåter upp till 32 bitar och Fibre Channel tillåter upp till 16 bitar för taggar med den reserverade 0xFFFF- taggen . Denna flexibilitet gör att protokolldesignern kan byta ut möjligheten att hantera köer och "kostnad". Nätverk som kan nå stora storlekar, såsom iSCSI-nätverk, drar nytta av fler bitar för etiketter, väl kombinerade med fler diskar i nätverket och högre latens orsakad av liknande nätverksstorlekar, medan mindre nätverk, såsom parallella SCSI-kedjor inte har tillräckligt med diskar eller latens för att kräva ett stort antal bitar för etiketter och möjliggöra besparingar genom att använda system som stöder färre bitar (de är vanligtvis lättare att implementera, och därför billigare, eller så är de föråldrade system).
ATA TCQ utvecklades i ett försök att tillföra fördelarna med SCSI till ATA-hårddiskar. Tekniken finns för både vanlig (parallell) och seriell ATA.
Denna idé var inte framgångsrik, eftersom ATA-bussen var en variant av ISA-bussen med ett reducerat antal stift. Kravet på mjukvarukompatibilitet gjorde att ATA-adaptrar var mycket lika ISA-bussenheter utan stöd för bussmastering . När enheten är redo att överföra data måste den skicka en avbrottssignal till CPU:n, vänta på att processorn "frågar" enheten vilket kommando den är redo att utföra, svara att den är redo att utföra det, vänta på processorn för att programmera bussadaptern att styra via indirekt DMA baserat på resultatet av det föregående kommandot, vänta på att den förmedlade DMA-styrenheten utför kommandot och måste sedan skicka om avbrottssignalen till processorn för att meddela den när DMA-styrenheten har slutfört exekveringen uppgiften så att processorn kan meddela tråden att den begärda uppgiften har slutförts. [1] . Eftersom avbrottssvar medför för mycket overhead, ökar CPU-användningen snabbt med ATA TCQ aktiverat [1] . Dessutom, eftersom bearbetningstiden för avbrottssignalen inte kan förutsägas i förväg, finns det situationer när disken är redo att överföra data, men inte kan överföra dem på grund av det faktum att den behöver vänta på att processorn ska svara på avbrottet signal, eftersom det är han som är ansvarig för att sätta förmedlad DMA [1] .
Därför implementeras denna standard extremt sällan på grund av den höga belastningen på CPU:n och utan en påtaglig prestandaförbättring, för vilket allt detta skulle vara vettigt [1] . Denna standard ger upp till 32 väntande kommandon per enhet [3] .
SATA NCQ är en ny standard som inte kräver CPU-avbrottssignaler. Liksom ATA TCQ har den upp till 32 råkommandon per enhet [1] , men den designades med SATA-adaptrarnas kapacitet i åtanke, utan att emulera parallell ATA-drift samtidigt som den stöder direkt DMA [1] . Istället för avbrottssignaler används följande schema: innan jobbet tvingar CPU:n att programmera DMA-adaptern talar hårddisken till adaptern vilket kommando den vill utföra, vilket resulterar i att adaptern programmerar sin inbyggda DMA-styrenhet enligt de parametrar som anges i kommandot, tidigare vald hårddisk, skickar DMA-styrenheten de data som behövs för att utföra kommandot [1] . För att ytterligare minska avbrottskostnaderna kan disken fördröja avbrott med uppgiftsslutförandesignaler tills det finns tillräckligt många för att skicka dem tillsammans, vilket gör det möjligt för CPU:n att meddela flera trådar samtidigt att deras uppgifter har slutförts [1] . Om en annan uppgift avslutas efter att ett sådant avbrott har skickats, kan adaptern korrigera slutförandemeddelanden om de inte skickades till processorn [1] . Detta gör att hårddiskens firmware kan kompensera för diskprestanda och CPU-belastning genom att bestämma när den ska avstå jämfört med när den ska skicka meddelanden om slutförande [1] .