Мелкозернистая регистрация активности процессора за определенный промежуток времени в Linux - PullRequest
1 голос
/ 14 февраля 2011

Можно ли как-нибудь зарегистрировать активность процессора, например, «отметка времени: фактическая активность» (например, переключение контекста и т. Д.)?Он должен быть похож на syslog, sar или top, но с более точными значениями времени (в нано секундах).

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

Я прочитал соответствующий вопрос SO вопрос в этом контексте, где обсуждение было в основном связано с темами и проверял другие вопросы, но не получил никакого руководства ..

Спасибо.

[EDIT] : я ищу инструмент (API) / предложение по изменению кода, которое может работать только на уровне ядра, поскольку мой контекст имеетне имеет ничего общего с пространством приложения / пользователя.

[EDIT2] : Краткая справка: я изменил драйвер Linux / Android SDIO UART и провел для него тесты производительности (метрики: скорость передачи данных).Изменения, которые я сделал, действительно улучшили производительность, однако это также поставило несколько вопросов.Теоретически время записи данных должно было составлять около 50 нс, но я заметил, что оно составляет около 200 нс.В стремлении понять задержку / задержку в 150 нс, я хотел бы отследить, что делает процессор, чтобы я получил некоторые подсказки / ответ.

Теперь мои надежды на системной карте.

1 Ответ

2 голосов
/ 14 февраля 2011

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

Oprofile can - это профилировщик выборки, который записывает трассировку стека.Может записывать стек как приложения пользовательского пространства, так и ядра.

Systemtap - это еще один инструмент (похожий на широко рекламируемый DTrace), который позволяет обрабатывать приложения и ядро ​​и получать подробные трассировки стекас аргументами функций и временными метками.

Используя Systemtap, вы можете тестировать функции в ядре Linux.При анализе производительности в работающей системе недостаточно получить значение min / max / mean / median / stddev, потому что ваше среднее значение часто будет слишком шумным, например, среднее время выполнения вашей функции записи может быть 150 нс, а stddev - 100 нсОчевидно, это не говорит вам много.Поскольку картинка стоит тысячи слов, хорошим началом будет определение одной или нескольких интересных функций в вашем драйвере, выборка времени их выполнения и затем отображение набора выборок в виде гистограммы.

Это можно сделать с помощьювставка проб при входе и выходе функции.Датчик входа функции сохраняет текущее время как время входа.Датчик возврата функции берет текущее время и вычитает время входа, чтобы получить время выполнения функции.Используйте время выполнения функции как индекс / ключ в массиве (массивы Systemtap на самом деле являются хеш-таблицами) и увеличивайте число выборок, связанных с этим ключом.После того, как вы собрали достаточно образцов (вы можете их сосчитать), завершите сеанс Systemtap.При выходе из сеанса отображать массив в виде гистограммы, Systemtap предоставляет функцию, которая делает это.

Я не предоставляю никаких примеров, потому что Systemtap имеет отличный учебник .

...