Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В вычислении , Intel «S Расширенный программируемый контроллер прерываний ( APIC ) представляет собой семейство контроллеров прерываний . Как следует из названия, APIC более продвинут, чем Intel 8259 Programmable Interrupt Controller (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 .

Обзор [ править ]

В системе 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. [1]

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

Дискретный APIC [ править ]

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

В многопроцессорной системе 486 каждый процессор должен был быть сопряжен со своим собственным 82489DX; кроме того, дополнительный 82489DX должен был использоваться в качестве 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 без тиков . Эта необязательная, но стандартная функция появилась в версии 2.6.18. Когда он включен на компьютере с таймером APIC, ядро ​​не использует программируемый интервальный таймер 8253 для хронометража. [12] В документе VMware отмечается, что «программное обеспечение не имеет надежного способа определения его частоты. Как правило, единственный способ определить частоту локального таймера APIC - это измерить ее с помощью таймера PIT или CMOS, что дает только приблизительный результат. . " [13]

I / O APIC [ править ]

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

Согласно тесту Intel 2009 года с использованием Linux , 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] [21] AMD анонсировала аналогичную технологию под названием AVIC , [22] [23] она доступна в семействе 15h моделей процессоров 6Xh (Carrizo) и новее. [24]

Проблемы [ править ]

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

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

Конкурс [ править ]

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

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

См. Также [ править ]

  • Intel 8259
  • Программируемый контроллер прерываний (ПОС)
  • Межпроцессорное прерывание (IPI)
  • Прерывать
  • Обработчик прерывания
  • Задержка прерывания
  • Прерывания, сигнализируемые сообщениями (MSI)
  • Немаскируемое прерывание (NMI)

Ссылки [ править ]

  1. ^ Спецификация Intel MultiProcessor , версия 1.4, стр. 3-5, май 1997 г.
  2. ^ Спецификация Intel MultiProcessor , версия 1.4, стр. 1-4, май 1997 г.
  3. ^ a b Бадри Рам (2001). Adv Microprocessors Interfacing . Тата Макгроу-Хилл Образование. п. 314. ISBN 978-0-07-043448-6.
  4. ^ http://people.freebsd.org/~fsmp/SMP/papers/apicsubsystem.txt
  5. ^ Спецификация Intel MultiProcessor, версия 1.4, стр. 5-3, май 1997 г.
  6. ^ Скотт М. Мюллер (2011). Модернизация и ремонт ПК (20-е изд.). Que Publishing. п. 242. ISBN. 978-0-13-268218-3.
  7. ^ a b c Уве Вальтер, Винсент Оберле Поддержка таймера с точностью до μ секунды для ядра Linux
  8. ^ "Центр разработки оборудования Windows" . msdn.microsoft.com .
  9. ^ a b Джеймс Коулман, Уменьшение задержки прерывания за счет использования прерываний , сигнализируемых сообщениями , стр. 10-11
  10. ^ Рекомендации по поддержке мультимедийного таймера , 20 сентября 2002 г.
  11. ^ Windows 8 и таймер APIC. Архивировано 22 февраля 2014 г. на Wayback Machine.
  12. ^ «База знаний VMware» . kb.vmware.com .
  13. ^ Учет времени в виртуальных машинах VMware (для VMware vSphere 5.0, Workstation 8.0, Fusion 4.0) , стр.
  14. ^ a b «Центр ресурсов и дизайна для разработки с Intel» . Intel .
  15. ^ Джеймс Коулман, Сокращение задержки прерывания за счет использования прерываний , сигнализируемых сообщениями , стр. 19
  16. ^ «Intel Nehalem mit X2APIC - Расширенная архитектура xAPIC (Bild 27/27) - ComputerBase» . www.computerbase.de .
  17. ^ "Re: [Qemu-devel] [Вопрос], почему x2apic по умолчанию установлен без поддержки хоста" . lists.gnu.org .
  18. ^ "[Qemu-devel] [PATCH] target-i386: включить x2apic по умолчанию при более поздних обновлениях" . lists.nongnu.org .
  19. ^ http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-intel-vt-feat-nakajima.pdf
  20. ^ «Тестирование производительности виртуализации APIC и Iozone * - Программное обеспечение Intel®» . software.intel.com .
  21. ^ http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/xeon-e5-4600-v2-brief.pdf
  22. ^ Вэй Хуанг, Введение в AMD Advanced Virtual Interrupt Controller , XenSummit 2012
  23. ^ http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-interrupt-virt-kvm-roedel.pdf
  24. ^ «[Xen-devel] [RFC PATCH 0/9] Представьте AMD SVM AVIC» . www.mail-archive.com .
  25. ^ "Определение OpenPIC из энциклопедии журнала ПК" . Pcmag.com. 1994-12-01 . Проверено 11 ноября 2011 .
  26. Брук Кротерс (20 марта 1995 г.). AMD и Cyrix предлагают альтернативные спецификации SMP . InfoWorld . п. 8. ISSN 0199-6649 . 
  27. Андре Д. Бальса, примечание к «Linux Benchmarking: Part III - Interpreting Benchmark Results», опубликованное в выпуске 24 Linux Gazette, январь 1998 г.
  28. ^ IBM Multiprocessor Interrupt Controller. Книга данных, заархивированная 23 февраля 2014 г. на Wayback Machine
  29. ^ Средство оценки TTAP Arca Systems Распределенная система RS / 6000 корпорации IBM, работающая под управлением AIX версии 4.3.1. Оценка безопасности C2 TCSEC , стр. 29
  30. Сингх, Амит (13 октября 2006 г.). Загляните внутрь двухпроцессорного Power Mac на базе G5 - через базу данных informIT.
  31. ^ Примечание разработчика Power Mac G5 (устаревшая версия) , стр. 26 год

Дальнейшее чтение [ править ]

  • IA-32 Руководство разработчика программного обеспечения для архитектуры Intel, том 3A: Руководство по системному программированию, часть 1, глава 10 .

Внешние ссылки [ править ]

  • Спецификация архитектуры Intel 64 x2APIC (PDF)
  • Более подробную информацию об архитектуре Intel x2APIC можно найти в Руководствах разработчика программного обеспечения для архитектур Intel 64 и IA-32.