Кіріспе

Компьютерлік есепте, Native Command Queuing (NCQ) – Serial ATA протоколының кеңейтілген нұсқасы, ол қатты дискілерге түсірілген оқу және жазу командаларын ішкі түрде орындалу реті бойынша оңтайландыруға мүмкіндік береді. Бұл қажетсіз диск бас қозғалысын азайтуға көмектеседі, соның салдарынан бірнеше оқу/жазу сұранысы бір уақытта орындалатын жұмыс жүктемелерінде өнімділікті арттырады (және дискінің тозуын азайтады), мұндай жағдайлар көбінесе серверлік қолданбаларда кездеседі.

Тарих

Native Command Queuing-тің алдында Parallel ATA-ның Tagged Command Queuing (TCQ) нұсқасы болған. ATA-ның TCQ-ны енгізу әрекеті, ATA хост-бусы адаптерлерінің операциялық жүйемен өзара әрекеттесу үшін ISA-бусы құрылғысының протоколдарын қолдану қажеттілігімен шектелді. Соның салдарынан жоғары CPU жүктемесі және мардымсыз өнімділік артуы ATA TCQ-ның нарықта қабылдануына кедергі келтірді. NCQ, TCQ-дан айырмашылығы, NCQ-да әрбір команда бірдей маңызды, бірақ NCQ-ның хост-бусы адаптері, командалар тізбегі кезінде CPU-ға берілген DMA параметрлерімен өзінің бірінші тарап DMA қозғалтқышын бағдарлайды, ал TCQ команда сұраныстары кезінде CPU-ны тоқтатады және одан ATA хост-бусы адаптерінің үшінші тарап DMA қозғалтқышын реттеуді талап етеді. NCQ-ның іске асырылуы тиімді, себебі диск өзінің жұмыс сипаттамаларын жақсы біледі және айналу орнын ескере алады. NCQ және TCQ екеуінің де кезек ұзындығының максималды шегі 32 орындалмаған команданы құрайды. ATA TCQ сирек қолданылатындықтан, Parallel ATA (және кейбір чипсеттердің IDE режимі) әдетте бір портқа бір ғана орындалмаған команданы қолдайды. NCQ-ны қосу үшін, оны SATA хост-бусы адаптерінде де, қатты дискіде де қолдау көрсету қажет. Хост-бусы адаптерінде NCQ-ны қосу үшін операциялық жүйеге тиісті драйверді жүктеу керек. Көптеген жаңа чипсеттер Advanced Host Controller Interface (AHCI) интерфейсін қолдайды, бұл операциялық жүйелерге оларды бірыңғай басқаруға және NCQ-ны қосуға мүмкіндік береді. DragonFly BSD 2009 жылғы 2.3 нұсқасынан бастап NCQ-мен AHCI-ді қолдайды. Linux ядролары 2.6.19 нұсқасынан бастап AHCI-ді табиғи түрде қолдайды, ал FreeBSD 8.0 нұсқасынан бастап AHCI-ді толыққанды қолдайды. Windows Vista және Windows 7 де AHCI-ді табиғи түрде қолдайды, бірақ егер бастапқы орнату кезінде контроллерлік қолдау болмаса, олардың AHCI қолдауы (msahci қызметі арқылы) реестрді өңдеу арқылы қолмен қосу қажет. Windows 7 AHCI тек NCQ ғана емес, сонымен қатар SSD дискілерінде TRIM қолдауын (сәйкес микрокодпен) қамтамасыз етеді. Windows XP сияқты ескі операциялық жүйелер, егер AHCI хост-бусы адаптерінде болса да, өндірушіге тән драйверді орнатуды талап етеді (RAID немесе SCSI контроллерін орнату сияқты), бұл бастапқы орнатуды қиындатады және қолданыстағы орнатуларды түрлендіруді күрделі етеді, себебі көптеген контроллерлер порттарын AHCI–SATA/IDE/legacy аралас режимінде жұмыс істете алмайды.

Өнер көрсету

2004 жылы NCQ дискінің бірінші буыны (Seagate 7200.7 NCQ) сынақтан өткенде, NCQ IOMeter өнімділігін арттырғанмен, десктоптық қолданбалардың өнімділігі төмендеді. 2010 жылы жасалған бір шолуда, Windows-тың көп тапсырмалы сынақтарында NCQ қосылғанда орташа есеппен 9%-ға жуық жақсартулар байқалды. NCQ операциялық жүйенің I/O жоспарлаушысымен теріс әрекеттесе алады, бұл өнімділікті төмендетеді; мұндай жағдай Linux жүйесінде RAID 5 конфигурациясында байқалды. NCQ-да хостқа I/O сұрауы үшін белгілі бір мерзімдерді немесе сұраудың қанша рет басқаларының пайдасына қабылдамауға болатынын анықтау мүмкіндігі жоқ. Теория бойынша, кезекте тұрған сұрау I/O жүктемесі кезінде басқа (жаңа) сұрауларды өңдеу үшін диск тарапынан белгісіз уақытқа дейін кешіктірілуі мүмкін. Кейбір дисктердің, мысалы, 2007 жылғы WD Raptor дискісінің микропрограммасында NCQ қосылғанда алдын ала оқу функциясы өшіріледі, нәтижесінде тізбекті оқу жылдамдығы төмендейді. SATA типті жад дискілері (SSD) параллель жұмыс жүктемелері үшін бірнеше команданы кезекке қою мүмкіндігінен айтарлықтай пайда көреді. PCIe интерфейсіндегі NVMe SSD үшін кезек тереңдігі одан да арттырылып, әрқайсысында 65 535 командаға дейін 65 535 кезекке дейін қолдау көрсетілді.

Қауіпсіздік (FUA)

NCQ-ның көпке таныс емес бір мүмкіндігі – оның ATA TCQ-дан өзгешелігі, хостқа деректер дискінің пластиналарына жеткенде немесе дискінің буферіне (бортындағы кэш) жеткенде хабарлансын деуге рұқсат береді. Аппараттық жабдықтың дұрыс жұмыс істеуін ескере отырып, бұл мүмкіндік fsync сияқты жүйелік шақырулармен бірге дискінің бортындағы кэшін пайдаланғанда деректердің дұрыстығына кепілдік беруге мүмкіндік береді. SCSI-ден алынған байланысты жазу белгісі Force Unit Access (FUA) деп аталады.

Қатты күйдегі дисктер

NCQ сонымен қатар жаңа қатты күйдегі жеке дискілерде де қолданылады, онда диск хосттан кідіріс сезінеді, керісінше емес. Мысалы, Intel компаниясының X25 E Extreme қатты күйдегі дискісі NCQ-ны пайдаланады, бұл дискте хост жүйесі процессор тапсырмаларын өңдеумен айналысып жатқанда өңдеуге командалар бар екенін қамтамасыз етеді. NCQ сонымен қатар SSD контроллеріне командаларды бір уақытта (немесе жартылай бір уақытта, мысалы, құбыр арқылы) орындауға мүмкіндік береді, егер құрылғының ішкі құрылымы мұндай өңдеуге жарамды болса. NVM Express (NVMe) стандарты SSD-лер үшін оңтайландырылған командалар тізімін де қолдайды. NVMe бір контроллер мен құрылғы үшін бірнеше тізімге рұқсат береді, сонымен бірге әрбір тізім үшін әлдеқайда тереңдеуге мүмкіндік береді, бұл негізгі SSD аппараттық құрылғысының жұмыс принципімен сәйкес келеді.