stringtranslate.com

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

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

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

Обзор

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

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

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

Дискретный APIC

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

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

Интегрированные местные APIC

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

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

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

APIC-таймер

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

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

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

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

I/O APIC содержат таблицу перенаправления, которая используется для маршрутизации прерываний, которые он получает от периферийных шин, на один или несколько локальных APIC. Ранние I/O APIC (например, 82489DX, SIO.A и PCEB/ESC) поддерживали только 16 линий прерываний, но более поздние, такие как 82093AA (отдельный чип для PIIX3/PIIX4), поддерживали 24 линии прерываний. [9] Он был упакован как 64-контактный PQFP . [14] 82093AA обычно подключался к PIIX3 / PIIX4 и использовал его интегрированные устаревшие 8259 PIC. [14] ICH1 и Intel 815 интегрировали I/O APIC.

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

Варианты

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

Теперь x2APIC использует 32 бита для адресации ЦП, что позволяет адресовать до 2 32  − 1 ЦП с использованием физического режима назначения. Логический режим назначения теперь работает по-другому и вводит кластеры; с помощью этого режима можно адресовать до 2 20  − 16 процессоров.

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

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

Проблемы

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

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

Соревнование

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

Однако IBM разработала свой контроллер прерываний MultiProcessor Interrupt Controller (MPIC) на основе спецификаций регистра OpenPIC. [27] MPIC использовался в разработках на базе PowerPC , включая разработки IBM, например, в некоторых системах RS/6000 , [28] а также Apple, вплоть до Power Mac G5s . [29] [30]

Смотрите также

Ссылки

  1. Спецификация Intel MultiProcessor, версия 1.4, стр. 3-5, май 1997 г.
  2. Спецификация Intel MultiProcessor, версия 1.4, стр. 1-4, май 1997 г.
  3. ^ ab Badri Ram (2001). Интерфейс микропроцессоров Adv. Tata McGraw-Hill Education. стр. 314. ISBN 978-0-07-043448-6.
  4. ^ "Описание подсистемы ввода-вывода APIC". freebsd.org . Получено 14 мая 2023 г. .
  5. Спецификация Intel MultiProcessor, версия 1.4, стр. 5-3, май 1997 г.
  6. ^ Скотт М. Мюллер (2011). Модернизация и ремонт ПК (20-е изд.). Que Publishing. стр. 242. ISBN 978-0-13-268218-3.
  7. ^ abc Уве Вальтер, Винсент Оберле Поддержка μ-секундного таймера точности для ядра Linux
  8. ^ "Центр разработки оборудования Windows". msdn.microsoft.com . Июнь 2017 г.
  9. ^ Джеймс Коулман, Сокращение задержки прерывания с помощью прерываний, сигнализируемых сообщениями, стр. 10-11
  10. ^ "Руководство по обеспечению поддержки таймера мультимедиа". Microsoft . 2002-09-20. Архивировано из оригинала 2012-07-28.
  11. ^ "Windows 8 и таймер APIC". social.msdn.microsoft.com . Архивировано из оригинала 22 февраля 2014 г. Получено 14 мая 2023 г.
  12. ^ "База знаний VMware". kb.vmware.com .
  13. ^ Хронометраж в виртуальных машинах VMware (для VMware vSphere 5.0, Workstation 8.0, Fusion 4.0), стр. 8
  14. ^ ab "Центр ресурсов и дизайна для разработки с Intel". Intel .
  15. ^ Джеймс Коулман, Сокращение задержки прерывания за счет использования прерываний, сигнализируемых сообщениями, стр. 19
  16. ^ "Intel Nehalem с X2APIC - Расширенная архитектура xAPIC (изображение 27/27) - ComputerBase". www.computerbase.de .
  17. ^ "Re: [Qemu-devel] [Вопрос] почему x2apic установлен по умолчанию без host sup". lists.gnu.org .
  18. ^ "[Qemu-devel] [PATCH] target-i386: включить x2apic по умолчанию для более новых версий". lists.nongnu.org .
  19. ^ Джун Накадзима (2012). «Обзор неиспользуемых и новых функций виртуализации прерываний/APIC» (PDF) . Linux . Получено 14 мая 2023 г. .
  20. ^ «Тестирование производительности виртуализации APIC и Iozone* — программное обеспечение Intel®». software.intel.com .
  21. ^ Вэй Хуан, Введение в AMD Advanced Virtual Interrupt Controller, XenSummit 2012
  22. ^ Йорг Рёдель (август 2012 г.). "Виртуализация прерываний следующего поколения для KVM" (PDF) . Linux . Получено 14 мая 2023 г. .
  23. ^ "[Xen-devel] [RFC PATCH 0/9] Представляем AMD SVM AVIC". www.mail-archive.com .
  24. ^ "Определение OpenPIC из энциклопедии журнала PC Magazine". Pcmag.com. 1994-12-01 . Получено 2011-11-03 .
  25. Брук Крозерс (20 марта 1995 г.). «AMD, Cyrix предлагают альтернативную спецификацию SMP». InfoWorld : 8. ISSN  0199-6649.
  26. Андре Д. Бальса, примечание к статье "Linux Benchmarking: Part III -- Interpreting Benchmark Results", опубликованной в выпуске 24 Linux Gazette, январь 1998 г.
  27. ^ IBM Multiprocessor Interrupt Controller. Data Book Архивировано 23.02.2014 на Wayback Machine
  28. ^ Arca Systems TTAP Evaluation Facility IBM Corporation RS/6000 Distributed System Running AIX Version 4.3.1. TCSEC Evaluated C2 Security, стр. 29
  29. ^ Сингх, Амит (13 октября 2006 г.). Загляните внутрь двухпроцессорного Power Mac на базе G5 – через базу данных informIT.
  30. ^ Power Mac G5 Developer Note (устаревший), стр. 26

Дальнейшее чтение

Внешние ссылки