Это перевод, но тем не менее, да, подробное описание, интересные инструменты. Хоть это и не общеприменимый гайд, а конкретный пример, все равно полезно.
Да. Только она, на самом деле, не всегда жизненно интересна.
Тут дядька поупражнялся-поупражнялся, да в итоге и жахнул kill -9. Я могу сделать (и скорее всего сделал бы) ровно то же самое и без шатаний по стеку ядра. Типа, скальпель не помог, давай кувалду!
Но в случае удалённой отладки/разработки с целью устранения багов, подход весьма хорош!
Спасибо, статья хорошая. А вот что виновато nfs я понял сразу после того, как увидел 'D'. Подвисающий неубиваемый процесс, который ничем не занимается может заниматься только одним — тупить в цветоче в NFS. Все остальные сетевые файловые системы менее процессораздирающие.
Залипания из-за глюков на диске обычно очень хорошо видны — страшный срач в dmesg'е. Другие сетевые fs тоже обычно имеют явные средства диагностики. Только nfs отличается молчаливым режимом «японского партизана, сражающегося 40 лет спустя после капитуляции страны».
А с какой стороны копать, если приложение автоматически закрывается и в консоль печатается слово Killed?
Я купил NAS: Seagate Central
Внутри оказался Cavium Econa CNS3420 SoC
Есть доступ по SSH, root. Установлен Montavista Linux
Более опытные чем я люди с компилированием софта под этого зверя обломались
Я нашел там mono — проверил, программы на .net 2 нормально исполняются :)
Есть python… много чего есть. Но gcc нет :(
Ищите тулчейн для вашей железки. Скорее всего где-нибудь на форумах поддержки нароете!
Посмотрите uname -a — очень часто в отпечатке ядра остаётся «автограф» от системы, где его собирали (вроде red hat, debian или ubuntu). А потом гуглите по сочетанию имени железки + найденного отпечатка + слов вроде «toolchain» или «cross toolchain».
Универсального рецепта нет!
Можете подсказать, имеются ли готовые утилиты для лёгкого профилирования всего ядра Linux, а не конкретных модулей/процессов?
Интересуют решения, работающие в x86_64 архитектуре.
Пример, чего хотелось бы видеть в качестве output'а утилиты:
C этим на linux проблема. Я работаю с HP-UX, там есть такая профилировка. По окончании каждого тайм слайса генерится per cpu эвент и в ring buffer скидывается чем занимался процессор (PID, функция ядра, стек !). Очень полезная функция для изучения чем занимаются процессоры. На Linux, насколько знаю, код в ядре для реализации есть, но с утилитами дефицит.
Везёт вам! Я вот всё не дойду до того чтобы perf посмотреть.
Походу придётся адовыми хаками на nmi_timer вешаться и через dmesg, через dmesg, да башем агрегировать. :)
Потому что strace'у нужно переключать контекст на трассируемую программу. Потому что в Linux нет трассировщика, который бы получал данные о syscall'ах напрямую из ядра. В *BSD есть ktrace для этих целей. Задачи из статьи им решаются очень быстро и без риска уронить процесс.
Однако, много интересного узнал о /proc. Надо будет сравнить с FreeBSD.
Изучаем внутреннюю кухню ядра Linux с помощью /proc для быстрой диагностики и решения проблем