Введение
Тип компьютерного аппаратного прерывания
Прерывания с сигналом сообщений (MSI) — это метод сигнализации прерываний, использующий специальные сообщения в полосе пропускания для замены традиционных внеполосных сигналов на выделенных линиях прерываний. Хотя прерывания с сигналом сообщений сложнее реализовать в устройстве, они обладают значительными преимуществами по сравнению с внеполосной сигнализацией прерываний на основе контактов, например, улучшенной производительностью обработки прерываний. Это отличается от традиционных механизмов прерываний, таких как устаревшая система запросов прерываний (IRQ). Прерывания с сигналом сообщений поддерживаются в шине PCI начиная с версии 2.2 и в последующих версиях шины PCI Express. Некоторые архитектуры, отличные от PCI, также используют прерывания с сигналом сообщений.
Обзор
Традиционно устройство имеет линию прерывания (пин), которую оно активирует, когда хочет сообщить о прерывании в хост-окружении. Эта традиционная форма сигнализации прерывания является внеполосной формой управления, поскольку использует выделенный канал для передачи такой управляющей информации, отдельно от основного канала данных. MSI заменяет эти выделенные линии прерывания внутриполосной сигнализацией, обмениваясь специальными сообщениями, указывающими на прерывания по основному каналу данных. В частности, MSI позволяет устройству записывать небольшой объем данных, описывающих прерывание, в специальный адрес памяти, отображенный в область ввода/вывода, а затем чипсет доставляет соответствующее прерывание процессору. Распространенное заблуждение относительно MSI заключается в том, что оно позволяет устройству отправлять данные процессору как часть прерывания. Данные, передаваемые в рамках транзакции записи в память, используются чипсетом для определения того, какое прерывание нужно активировать на каком процессоре; эти данные недоступны устройству для передачи дополнительной информации обработчику прерывания.
Преимущества
Несмотря на то, что реализация в устройстве сложнее, прерывания, сигнализируемые сообщениями, имеют ряд значительных преимуществ по сравнению с сигнализацией прерываний внеполосным способом, основанной на контактах. С точки зрения конструкции, меньшее количество контактов упрощает, удешевляет и повышает надежность разъема. Хотя это не дает преимуществ стандартному разъему PCI, PCI Express использует эту экономию. MSI увеличивает количество возможных прерываний. В то время как традиционный PCI был ограничен четырьмя прерываниями на карту (и, поскольку они были общими для всех карт, большинство используют только одно), прерывания, сигнализируемые сообщениями, позволяют использовать десятки прерываний на карту, когда это необходимо. Чтобы избежать этой ситуации гонки, обработчики прерываний должны были считывать данные с устройства, чтобы убедиться, что запись DMA завершена. Это чтение приводило к умеренному снижению производительности. Запись MSI не может обогнать запись DMA, поэтому ситуация гонки устранена.
because they were shared among all cards, most are using only one), message signalled interrupts allow dozens of interrupts per card, when that is useful. To prevent this race, interrupt handlers were required to read from the device to ensure that the DMA write had finished. This read had a moderate performance penalty. An MSI write cannot pass a DMA write, so the race is eliminated.
Типы МСИ
PCI определяет два необязательных расширения для поддержки прерываний, инициируемых сообщением – MSI и MSI-X. PCI Express определяет собственный механизм, основанный на сообщениях, для эмуляции устаревших прерываний PCI.
MSI
MSI (впервые определено в PCI 2.2) позволяет устройству выделять 1, 2, 4, 8, 16 или 32 прерывания. Устройство программируется с адресом, по которому необходимо производить запись (обычно это контрольный регистр в контроллере прерываний), и 16-битным словом данных для его идентификации. Номер прерывания добавляется к слову данных для идентификации конкретного прерывания.
MSI-X
MSI X (впервые определенный в PCI 3.0) позволяет устройству выделять до 2048 прерываний. Единственный адрес, использовавшийся в оригинальном MSI, оказался недостаточным для некоторых архитектур. В частности, он затруднял точную маршрутизацию отдельных прерываний к разным процессорам, что полезно в некоторых высокоскоростных сетевых приложениях. MSI X обеспечивает возможность использования большего количества прерываний, каждому из которых соответствует отдельный целевой адрес и слово данных. Устройства с поддержкой MSI X не обязаны поддерживать все 2048 прерываний. Опциональные функции MSI (64-битная адресация и маскирование прерываний) являются обязательными для MSI X.
Эмуляция прерываний PCI Express
PCI Express не имеет физических линий прерываний, но эмулирует 4 физические линии прерываний PCI посредством специальных сообщений PCI Express, таких как Assert INTA и Deassert INTC. Поскольку этот механизм основан на сообщениях (на уровне PCI Express), он предоставляет некоторые, но не все преимущества механизма MSI в PCI: 4 виртуальные линии на устройство больше не являются общими для шины (хотя контроллеры PCI Express все еще могут объединять устаревшие прерывания внутри), и изменения прерываний больше не подвержены возникновению гонок данных. PCI Express позволяет устройствам использовать эти устаревшие сообщения прерываний, обеспечивая программную совместимость с драйверами PCI, но они также обязаны поддерживать MSI или MSI X в PCI-слое.
Системы x86
На системах Intel, LAPIC должен быть включен для работы MSI/MSI X для PCI (и PCI Express), даже на однопроцессорных (одноядерных) системах. В этих системах обработка MSI осуществляется путем непосредственной записи вектора прерывания в LAPIC процессора/ядра, которому необходимо обработать это прерывание. Intel LAPIC 2009 года поддерживали до 224 прерываний, основанных на MSI.