Advanced Host Controller Interface (AHCI) — стандарт регистрового и DMA интерфейса между контроллером Serial ATA и процессором/памятью/кодом драйвера, содержащий всю информацию о контроллере, необходимую для разработки драйвера. Это позволило (по образцу устройств шины USB) использовать один и тот же драйвер, поддерживающий расширенные возможности SATA, с аппаратурой разных производителей.

Разработан Intel около 2008 года.

До появления AHCI использование расширенных возможностей SATA, таких, как встроенная в сам диск очередь команд (NCQ) и горячая замена. было возможным только с чипами/картами третьих фирм, и с проприетарными драйверами от прозводителя для этих чипов. Встроенный же в южный мост контроллер серий PIIX от Intel не поддерживал эти возможности (хотя и поддерживал DMA), ибо до разработки AHCI он так и не отказался от древнего, времен середины 1980ых годов, PIO-интерфейса дискового контроллера на портах 0x1f0/0x170.

Также использовался в первых накопителях PCIe SSD (например Kingston HyperX Predator), но там он вскоре был заменен на NVMe.

AHCI, по сути, является стандартизацией дисковых контроллеров бюджетного сегмента (т.е. не для серверов масштаба предприятия), позволяющей обойтись без установки дополнительных драйверов. AHCI также позволяет использовать твердотельные накопители SSD, что и использовалось постоянно в ноутбуках периода примерно 2010-2017 годов (накопитель мог быть реализован как в конструктиве двухдюймового "ноутбучного" механического жесткого диска, так и виде платы mSATA).

Однако технология SATA (а значит, и AHCI) была разработана для механических HDD и при работе с SSD не позволяет использовать все их преимущества, в отличие от более современной разработки, NVMe.[1]

Описание

[править | править код]
В разделе не хватает ссылок на источники (см. рекомендации по поиску). Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (27 апреля 2019)

Протокол AHCI появился в качестве замены устаревшего ATA, который поддерживает совместимость (по коду драйвера) начиная от оригинальной IBM PC/AT.

Этот интерфейс, использующий 8 однобайтных (точнее, 6 однобайтных и 1 16битный) регистров по адресам 0x1f0 и 0x170, основан на устаревшем и непригодном для мощного компьютера (сервера) с многозадачной ОС PIO режиме работы - транспорт данных с/на диск осуществлялся машинными командами x86 REP INSW или же REP OUTSW, или аналогичным кодом на языке Си, что приводило к сильной загрузке процессора дисковым вводом-выводом.

Во времена массового перехода еще на параллельную шину PCI и рекомендуемые ею аппаратные архитектуры этот интерфейс, который пережил еще переход самих дисков с архаичных MFM/RLL на IDE в начале 1990ых, стал несомненным архаизмом. И тем более он оказался архаизмом с переходом на SATA, где не используются общие кабели и разъемы контроллера для двух дисков.

Контроллеры ATA (например, серия PIIX, встроенная в южные мосты Intel до появления AHCI) поддерживали прямой доступ к памяти только как дополнение к этой архитектуре периода середины 1980ых годов. Реализация была путаной (несовместимой с дисковыми SCSI-подсистемами некоторых ОС, например, Microsoft пришлось для Windows 2000 создавать форк исходника таковой подсистемы scsiport.sys для использования только с PIIX контроллерами, и вносить в него мелкие правки, что было описано на англоязычных форумах по программированию под ядро Windows), путаницу (более ненужную для SATA) создавало использование общего кабеля для двух дисков, использование двух разновидностей параллельных кабелей (обычного и UDMA с вдвое большим количеством мелких жил), а также - в некоторых версиях PIIX - использование всего одного DMA-движка для обоих суб-контроллеров - и на порту 0x1f0, и на порту 0x170.

Поддержка горячей замены (при том, что оборудование eSATA её поддерживает) и очередей команд для этого интерфейса - невозможны: на одном канале (в случае SATA каждое устройство есть один канал) может одновременно исполняться только одна команда. Таким образом, задействование возможности ATA NCQ невозможно на архаичном контроллере ATA даже при поддержке её диском.

До появления AHCI для решения этой проблемы использовались отдельные платы/чипы контроллеров[чего?] (производимые фирмами Promise, HighPoint и другими), часто установленные в материнскую плату наряду с классическим ATA, встроенным в южный мост; зачастую эти контроллеры воспринимались операционной системой как контроллеры SCSI (ибо их драйвер был разработан как плагин к SCSI-подсистеме ядра, так же, как и драйвер SCSI-контроллера) и поддерживали все богатые возможности протокола SCSI.

AHCI может обрабатывать 32 одновременных запроса (NVMe — до 65536; однако, накопители, которые используют NVMe-контроллер, потребляют в 2—3 раза больше электроэнергии, чем аналогичные на базе AHCI).

Применение

[править | править код]

Поддержка AHCI существует не во всех чипах южных мостов, но даже при её реализации в чипе производитель материнской платы может не реализовать её в BIOS, и она будет недоступна. Иногда проблема решается обновлением BIOS, существуют неофициальные версии BIOS для многих материнских плат.
В некоторых случаях (Asus P5KC) поддержку AHCI невозможно включить на южном мосту, но можно включить на отдельно стоящем чипе, работающем на устаревшем Parallel ATA разъёме внутри корпуса или через внешний eSATA-разъём (получается, что внутренние жёсткие диски не могут использовать AHCI, а подключённый по eSATA внешний — может).

Многие контроллеры SATA могут включать простой режим AHCI или с поддержкой RAID. Intel рекомендует на своих материнских платах выбирать режим с поддержкой RAID при включённом AHCI для большей гибкости[2].

Встроенная поддержка AHCI включена в Mac OS X начиная с версии 10.4.4 для Intel, Microsoft Windows Vista и последующих (существует также альтернативный драйвер UniATA[3] со свободной лицензией, реализующий поддержку AHCI для версий ОС Windows от Windows NT 3.51 до Windows 7[4]), Linux, начиная с ядра 2.6.19[5], NetBSD, OpenBSD с версии 4.1, FreeBSD с версии 8.0, Solaris 10 с версии 8/07. Для более старых операционных систем требуется драйвер производителя.

Проблемы переключения из Standard IDE на AHCI

[править | править код]
В разделе не хватает ссылок на источники (см. рекомендации по поиску). Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (27 апреля 2019)

При переключении дискового контроллера в режим AHCI в BIOS Setup на уже установленной ОС, как Windows, так и Linux, в случае, если ОС была установлена в режиме Standard IDE - она перестанет загружаться с крахом при загрузке.

Это связано с теми, что загруженное ядро с комплектом драйверов ранней загрузки не содержит в себе драйвера AHCI, а аппаратура - более не содержит контроллера Standard IDE.

Это действие эквивалентно установке в систему платы контроллера ATA, отличного от существующего, и физического переключения загрузочного диска на эту плату.

В этом случае Windows при загрузке не найдёт загрузочный диск и аварийно остановится с BSOD STOP 0x0000007B, INACCESSIBLE_BOOT_DEVICE. Для решения проблемы необходимо до переключения установить в Windows драйвер AHCI.

В случае Linux необходимо

* всегда использовать только ядра с вмонтированным драйвером AHCI, а не кернел-модулем

* если это не так - то пересобрать загрузочный initrd, включив в него кернел-модуль AHCI

Аппаратная поддержка

[править | править код]

AHCI встроен в чипсеты Intel начиная с некоторых версий ICH6 и во все чипсеты для платформ Core i3/i5/i7. Для платформ Core AHCI был реализован в следующих контроллерах концентраторов[9]:

Примечания

[править | править код]
  1. Обер, Михаил. Страница 3: В чем разница между AHCI и NVMe?. — В: Выбираем SSD : обзор технологий на рынке и сравнительные тесты : [арх. 27 апреля 2019] // XX hardware LUXX : журн.. — 2016. — 2 января. — Электр. изд..
  2. Intel Matrix Storage Technology — Changing and/or choosing Serial ATA Modes Архивная копия от 21 апреля 2008 на Wayback Machine // Intel, Inc.  (англ.)
  3. UniATA - Universal ATA driver for Windows. Дата обращения: 25 июля 2012. Архивировано 13 апреля 2020 года.
  4. 1 2 Alter (Александр А. Телятников). UniATA Universal ATA driver for Windows. Alter.Org.UA (3 апреля 2019). Дата обращения: 25 июля 2012. Архивировано 13 апреля 2020 года.
  5. Serial ATA (SATA) Linux hardware/driver status report (англ.). Serial ATA (SATA) for Linux. Dunvegan Media. Дата обращения: 27 апреля 2019. Архивировано 12 марта 2007 года.
  6. Changing the ATA Drive setting in System Bios causes reboot loop on Windows 8 : KB2751461 : [арх. 5 июня 2013] // Microsoft Knowlege Base. — 2012. — 2 ноября.
  7. KB922976, 2013.
  8. Praveen Veerapur. How do I change Windows XP to use AHCI disk mode rather than IDE mode for Dual boot? Replied on november 25, 2012. Microsoft Community. Дата обращения: 1 июля 2013. Архивировано 30 ноября 2020 года.
  9. Технология хранения Intel Rapid. Поддерживаемые Наборы микросхем для AHCI. Intel Corporation. Дата обращения: 5 января 2014. Архивировано 24 сентября 2015 года.

Ссылки

[править | править код]