Назад | Перейти на главную страницу

Связь прерывания Linux

У нас есть HP DL980 под управлением SuSE Linux Enterprise Server 11 sp2.

На машине установлена ​​цифровая карта ввода-вывода PCIe, которая используется для отправки тактового сигнала для синхронизации с другими машинами.

Если мы сделаем верхняя, один из процессов отображается с помощью "команды" [irq / 28-pci7230] и верхняя показывает, что этот процесс выполняется на CPU8. Мы знаем pci7230 это цифровая карта ввода-вывода. Если я тогда cat / proc / interrupts, это показывает все прерывания на CPU0.

Кто-нибудь может объяснить, что здесь происходит? У меня создалось впечатление, что запись в верхняя показывал, что прерывание обрабатывается CPU8, но / proc / interrupts кажется, предполагает иное.

Вы путаете верхнюю половину прерывания с нижней половиной. Совершенно нормально, что верхняя половина прерывания выполняется на другом ядре, нежели нижняя половина. Когда происходит аппаратное прерывание, вы находитесь в каком бы то ни было контексте. Очень важно освободить этот контекст как можно скорее, чтобы не захватить случайную, возможно, важную работу.

«Linux (как и многие другие системы) решает эту проблему, разделяя обработчик прерывания на две половины. Так называемая верхняя половина - это процедура, которая фактически реагирует на прерывание, то есть то, которое вы регистрируете с помощью request_irq. Нижняя половина - это процедура который запланирован верхней половиной для выполнения позже, в более безопасное время. Большая разница между обработчиком верхней половины и нижней половиной заключается в том, что все прерывания разрешены во время выполнения нижней половины, поэтому он выполняется в более безопасном В типичном сценарии верхняя половина сохраняет данные устройства в буфер для конкретного устройства, планирует свою нижнюю половину и завершает работу: эта операция выполняется очень быстро. Нижняя половина затем выполняет любую другую работу, которая требуется, например, процессы пробуждения, запуск другой операции ввода-вывода и т. д. Эта настройка позволяет верхней половине обрабатывать новое прерывание, в то время как нижняя половина все еще работает ». - Верхняя и нижняя половины

Сами по себе прерывания не планируются - прерывание приходит, когда приходит. В [irq/28-pci7230] поток ядра должен делать «настоящую работу».