2015-03-30 3 views
1

Я хочу профилировать некоторые модули (например, модуль сетевой подсистемы). Можем ли мы профилировать время/cpu использование функции в модуле ядра?Профилировщики модуля ядра

Я слышал о некоторых профайлерах, таких как:

  • perf общесистемного профилирование
  • valgrind - приложения уровня

Есть ли профайлер в лучший костюм для моего случая использования выше ?

Я очень ценю ваше время, благодаря

ответ

2

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

Если вы хотите измерить реальное время, затраченное при выполнении функции, я предлагаю вам посмотреть на SystemTap:

stap -e 'global tms; 
    probe kernel.function("dev_queue_xmit") { 
     tms[cpu()] = local_clock_ns(); } 
    probe kernel.function("dev_queue_xmit").return { 
     println(local_clock_ns() - tms[cpu()]); }' 

Этот скрипт сохраняет местное время центрального процессора в наносекунд для tms ассоциативного массива на входе в функцию dev_queue_xmit(). Когда CPU покидает dev_queue_xmit(), второй зонд вычисляет дельта. Обратите внимание, что если CPU будет переключен в dev_queue_xmit(), он может отображать беспорядочные результаты.

Для измерения времени для модуля замените kernel.function("dev_queue_xmit") на module("NAME").function("*"), но присоединение ко многим функциям может повлиять на производительность. Вы также можете использовать get_cycles() вместо local_clock_ns() для получения циклов процессора.

+0

myaut, во-первых, спасибо, что поделились вашим взглядом, позвольте мне проверить это один раз. – Vasu

3

Вы были правы! Perf - инструмент для вас. Поскольку вы собираетесь профилировать модуль ядра, нет смысла использовать какие-либо инструменты пользовательской среды, такие как valgrind

Обычно при мониторинге программного обеспечения вы заботитесь о том, сколько времени ваша система проводит в каждой системе, это может быть достигнуто на perf top, что даст вам хорошую оценку значительной части времени, затрачиваемого системой на каждую функцию.

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

Я не уверен, что я понимаю нужную вам модель времени/cpu, но я думаю, что вышеуказанное должно соответствовать вашим потребностям.

Вы можете узнать больше о том, как использовать perf here.

[EDIT]
Как и @myaut, существуют другие инструменты для профилирования ядра. Хотя у меня очень хороший опыт работы с перфомансом, и я не согласен с @myaut о качестве результатов, стоит упомянуть некоторые другие инструменты. Если вы просто заинтересованы в том, чтобы выполнить работу, все будет хорошо, но если вы хотите узнать о других инструментах для профилирования и их способностях, я нашел эту симпатичную ссылку here

(... Не забывайте пожалуйста, отметьте @myaut или мой ответ, если мы помогли вам ...)

+1

> У меня очень хороший опыт работы с перфомансом <Звучит как [streetlight anti-method] (https://queue.acm.org/detail.cfm?id=2413037), а? ;) На самом деле я не против «perf», это хороший профилировщик, я против использования профилирования в задаче OP (время измерения для определенной функции), это задача для отслеживания. – myaut

+0

Я не сопротивляюсь ни тем, ни первым работали для меня в прошлом, и я никогда не использовал SystemTap сам, но вполне уверен, что он справится с этой задачей так же хорошо, как бы то ни было! –

+0

Я нашел ссылку, предоставленную ishay, полезен, спасибо ishay – Vasu