У меня есть коробка Ubuntu с ядром 3.2, ЦП с 2 ядрами и карта CAN (Controller Area Network) на базе контроллера SJA1000, подключенного через шину PCI.
Тестирую приемные возможности карты. Он может обрабатывать около ~ 4000 пакетов в секунду, соответствующее прерывание также генерируется ~ 4000 раз в секунду (как показывает / proc / interrupts), и это не вызывает загрузки процессора в системе. Однако, если я создаю искусственную загрузку процессора с помощью команды стресса:
chrt --idle 0 stress -c 2
прерывания больше не возникают, и поэтому сообщения не принимаются.
Почему загрузка процессора препятствует аппаратным прерываниям и что с этим можно сделать?
Могут быть некоторые настройки BIOS, которые можно регулировать, но потребуется дополнительная информация, чтобы точно знать, какие настройки окажут наибольшее влияние.
В прерывания необходимы для выхода из состояния HLT упомянутый в этом ответе кажется интересным и, возможно, связанным? В зависимости от характера стрессовой нагрузки и наличия гиперпоточность включена в системе некоторые из «виртуальных» процессоров, которые добавляются с гиперпоточностью, вероятно, могут быть помещены в HLT
состояние до тех пор, пока уровни нагрузки не будут снижены, и возможно, что оборудование может игнорировать прерывания для процессов, запущенных на этих процессорах.
Низкоуровневые конфигурации оборудования в BIOS и ядре ОС могут иметь огромное влияние на многие аспекты производительности. Проверка того, что ваша система настроена для правильной работы с надстройками (графикой, коммуникациями и т. Д.) Любого типа, может стать серьезной проблемой. Дополнительные сведения о физическом оборудовании и настройках ядра, а также любые дополнительные журналы, такие как журнал событий сервера / системы (SEL) или запись данных датчика (SDR), будут полезны для дальнейшей диагностики такой проблемы с оборудованием низкого уровня, как эта.
SEL и SDR доступны на большинстве современных серверов, и к ним можно получить доступ, используя ipmitool или множество других инструментов с открытым исходным кодом и проприетарных / поставщиков, предоставляемых для внутриполосного и внешнего управления сервером.
Я подозреваю, что происходит то, что нагрузка на ЦП блокируется из-за прерываний, обслуживаемых ЦП.
Использовать itop чтобы увидеть, что происходит на самом деле. Результат этого поможет лучше понять вашу проблему.