3

Как измерить влияние kext в производительности в OS X с точки зрения использования процессора, памяти или потока во время определенных пользовательских действий? Любой конкретный инструмент метода, который может использоваться с земли пользователя? ИЛИ любой подход/метод, который можно рассмотреть?Профилирование производительности KEXT

+2

Тем, кто пытается закрыть этот вопрос: позаботьтесь о том, чтобы оправдать ваши «вне темы» и «слишком широкие» мнения? Это не предмет, который охвачен на любой глубине в любом месте, поэтому довольно широкий вопрос кажется действительным. – pmdj

ответ

2

Вы по существу есть 2 варианта:

  1. Инструментирование ваш Kext с измерениями времени. Возьмите маркеры до и после операции, которую вы пытаетесь измерить, используя mach_absolute_time(), конвертируйте в человеко-читаемый блок с использованием absolutetime_to_nanoseconds() и получите разницу, а затем соберите эту информацию где-нибудь в своем kext, где ее можно извлечь из пользовательского пространства.

  2. ядра Sampling стеки с помощью DTrace (iprofiler -kernelstacks -timeprofiler из командной строки или с помощью Instruments.app)

Лично у меня было намного больше успеха с первым способом, хотя это, безусловно, больше работы , Большинство kext-кода работают так кратко, что профайлер пробоотборника едва хватает на какие-либо экземпляры его выполнения, если только вы не уменьшаете интервал выборки до тех пор, пока измерения не начнут мешать системе, или ваш kext серьезно медленный. Это довольно легко сделать, так что это часто действительная проверка здравомыслия.

Вы также можете получить свой компилятор для кодирования кода с помощью счетчиков (-fprofile-arcs), что теоретически позволит вам комбинировать статистику выборки с счетчиками ветвей, чтобы определить время выполнения каждой ветки. Извлечение этих данных - это боль, хотя (my code может помочь), и снова статистический шум сделал это бесполезным для меня на практике.

Явный метод также позволяет измерять асинхронные операции и т. Д., Но, конечно, также имеет некоторые накладные расходы. Накопление данных безопасно также немного сложно. (Я использую атомарные операции, но вы также можете использовать spinlocks. Не забудьте не просто измерять средства, но также стандартное отклонение и минимальное/максимальное время.) И извлечение данных может быть больно, потому что вам нужно добавить интерфейс пользовательского пространства к вашему kext для него. Но это определенно стоит!

+0

Спасибо за руководство, я попробую варианты. – Utkarsh