Все терминальные окна внезапно исчезают в Linux

Извините заранее за стену текста. У меня проблема, которая оставляет меня с очень немногими подсказками относительно того, что могло бы продолжаться. Кроме того, я прошу прощения, если ServerFault не является идеальным местом для этого вопроса, но я не думаю, что StackOverflow будет уместным, потому что это не проблема для моего кода как такового, так как я просто перегружаю систему как-то с моей настройкой теста.

Фон

Я работаю над драйвером ядра для платы PCIe. Машина, на которой я работаю, имеет около 24 ядер и довольно большой объем оперативной памяти. Это работает RHEL 5.7 с ядром Linux 2.6.18. Извините, я не знаю точных технических характеристик, потому что это не имело значения до сих пор, и я не думал проверять, прежде чем уйти с работы сегодня. Это машина для разработки, и мой драйвер (и связанные с ним утилиты тестирования) - единственное, что работает на нем. Я не буду вдаваться в подробности об устройстве или драйвере, потому что они не являются причиной проблемы, но в основном устройство имеет 4 отдельных последовательных интерфейса RS-232, и мой драйвер создает четырехсимвольные устройства с соответствующими узлами устройства в /dev/. Драйвер также создает многочисленные атрибуты sysfs. Некоторые из атрибутов предназначены для отображения / настройки различных регистров на плате, а другие атрибуты являются фактическими данными телеметрии, которые анализируются из данных, полученных на одном из последовательных портов.Изменить: Если подумать, атрибуты sysfs данных телеметрии создаются и управляются через hwmonAPI ядра. Не уверен, что это как-то связано с этим, но на данный момент я понятия не имею, какие детали могут оказаться важными.

В попытке подчеркнуть водителя и заставить все работать на максимуме, я открыл множество окон терминала: четыре работающих окнаhexdump на каждом из символьных устройств еще четыре окна непрерывно выгружают содержимое атрибутов sysfs, представляющих регистр устройства для каждого из последовательных портов, и другое окно, непрерывно выгружающее связанные с телеметрией атрибуты sysfs. У меня тоже было окно работает top и еще один бегwatch 'dmesg | tail -40'чтобы просмотреть любую отладочную информацию, которую генерирует мой драйвер (что не так уж много - просто такие вещи, как открытие / закрытие chardevs, любые ошибки и т. д.).

проблема

Примерно через 15-20 минут работы ВСЕ окна моего терминала просто внезапно исчезают, все сразу. Нет ошибок всплывающих окон иdmesgничего не показывает, кроме моего драйвера, сообщающего, что символьные устройства были закрыты. Система остается стабильной. Я могу открывать новые окна и т. Д. И мой водитель, кажется, просто продолжает жужжать, как будто ничего не произошло. С точки зрения водителя, это выглядит как все четыреhexdumpпроцессы просто завершались одновременно, и моя функция закрытия не сообщала об ошибках.

Я искал в Google, на форумах и подобных сайтах, но пока не нашел ничего похожего на то, что вижу. Это как если бы произошла какая-то ошибка, из-за которой Linux решает, что нужно убить все мои процессы одновременно. Я думал, возможно, какой-то тип исчерпания ресурсов, например, память, файловые дескрипторы и т. Д., Но такие утилиты, как top, vmstat,lsof,iostat(не уверен, как это относится к чему-либо, но я все равно проверил), похоже, ничего необычного не видно. Система имеет что-то около 20 процессорных ядер и объем оперативной памяти, и, несмотря на все это, она вряд ли сможет потеть. То есть, пока все мои процессы просто не умирают.

Я не знаю, что делать дальше. Я думаю, что, может быть, мониторинг нескольких дюжин атрибутов sysfs одновременно, дамп их всех настолько быстро, насколько это возможно, может не быть тем, для чего был разработан sysfs, но система, похоже, не дает мне никаких признаков того, что есть проблема с этим и мой драйвер, похоже, без проблем справляется с постоянным натиском вызовов sysfs "show", при этом все же удается не пропускать такт с символьными устройствами (все данные выглядят хорошо во всем).

Еще одна вещь, которую я должен упомянуть (хотя я не уверен, насколько это может быть актуально), это то, что я попробовал это в немного другой конфигурации, где на двух из четырех последовательных портов были петлевые разъемы, и вместо того, чтобы работатьhexdumpна этих двухсимвольных устройствах я запустил свою собственную утилиту для проверки частоты ошибок по битам. В общем, я пробовал это 4 раза, и результат был одинаковым каждый раз. Примерно через 15 минут (дайте или возьмите 5 минут) все окна терминала закроются все сразу, драйвер продолжит работать просто отлично, и абсолютно ничего необычного в выводе dmesg.

Есть идеи, что может вызвать что-то подобное?

TL; DR: Все мои оконные окна спонтанно закрываются, без явного указания на то, что пошло не так.Система остается стабильной, и ничего необычного в выводе dmesg.Это на RHEL 5.7.

2 ответа

Решение

Какой именно терминал вы используете? Вы знаете, что некоторые из причудливых графических терминалов, включенных в менеджеры рабочего стола, на самом деле являются многопоточными процессами. Таким образом, существует одно приложение-контейнер, которое содержит все дочерние терминалы. Это используется для предоставления вам функций, таких как окно с терминалами во вкладках.

Если в одном терминале есть какая-то ошибка, которая приводит к сбою главного процесса, вы теряете все. Вы можете попробовать использовать xterm вместо любого терминала, который вы использовали. Или убедитесь, что вы вызываете свой терминал таким образом, что каждый из них является отдельным процессом, см. Справочную страницу для вашего терминала.

Проверять /var/log/ Прочитайте каждый лог-файл, чтобы узнать время, аналогичное моментам закрытия терминалов.

Если вы не можете найти там ничего полезного или связанного с этим, попробуйте другое терминальное решение, например, вместо kconsolexterm

В качестве альтернативного тестирования увеличьте размер буфера самого терминала. (в зависимости от того, что именно вы используете, может быть немного сложнее, но Google должен помочь)

У меня была похожая проблема несколько лет назад, когда kconsole больше не отображала данные во время работы tail -f. Для меня это оказалось ошибкой буфера.

Другие вопросы по тегам