Linux nmi что это

Как работает ОС Linux nmi?

Теперь у меня возникла проблема с Linux NMI Watchdog. Я хочу использовать сторожевой таймер Linux NMI для обнаружения и восстановления ОС. Поэтому я добавляю «nmi_watchdog = 1» в grub.cfg. А затем проверьте /proc/interrupt, NMI были вызваны в секунду. Но после того, как я загрузил модуль с тупиком (двойным приобретением спин-блокировки), система полностью зависала, и ничего не происходило (никогда не паникуйте!). Похоже, что наблюдатель nmi не работает!

Затем я прочитал Documantation/nmi_watchdog.txt, в нем говорится:

Помните, что при использовании локального APIC частота прерываний NMI он генерирует, зависит от нагрузки системы. Местный сторожевой тайник APIC NMI, не имея лучшего источника, использует событие цикл unhalted.

Что означает событие цикл unhalted?

но если ваша система блокирует что-либо, кроме процессора «hlt» инструкции, сторожевой таймер будет запускаться очень скоро, как «циклы» unhalted «будет происходить каждый такт. Если он блокируется «hlt» , тогда вам не повезло — это событие не произойдет вообще и сторожевой таймер не будет.

Похоже, что сторожевой таймер не будет запускаться, если процессор выполнит команду «hlt» , затем я ищу «hlt» в «Руководстве разработчика Intel 64 и IA-32 для разработчиков архитектуры, глава 2A», он описывает следующее:

Прекращает выполнение команд и помещает процессор в состояние HALT. Включенное прерывание (включая NMI и SMI), исключение отладки, BINIT #, сигнал INIT # или сигнал RESET # возобновитьвыполнение.

Тогда я потерял.

  • Как работает ли Linux nm-сторожевой таймер?
  • Кто запускает nmi?

Моя ОС — Ubuntn 10.04 LTS, Linux-2.6.32.21, CPU Pentium 4 с двумя ядрами 3,20 ГГц.

Я не читал весь исходный код о nmi watchdog (нет времени), если я не мог понять, как работает nmi watchdog, я хочу использовать прерывание счетчика контроля производительности и прерывание между процессорами (предоставляется APIC), чтобы отправьте NMI вместо nmi watchdog.

Может кто-нибудь мне помочь? Спасибо.

ОТВЕТЫ

Ответ 1

Как я знаю, nmi_watchdog будет запускаться только для неперерывных зависаний. Я нашел пример кода google: http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html

Если ваш тупик не является прерывистым, вы можете попробовать включить sysRq для запуска некоторой трассировки (Alt-printscreen-t) или сбоя (Alt-printscreen-c), чтобы получить дополнительную информацию.

Ответ 2

Ответ зависит от вашего оборудования.

Не маскируемые прерывания (NMI) могут запускаться двумя способами: 1) когда ядро ​​достигает состояния остановки, которое не может быть прервано другим методом, а 2) с помощью аппаратного обеспечения — с помощью кнопки NMI.

На передней панели некоторых серверов Dell, например, вы увидите небольшой круг с линией зигзага внутри него. Это символ NMI. Рядом есть отверстие. Вставьте штифт, чтобы вызвать прерывание. Если ваше ядро ​​создано для его поддержки, это приведет к сбросу трассировки ядра на консоль, а затем перезагрузите систему.

Это может произойти очень быстро. Поэтому, если у вас нет консоли для сохранения вывода в файл, это может выглядеть как перезагрузка.

Источник

Русские Блоги

Linux Watchdog механизм

​ Предисловие

Сторожевой таймер — очень важный механизм системы Linux. Его цель — контролировать работу системы. В случае блокировки или сбоя он может вовремя перезапустить компьютер (в зависимости от стратегии настройки) и собирать аварийные дампы.

watchdog,Как подсказывает название, Сторожевая собака. Это означает, что есть объект, за которым наблюдают, и программа, которая наблюдает за ним.

Будь то сторожевой таймер ядра или сторожевой таймер пользовательского пространства, основная идея такова:
1. Предположим, что состояние объекта может указывать на работоспособность системы (например, количество прерываний, например метка времени / dev / watchdog);
2. Запустите сторожевую программу и регулярно наблюдайте за этим объектом (запускается внутренними или внешними часами), чтобы определить, исправна ли система, и предпринять соответствующие действия.

Watchdog имеет несколько различных механизмов реализации.Недавно я повозился с принципами работы различных механизмов в компании, провел эксперименты на лабораторных машинах и суммировал следующие два механизма:
1. kernel watchdog
2. Userland watchdog

Читайте также:  Logging to windows event viewer

Ниже мы соответственно описываем их механизмы.

цель сторожевого таймера ядра

Когда мы представляем такой Watchdog, первое, что нужно знать, это то, для чего он используется. Проще говоря, сторожевой таймер ядра используется для обнаружения зависания.

Так называемая блокировка относится к определенной части кода ядра, занимающей центральный процессор. В тяжелых случаях зависания вся система перестает отвечать. Блокировка имеет несколько характеристик:

  • Во-первых, только код ядра может вызвать блокировку, Поскольку пользовательский код может быть вытеснен, невозможно сформировать блокировку (есть только одно исключение, то есть процесс в реальном времени с приоритетом SCHED_FIFO 99, даже в пользовательском режиме, может сделать поток ядра [watchdog / x] неспособным захватить CPU. мягкая блокировка)
  • Во-вторых, код ядра должен находиться в состоянии выключенного вытеснения, поскольку Linux является ядром с вытеснением, а вытеснение запрещено только в определенных областях кода (таких как спин-блокировка), и в этих областях кода может образоваться блокировка.

Блокировка делится на два типа: мягкая блокировка и жесткая блокировка. Разница между ними состоит в том, что жесткая блокировка происходит, когда процессор экранирует прерывания. Мягкая блокировка — это ситуация, когда один ЦП всегда занят (на прерывания все еще можно реагировать).

Здесь мы сначала представим NMI.

NMI, то есть немаскируемое прерывание. Даже когда экранирование всех прерываний установлено в коде ядра, NMI нельзя экранировать.

Прерывания делятся на маскируемые прерывания и немаскируемые прерывания.

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

Но NMI другой, даже если прерывание отключено, на него можно ответить. Условиями запуска NMI обычно являются аппаратные ошибки, такие как ошибки ECC. Однако NMI также предоставляет нам механизм для выполнения некоторых аварийных операций, таких как паника ядра, через обработчик прерывания, даже если системное прерывание закрывается по ошибке.

Здесь задействованы 3 вещи: поток ядра, прерывание часов, прерывание NMI (немаскируемое прерывание).

У этих трех вещей разные приоритеты: поток ядра Сторожевой таймер пользовательского режима

Хотя сторожевой таймер ядра может обнаруживать мягкие и жесткие блокировки и принимать соответствующие меры, не все простои системы вызваны блокировкой потоков ядра, а пользовательские потоки также могут вызывать простои системы. Например, пользовательские программы могут занимать критически важные ресурсы, которые нельзя высвободить, а система слишком занята.Устали отвечать на различные прерывания, В результате не удается выполнить планировщик. Это может привести к неправильной работе системы.

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

Сторожевой таймер пользовательского режима, естественным объектом обнаружения является программа пользовательского режима (может ли она быть запланирована). Здесь, в зависимости от степени поддержки оборудования, мы делимся на сторожевой таймер оборудования и сторожевой таймер программного обеспечения. Последний называется softdog.

Необходимо дополнительно установить rpm-пакет watchdog.

Основные принципы аналогичны, а именно:
1. Запустите устройство таймера, которое может быть аппаратным устройством или устройством программного моделирования (softdog.ko). Когда устройство истечет, оно выполнит соответствующие действия (например, перезапуск системы, системная паника)
2. Мы запускаем демон пользовательского режима, процесс, называемый сторожевым таймером (/ usr / sbin / watchdog). Процесс периодически (обычно каждую секунду по умолчанию) что-то записывает на устройство таймера / dev / watchdog [x] (или / dev / watchdog1), чтобы отметку времени устройства можно было обновить без перезапуска тайм-аута. Чтобы
3. Если по какой-то причине система очень загружена, процесс сторожевого таймера не может быть выполнен, и информация не может быть записана в / dev / watchdog [x], тогда, когда таймер таймера истечет, он выполнит Соответствующее действие.

Читайте также:  Windows server 32gb ram

Далее мы продолжаем подробно объяснять использование аппаратного сторожевого таймера и softdog.

softdog

Позвольте мне сначала поговорить о softdog, потому что независимо от того, какая система Linux (если драйвер softdog.ko включен в ядро), softdog можно настроить.

Использовать softdog очень просто, достаточно:
1. Установите watchdog rpm.
2. Запустить службу softdog.
— systemctl start softdog.service

Когда мы запускаем сервис softdog, будут выполнены следующие операции:
1. modprobe softdog // Если softdog не загружен в ядре, загружаем его
2. watchdog -c /etc/softdog.conf

По умолчанию программа сторожевого таймера создает устройство (устройство таймера) с именем / dev / watchdog1 через softdog.ko и периодически записывает на него (используется для обновления метки времени).

Softdog, находящийся в ядре, будет имитировать устройство таймера (моделирование посредством прерывания часов) и выполнять соответствующую процедуру обработки прерывания.Цель этой процедуры — проверить, не истек ли таймер (т.е. / dev / watchdog1). Если истекло время, выполните соответствующее действие (по умолчанию — паника).

Умные дети заметили проблему: если система не может реагировать на прерывание часов, не работает ли softdog?

Бинго, это действительно так. Если система не может ответить на прерывание (например, прерывание отключено), программа моделирования таймера в softdog.ko не может работать и, естественно, не может ответить. Но в этом случае сторожевой таймер NMI, представленный ранее, может работать.

Кроме того, мы можем просмотреть номер устройства, соответствующий сторожевому таймеру, через / proc / devices

Как видите, softdog зарегистрировал номер устройства с основным номером 252.

hardware watchdog

После разговора о softdog давайте поговорим об аппаратном сторожевом таймере.

Аппаратный сторожевой таймер, поскольку он аппаратный, он не должен зависеть от ОС. Реализация на разных устройствах разная. В нашей лаборатории есть два пути достижения:

  1. Реализовано через BMC.
  2. Реализовано через iTCO.

Разрешите рассказать о реализации BMC.

BMC, также называемый материнским контроллером основной платы, представляет собой фоновый контроллер, встроенный в материнскую плату и не зависящий от ЦП и памяти. Система может быть включена и выключена BMC. В настоящее время обычной практикой является использование инструмента ipmi для отправки команд на BMC для достижения цели получения системной информации. Например, получить температуру процессора, статус, включение, выключение системы.

Помните, что BMC — это аппаратное устройство на материнской плате, поэтому оно не знает, какая операционная система установлена ​​на хосте. Он может только включать, выключать и отправлять сообщения прерывания, но не может напрямую запускать системную панику.

Есть два способа запустить таймер на BMC:

  1. Первый — включить таймер ОС при входе в интерфейс настроек BIOS (конкретное место настройки зависит от модели материнской платы).

После настройки система запустит аппаратный таймер (аппаратный таймер, управляемый BMC). Без запуска аппаратного сторожевого таймера он автоматически отключится и запустит сброс системы.

  1. Второй способ — запустить службу ipmidog. После установки watchdog rpm выполните следующие операции для запуска службы ipmidog:
    • systemctl start ipmidog

Чтобы понять этот механизм, давайте посмотрим, что делает системная служба ipmidog:

Здесь он проверит, существует ли / dev / watchdog0 (не совсем понятно, что это значит, многие люди в Интернете говорят, что / dev / watchdog0 и / dev / watchdog указывают на одно и то же устройство, несмотря ни на что). В противном случае загрузится ipmi_watchdog.ko. Этот модуль связывается с BMC через IPMI. Затем запустите сторожевой таймер.

По умолчанию сторожевой таймер считывает конфигурацию в /etc/watchdog.conf и по умолчанию записывает все в / dev / watchdog (используется для обновления метки времени таймера). / dev / watchdog — это аппаратное устройство с номером устройства «10, 130», которым может управлять BMC. По истечении времени ожидания оно может инициировать сброс системы (можно настроить как игнорировать).

Мы можем просмотреть конкретную информацию о таймере через ipmitool:

Здесь «Initial Countdown» — это период ожидания, установленный пользователем, а «Present Countdown» — это текущий обратный отсчет. Если «Текущий обратный отсчет» становится равным 0, то запускается «Действие таймера», то есть «Полный сброс».

Читайте также:  Windows share on linux with samba

В нормальных условиях, поскольку программа сторожевого таймера записывает в / dev / watchdog каждую секунду, разница между «Начальным обратным отсчетом» и «Текущим обратным отсчетом» не превышает 1 с. Только когда программа сторожевого таймера не может быть выполнена, «Текущий обратный отсчет» будет продолжать уменьшаться.

Помните, что ipmi watchdog не может вызвать панику, он может только перезагрузить машину.

Теперь поговорим о iTCO

Поскольку у iTCO меньше актуальной информации, я кратко ее представлю.

iTCO — это метод таймера, предоставляемый самой Intel. С точки зрения конфигурации, нет необходимости перезагружать компьютер для входа в BIOS. Он настраивает аппаратный таймер с помощью драйвера под названием iTCO_wdt. Он может обеспечивать механизм, аналогичный сторожевому таймеру ipmi, и не требует дополнительной аппаратной поддержки, такой как BMC.

unknown_nmi_panic

Это немного не по теме, unknown_nmi_panic — это параметр ядра, этот параметр не имеет прямого отношения к сторожевому таймеру, но для отладки времени простоя системы хороша паника удаленного триггера. Итак, краткое введение.

Прежде всего, почему здесь упоминается параметр ядра unknown_nmi_panic?

Когда система не работает (зависает), согласно тому, что мы говорили ранее, у нас есть сторожевой таймер ядра для обнаружения мягкой блокировки, сторожевой таймер NMI для обнаружения жесткой блокировки и сторожевой таймер для определения состояния приостановки системы в пространстве пользователя. Но это не распространяется на все зависания системы. Кроме того, при использовании softdog для мониторинга планирования пользовательских процессов это зависит от того, может ли система реагировать на прерывания; при использовании аппаратного сторожевого таймера для мониторинга планирования пользовательских процессов, когда происходит зависание, систему можно перезапустить только без запуска паники.

Поэтому мы надеемся, что существует механизм, который можно использовать во всех ситуациях (все условия зависания системы, даже при нормальной работе системы), чтобы иметь механизм, который может вручную запускать панику для сбора аварийных дампов для зависания системы. Причины анализируются.

Один из механизмов — использование NMI для запуска.

Как мы знаем ранее, NMI — это немаскируемое прерывание, то есть оно должно быть захвачено системой. Если мы установим unknow_nmi_panic в 1, это позволит подпрограмме обработки прерывания вызвать панику, когда система получит неизвестный NMI.

На материнской плате супермикро BMC может отправлять неизвестный NMI на контроллер прерываний. Это может быть достигнуто следующими способами (не все BMC поддерживают этот способ):

Приведенная выше команда ipmitool отправляется на BMC отслеживаемого хоста через другой хост. Среди них «-H» представляет собственный IP-адрес BMC для удаленного управления IPMI, которое должно гарантировать, что хост, с которого инициируется команда, подключен к LAN-порту BMC. Приведенная выше команда ipmitool заставит BMC отправить неопределенное прерывание NMI на контроллер прерываний. Когда unknown_nmi_panic установлен в 0, консоль контролируемого хоста будет печатать сообщение, указывающее, что было получено неизвестное прерывание NMI; когда unknown_nmi_panic установлен в 1, это вызовет системную панику.

Здесь следует отметить, что некоторое другое программное обеспечение для мониторинга также будет использовать неизвестный NMI (включить пользовательский обработчик прерываний NMI), поэтому при использовании этого программного обеспечения / конфигураций необходимо отключить unknown_nmi_panic.

Среди них вышеупомянутый сторожевой таймер NMI является таким механизмом.Когда nmi_watchdog установлен в 1, unknown_nmi_panic должен быть отключен. (Я экспериментировал с некоторыми моделями и не обнаружил вышеупомянутых конфликтов, но поскольку это официальная информация на сайте, ради страховки я все же пытаюсь отключить его).

Кроме того, существует программа Oprofile, которая также использует NMI в качестве программного обеспечения для мониторинга системы.При использовании Oprofile также необходимо отключить unknown_nmi_panic.

Магический ключ SysRq

Напоследок еще одно отступление, упомянем волшебный ключ SysRq.

Когда мы включаем параметр ядра sysrq (установлен в 1), мы можем управлять запуском системы или паникой с помощью Alt + SysRq + , где:
1. Alt + SysRq + c запускает панику
2. Alt + SysRq + b запускает перезагрузку.

Конечно, поскольку здесь используется клавиатура, предпосылкой ее использования является то, что система также может реагировать на прерывания клавиатуры.

Источник

Оцените статью