Расширенный программируемый контроллер прерываний

редактировать

В вычислениях, Усовершенствованный программируемый контроллер прерываний Intel (APIC ) - это семейство контроллеров прерываний . Как следует из названия, APIC является более продвинутым, чем Intel 8259 программируемый контроллер прерываний (PIC), в частности, позволяющий создавать многопроцессорные системы. Это один из нескольких архитектурных проектов, предназначенных для решения проблем эффективности маршрутизации прерываний в многопроцессорных компьютерных системах.

APIC - это конструкция с разделенной архитектурой, с локальным компонентом (LAPIC), обычно интегрированным в сам процессор, и дополнительным APIC ввода-вывода на системной шине. Первым APIC был 82489DX - это был дискретный чип, который функционировал как локальный APIC, так и как APIC ввода-вывода. 82489DX позволил построить симметричные многопроцессорные (SMP) системы с процессорами Intel 486 и более ранними Pentium ; например, эталонная двусторонняя система 486 SMP использовала три микросхемы 82489DX, две в качестве локальных APIC и одна в качестве APIC ввода-вывода. Начиная с процессора P54C, локальная функциональность APIC была интегрирована в микросхему процессоров Intel. Первым специализированным APIC ввода-вывода был Intel 82093AA, который был предназначен для систем на базе PIIX3.

Содержание
  • 1 Обзор
  • 2 Дискретный APIC
  • 3 Интегрированные локальные APIC
    • 3.1 Таймер APIC
  • 4 APIC ввода / вывода
  • 5 Вариантов
  • 6 Проблемы
  • 7 Конкуренция
  • 8 См. Также
  • 9 Ссылки
  • 10 Дополнительная литература
  • 11 Внешние ссылки
Обзор

В системе Intel APIC есть два компонента: локальный APIC (LAPIC) и APIC ввода-вывода. В каждом ЦП в системе есть один LAPIC. В самой первой реализации (82489DX ) LAPIC был дискретной схемой, противоположной ее последующей реализации в кристалле процессоров Intel. Обычно для каждой периферийной шины в системе используется один APIC ввода-вывода. В исходной конструкции системы LAPIC и APIC ввода / вывода были соединены специальной шиной APIC. Более новые системы используют системную шину для связи между всеми компонентами APIC.

Каждый APIC, будь то отдельный чип или интегрированный в CPU, имеет регистр версии, содержащий четырехбитный номер версии для его конкретной реализации APIC. Например, 82489DX имеет номер версии APIC 0, а версия 1 была назначена первому поколению локальных APIC, интегрированных в процессоры Pentium 90 и 100.

В системах, содержащих 8259 PIC, 8259 может быть подключен к LAPIC в системном процессоре начальной загрузки (BSP), или к одному из APIC ввода / вывода системы, или к обоим. Однако логически 8259 подключается только один раз в любой момент времени.

Дискретный APIC

Микросхема Intel APIC первого поколения, 82489DX, которая предназначалась для использования с Intel 80486 и более ранними процессорами Pentium, на самом деле является внешним локальным и I / O APIC в одной цепи. Спецификация Intel MP 1.4 называет его «дискретным APIC» в отличие от «интегрированного APIC», присутствующего в большинстве процессоров Pentium. 82489DX имел 16 линий прерывания; у него также была особенность, заключающаяся в том, что он мог терять некоторые прерывания ISA.

В многопроцессорной системе 486 каждый процессор должен был быть сопряжен со своим собственным 82489DX; кроме того, дополнительный 82489DX должен был использоваться в качестве APIC ввода / вывода. 82489DX не мог эмулировать 8259A (XT-PIC), поэтому их также пришлось включить в качестве физических микросхем для обратной совместимости. 82489DX был упакован как 132-контактный PQFP.

Интегрированные локальные APIC

Локальные APIC (LAPIC) управляют всеми внешними прерываниями для определенного процессора в системе SMP. Кроме того, они могут принимать и генерировать межпроцессорные прерывания (IPI) между LAPIC. LAPIC могут поддерживать до 224 используемых векторов прерывания от APIC ввода-вывода. Номера векторов от 0 до 31, от 0 до 255, зарезервированы для обработки исключений процессорами x86.

Все процессоры Intel, начиная с микроархитектуры P5 (P54C ), имеют встроенный локальный APIC. Однако, если локальный APIC отключен в процессоре P5, его нельзя повторно включить программно; это ограничение больше не существует в процессорах P6 и более поздних версиях. В однопроцессорных системах главное преимущество локального APIC состоит в том, что карты PCI больше не нуждаются в сопоставлении прерываний с прерываниями ISA, но могут использовать виртуальные IRQ PCI выше 15, что приводит к меньшему количеству конфликтов и лучшему производительность.

В семействе операционных систем Microsoft Windows XP была первой, которая должным образом использовала виртуальные IRQ, предоставляемые локальным APIC, с некоторой частичной поддержкой присутствует в Windows 2000. В Windows 2000 распространение прерываний карты PCI на виртуальный IRQ происходит только в том случае, если машина также имеет APIC ввода-вывода. Microsoft обвинила свою реализацию Windows 2000 в информации, которую они получили от Intel, якобы обещавшей, что все будущие системы будут также содержать APIC ввода-вывода, чего, оглядываясь назад, не произошло. (Документ Microsoft того времени даже утверждал, что «без APIC ввода-вывода в системе локальные APIC бесполезны. В такой ситуации Windows 2000 должна вернуться к использованию PIC 8259».) Внезапное широкое использование локальный APIC с Windows XP действительно обнаружил ряд ошибок в различных реализациях BIOS. В частности, Microsoft была вынуждена сохранить поведение стекирования PCI IRQ для любой машины с контроллером CardBus (и без APIC ввода-вывода).

Прерывания с сигнализацией сообщений (MSI) спецификаций PCI 2.2 и более поздних версий нельзя использовать без включения локального APIC. Использование MSI устраняет необходимость в APIC ввода-вывода. Кроме того, в режиме MSI поддерживается до 224 прерываний, а совместное использование IRQ не допускается.

Таймер APIC

Еще одно преимущество локального APIC заключается в том, что он также обеспечивает высокое разрешение (на порядка одной микросекунды или лучше), который можно использовать как в интервальном, так и в одноразовом режиме.

У таймера APIC были свои первоначальные проблемы с приемкой. Документ Microsoft от 2002 года (который выступал за принятие вместо него High Precision Event Timer ) критиковал таймер LAPIC за «плохое разрешение» и заявлял, что «кремниевые тактовые генераторы иногда очень глючны». Тем не менее, таймер APIC используется, например, Windows 7, когда профилирование включено, и Windows 8 во всех случаях. (До того, как Windows 8 заявила об исключительных правах на этот таймер, он также использовался некоторыми программами, такими как CPU-Z.) В Microsoft Windows таймер APIC не является общим ресурсом.

Апериодический прерывания, предлагаемые таймером APIC, используются функцией ядра Linux без тикового ядра. Эта необязательная, но стандартная функция появилась в версии 2.6.18. Когда он включен на компьютере с таймером APIC, ядро ​​не использует 8253 программируемый интервальный таймер для хронометража. В документе VMware отмечается, что «программное обеспечение не имеет надежного способа определения его частоты. Как правило, единственный способ определить частоту локального таймера APIC - это измерить ее с помощью таймера PIT или CMOS, который дает только приблизительный результат. "

APIC ввода-вывода

APIC ввода-вывода содержат таблицу перенаправления, которая используется для маршрутизации прерываний, которые он получает от периферийных шин, на один или несколько локальных APIC. Специализированный APIC ввода-вывода первого поколения, 82093AA, имел поддержку 24 линий прерывания. Он был упакован как 64-контактный PQFP. 82093AA обычно подключается к PIIX3 и использует свои интегрированные устаревшие PIC 8259.

Согласно тесту Intel 2009 года с использованием Linux, APIC ввода-вывода сокращает задержку прерывания почти в три раза по сравнению с эмуляцией 8259 (XT-PIC), в то время как использование MSI снизило задержку еще больше, почти в семь раз по сравнению с базовым уровнем XT-PIC.

Варианты

xAPIC был представлен вместе с Pentium 4, а x2APIC - это последнее поколение программируемых контроллеров прерываний Intel, представленных с микроархитектурой Nehalem в ноябре 2008 года. Улучшения x2APIC касаются количества поддерживаемых процессоров и производительности интерфейса.

x2APIC теперь использует 32 бита для адресации ЦП, что позволяет адресовать до 2–1 ЦП с использованием режима физического назначения. Режим логического назначения теперь работает по-другому и вводит кластеры; в этом режиме можно адресовать от 2 до 16 процессоров. Архитектура x2APIC также обеспечивает режимы обратной совместимости с исходной архитектурой Intel APIC (представленной с Pentium /P6 ) и с архитектурой xAPIC (представленной с Pentium 4 ).

Усовершенствованный интерфейс уменьшает количество необходимых обращений к регистру APIC для отправки межпроцессорных прерываний (IPI). Благодаря этому преимуществу KVM может эмулировать и эмулирует x2APIC для старых процессоров, которые его физически не поддерживают, и эта поддержка предоставляется из QEMU, начиная с Conroe и даже для процессоров AMD Opteron серии G (ни один из которых не поддерживает x2APIC).

APICv - это торговая марка Intel для поддержки аппаратной виртуализации, направленной на сокращение прерывайте накладные расходы в гостях. APICv был представлен в серии процессоров Ivy Bridge-EP, которые продаются как Xeon E5-26xx v2 (запущен в конце 2013 года) и как Xeon E5-46xx v2 (запущен в начале 2014 года). AMD анонсировала аналогичную технологию под названием AVIC, это доступно семейство 15h моделей с процессорами 6Xh (Carrizo) и новее.

Проблемы

Есть количество известных ошибок в реализациях систем APIC, особенно в отношении того, как подключен 8254. Неисправные BIOS могут неправильно настроить маршрутизацию прерываний или предоставлять неверные таблицы ACPI и таблицы Intel MultiProcessor Specification (MPS).

APIC также может быть причиной сбоя системы, если операционная система не поддерживает его должным образом. В более старых операционных системах часто приходилось отключать I / O и локальные APIC. Хотя это больше невозможно из-за преобладания симметричных многопроцессорных и многоядерных систем, ошибки во встроенном ПО и операционных системах теперь встречаются редко.

Competition

AMD и Cyrix однажды предложили в чем-то похожую по назначению архитектуру OpenPIC, поддерживающую до 32 процессоров; примерно в 1995 году она имела, по крайней мере, декларативную поддержку со стороны IBM и Compaq. Однако материнская плата x86 с OpenPIC не была выпущена. После провала OpenPIC на рынке x86 AMD лицензировала Intel APIC для своих процессоров AMD Athlon и более поздних версий.

Однако IBM разработала свой Многопроцессорный контроллер прерываний (MPIC) на основе спецификаций регистров OpenPIC. MPIC использовался в проектах на основе PowerPC, включая разработки IBM, например, в некоторых системах RS / 6000, но также и Apple, вплоть до их Power Mac G5.

См. Также

.

Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-10 02:09:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте