Написание профилировщика режима ядра для процессов в Python - PullRequest
2 голосов
/ 28 мая 2009

Я хотел бы получить руководство по написанию «профилировщика процесса», который работает в режиме ядра. Я спрашиваю о профилировщике режима ядра, потому что я запускаю множество приложений и не хочу, чтобы мой профилировщик был выгружен.

Когда я сказал «профилировщик процесса», я имел в виду нечто, что могло бы контролировать использование ресурсов процессом. включая использование потоков и их статистику.

И я хочу написать это на python. Укажите мне на некоторые модули или полезный ресурс.

Пожалуйста, дайте мне руководство / предложение для этого.

Спасибо

Edit ::: Я хотел бы добавить, что в настоящее время мой интерес - писать только для Linux. Однако после того, как я его построил, мне придется поддерживать Windows.

Ответы [ 4 ]

7 голосов
/ 28 мая 2009

В Python будет очень сложно выполнить мониторинг процесса, поскольку интерпретатор python не запускается в ядре.

Я подозреваю, что есть два простых подхода к этому:

  1. используйте файловую систему / proc, если она у вас есть (вы не упоминаете свою ОС)
  2. Используйте dtrace, если у вас есть dtrace (опять же, без ОС, кто знает.)

Хорошо, после редактирования.

Во-первых, вы никак не сможете написать код, который выполняется в ядре, на python и переносим между Linux и Windows. Или, по крайней мере, если бы вы были, это был бы хак, который бы жил во славе вечно.

Тем не менее, если ваша цель заключается в обработке Python, есть много инструментов Python, доступных для получения информации от интерпретатора Python во время выполнения.

Если вместо этого вы хотите получать информацию о процессах от других процессов в целом, вам необходимо изучить опции, доступные вам в различных API-интерфейсах ОС. В Linux есть файловая система / proc; это полезное начало. Я подозреваю, что в Windows есть похожие API, но я их не знаю.

Если вам нужно написать код ядра, вам почти наверняка понадобится написать его на C или C ++.

3 голосов
/ 29 мая 2009

не попробуйте запустить Python в пространстве ядра!

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

Опция / proc звучит хорошо.

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

http://www.pixelbeat.org/scripts/ps_mem.py считывает информацию о памяти процессов, использующих Python, через / proc / smaps , как предложил Чарли.

0 голосов
/ 29 мая 2009

Некоторые ваши комментарии к другим ответам говорят о том, что вы относительно неопытный программист. Поэтому я настоятельно рекомендую вам держаться подальше от программирования ядра, так как это очень сложно даже для опытных программистов.

Зачем вам писать что-то, что

  • - очень сложная система (просто посмотрите на существующие инфраструктуры профилирования и насколько они сложны)
  • не может быть сделано в python (я не знаю ни одного ядра, которое позволяло бы запускать python в режиме ядра)
  • уже существует ( oprofile в Linux)
0 голосов
/ 29 мая 2009

вы смотрели на PSI? (http://www.psychofx.com/psi/)

"PSI - это модуль Python, обеспечивающий прямой доступ к информации о системе и процессам в реальном времени. PSI - расширение Python C, обеспечивающее наиболее эффективный доступ к системной информации непосредственно из системных вызовов."

это может дать вам то, что вы ищете. .... или хотя бы отправная точка.


Редактировать 2014:

Я бы рекомендовал проверить psutil вместо этого: https://pypi.python.org/pypi/psutil

psutil активно поддерживается и имеет некоторые отличные функции мониторинга процесса. PSI кажется несколько мертвым (последний выпуск 2009).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...