Как проверить планирование многопоточного пользовательского приложения с помощью lttng?

Я новичок в трассировке в Linux. У меня есть многопоточное пользовательское приложение C++. Потоки периодически просыпаются (по таймеру o/s) и спят после некоторой обработки. Я хочу визуализировать:

1) Когда потоки запускаются и останавливаются

2) На каких ядрах работают потоки.

Я установил lttng и Trace Compass на машину с Ubuntu 14.04 LTS. Но я не знаю, как использовать эти инструменты для достижения моей цели.

Я прочитал следующий раздел документации lttng:

http://lttng.org/docs/#doc-tracing-your-own-user-application

Чтобы собрать свою трассировку, я должен определить собственные определения точек трассировки lttng (в заголовочном файле поставщика трассировки) и вставить точки трассировки в мое пользовательское приложение, или есть более простой способ достижения моей цели?

С наилучшими пожеланиями

Дэвид

1 ответ

Вы можете выполнить трассировку ядра, включив, по крайней мере, sched_switch событие, чтобы получить информацию о том, какой поток работает на каком процессоре. Открытие такой трассировки в Trace Compass и просмотр Control Flow View должны показать состояние всех потоков, чтобы вы могли искать те, которые соответствуют вашему приложению.

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

Возможно, вас заинтересует этот пример / учебное пособие, в котором показано, как создать простое приложение и как написать файл конфигурации Trace Compass для графического отображения состояний приложения.

Другие вопросы по тегам