NCQ (Native Command Queuing) — как работи, ползи и активиране
Native Command Queuing (NCQ) е технология, предназначена за увеличаване на производителността на SATA твърдите дискове в компютрите. Тя може да направи това при определени ситуации, като позволява на отделния твърд диск вътрешно да оптимизира реда, в който изпълнява получените заявки за четене и запис. Това може да намали количеството на ненужните движения на главата на диска и да доведе до по-добра производителност (и леко намалено износване на диска) при натоварвания, при които едновременно се изпълняват множество заявки за четене/запис. Тази ситуация най-често възниква в приложения от сървърен тип. Въпреки това настоящата (от 2004 г.) технология всъщност забавя достъпа до HD в някои приложения, като игри и последователни четения и записи, поради допълнителното закъснение, предизвикано от логиката NCQ. [остарял факт]
Родното командното подреждане беше предшествано от версията на паралелния ATA за маркирано командното подреждане (TCQ). Опитът на ATA да интегрира TCQ беше ограничен от изискването адаптерите на ATA да използват протоколи за устройства на ISA шината за взаимодействие с операционната система. Произтичащите от това високи разходи за процесора и незначително повишаване на производителността допринесоха за неприемането на TCQ на пазара.
NCQ се различава от PATA TCQ по това, че пренареждането на командите се извършва от устройството, а не от операционната система, и всяка команда е еднаква по важност. Това е за предпочитане, тъй като дискът има най-много познания за своите работни характеристики и може да вземе предвид ротационната позиция. NCQ и PATA TCQ имат максимална дължина на опашката от 32 команди в движение (31 на практика), докато SCSI TCQ има максимална дължина на опашката от 264 команди в движение.
За да бъде активирана функцията NCQ, тя трябва да се поддържа и да е активирана в адаптера на SATA хост шината и в самия твърд диск. За да се активира NCQ в адаптера на хост шината, в операционната система трябва да се зареди съответният драйвер на устройството. Много от по-новите чипсети поддържат Advanced Host Controller Interface (AHCI), което би трябвало да позволи на общ драйвер, предоставен от операционната система, да ги управлява и да активира NCQ. Всъщност по-новите основни ядра на Linux поддържат AHCI в естествен вид. За съжаление Windows XP изисква инсталирането на специфичен драйвер на производителя, дори ако AHCI е наличен в адаптера на хост шината. Windows Vista коригира тази ситуация, като включва общ AHCI драйвер.
Как работи NCQ (по-подробно)
Когато операционната система и/или контролерът изпращат множество заявки за четене/запис към един и същ SATA диск, NCQ позволява на устройството да получи до 32 заявки в опашка и да пренареди техния ред спрямо оптимално физическо изпълнение. Дискът използва информация за позицията на въртящия се медиум (ротация) и позицията на четящата/пише антена, за да минимизира движението и времето за търсене между последователни операции. Вместо да изпълнява заявките по реда, в който са дошли, той избира последователност, която общо взето е по-бърза за изпълнение.
Основни ползи
- По-добро представяне при многозадачни I/O натоварвания: NCQ е най-полезно при ситуации с паралелни заявки (сервери, виртуализация, бази данни, тежки мултитред приложения).
- Намаляване на механичното износване: по-малко ненужни движения на главата на диска водят до леко по-ниско натоварване и потенциално по-дълъг живот.
- По-добра обща пропускливост: при произволни операции NCQ може да увеличи IOPS и да намали средното време за отговор.
- Запазване на процесорни ресурси: тъй като устройството само решава оптималния ред на изпълнение, натоварването върху хоста и операционната система е по-малко в сравнение със сценарии, в които ОС трябва да контролира опашката.
Ограничения и недостатъци
- Само при конкурентни заявки: при последователни четения/записи или в игри, където заявките често са едновременно последователни и с ниска латентност, NCQ може да не носи полза и при някои стари реализации да добавя лека латентност.
- Зависимост от фърмуера и драйвери: ранни реализации на NCQ при някои модели и контролери са имали бъгове, което е довело до несъвместимости или загуба на производителност. Затова е важно фърмуерът и драйверите да са актуални.
- Ограничена дълбочина на опашката: SATA NCQ поддържа до 32 команди (31 на практика), докато SCSI и NVMe решенията предлагат много по-големи и по-гъвкави опашки.
- Не значи автоматично по-добре за SSD: при някои SSD дискове възможностите на устройството (вътрешна паралелност) и интерфейсът (SATA срещу NVMe) влияят силно на това дали NCQ ще доведе до видимо подобрение.
NCQ и SSD / NVMe
При SATA SSD дисковете NCQ все още може да бъде полезно, тъй като много SATA SSD използват вътрешни механизми и паралелизъм, които се възползват от възможността за множество едновременни заявки. В съвременните високопроизводителни NVMe устройства обаче се използва съвсем различна архитектура (множествени опашки и голяма дълбочина), която надминава възможностите на SATA NCQ по отношение на паралелизъм и пропускателна способност.
Как да проверите дали NCQ е налично и активно
Linux:
- Командата hdparm -I /dev/sdX показва дали дискът поддържа NCQ и дали е активирано (търсете редове с "Queue" или "NCQ").
- Ядрен модулът ahci трябва да е зареден за AHCI контролери; проверка с lsmod и dmesg може да покаже статуса.
Windows:
- В Device Manager проверете контролера под "IDE ATA/ATAPI controllers" — когато е използван AHCI драйвер (напр. "Standard SATA AHCI Controller" или драйвер от производителя), NCQ обикновено е налично. Някои инструменти за дисков статус (напр. CrystalDiskInfo) показват дали NCQ е налично/включено.
- Windows XP: изисква специфичен драйвер от производителя за AHCI/NCQ; по-новите версии на Windows (Vista и по-късно) включват общ AHCI драйвер.
Как да включите NCQ
- BIOS/UEFI: Уверете се, че SATA режимът в BIOS/UEFI е настроен на AHCI, а не на "IDE" или "Legacy". Това е най-често първата стъпка за активиране на NCQ.
- Драйвери: Инсталирайте подходящия AHCI драйвер за вашата операционна система и чипсет. На Linux модулът ahci обикновено се зарежда автоматично. На Windows инсталирайте общия AHCI драйвер или драйвера на производителя (особено при Windows XP).
- Фърмуер и ъпдейти: Актуализирайте фърмуера на диска и BIOS/UEFI/чипсет драйверите, ако е налична по-нова версия, която оправя известни проблеми с NCQ.
Практически съвети
- Ако използвате старо оборудване и имате проблеми с нестабилност или производителност след включване на AHCI/NCQ, върнете временно към IDE режим и проверете за актуализирани драйвери/фърмуер.
- За съвременни системи и повечето потребители — особено при сървъри и тежки I/O натоварвания — активирането на AHCI/NCQ е препоръчително.
- За NVMe дискове се използва различен драйвер/стек и настройките за NCQ не се отнасят — NVMe има своя собствена подсистема за управление на множество опашки.
Бележка относно остарялата забележка
В оригиналния текст е включен маркер [остарял факт] относно твърдението, че NCQ забавя достъпа в някои приложения. Това е частично вярно за някои ранни реализации и за специфични случаи (напр. чисто последователни операции), но при модерни дискове, актуални драйвери и правилно конфигурирана система NCQ обикновено не води до забавяне и често подобрява производителността при реални натоварвания. Винаги е добре да тествате конкретната си конфигурация и да актуализирате фърмуера/драйверите при необходимост.
Ако желаете, мога да добавя конкретни команди и инструкции за вашата операционна система или да помогна да разчетете изхода от диагностични инструменти (hdparm, smartctl, CrystalDiskInfo и др.).
Свързани страници
- Маркирани Command Queuing
Въпроси и отговори
Въпрос: Какво е Native Command Queuing?
О: Native Command Queuing (NCQ) е технология, предназначена да увеличи производителността на SATA твърдите дискове в компютрите, като позволява на отделния твърд диск да оптимизира реда, в който изпълнява заявките за четене и запис.
В: Как NCQ подобрява производителността?
О: NCQ може да намали количеството ненужни движения на главата на диска, което води до по-добра производителност и леко намалено износване на диска при натоварвания, при които се изпълняват множество заявки за четене/запис едновременно, като например приложения от сървърен тип.
Въпрос: Забавя ли NCQ достъпа до твърдия диск при определени приложения?
О: Да, NCQ действително може да забави достъпа до HD в определени приложения, като игри и последователни четения и записи, поради допълнителното забавяне, предизвикано от логиката на NCQ.
В: Как се различава Native Command Queuing от PATA TCQ?
О: За разлика от PATA TCQ, пренареждането на командите с NCQ се извършва от устройството, а не от операционната система, и всяка команда е еднаква по важност. Дискът има повече познания за характеристиките на работата си, така че може да вземе предвид позицията на въртене при оптимизиране на командите. Освен това NCQ има максимална дължина на опашката от 32 в сравнение с максималната дължина на опашката на PATA TCQ от 32 (31 на практика).
Въпрос: Какви хардуерни изисквания трябва да бъдат изпълнени, за да бъде активирана функцията NCQ?
О: За да бъде активирано NCQ, то трябва да се поддържа и активира както от адаптера на SATA хост шината, така и от самия твърд диск. Освен това в операционната система трябва да бъде зареден подходящ драйвер за устройство, за да се активира NCQ на адаптера на хост шината.
В: Има ли обща поддръжка на AHCI за Windows XP?
О: Не, Windows XP изисква инсталиране на специфичен за производителя драйвер, дори ако AHCI е наличен в адаптера на хост шината. Въпреки това Windows Vista включва общ AHCI драйвер, който позволява обща поддръжка на AHCI устройства.