Отслеживание выполнения потока по ядру - PullRequest
3 голосов
/ 12 июня 2011

Предположим, я хотел бы нарисовать график с "щелчками" ЦП (или временем настенных часов) по оси X и выполнением потока по оси Y.Так, например, если у меня есть 4 ядра, у меня есть 4 тика по оси Y, по оси X время, и я хотел бы нарисовать, скажем, красным цветом, когда ядро ​​выполняет этот поток: как я могу программнособрать информацию, чтобы сделать это?Я хотел бы полностью понять проблему, поэтому мне не нужно использовать TBB или визуализацию потоков какой-либо IDE, Intel или иным образом ... Я просто хотел бы понять простой кусок кода, который делает это.На самом деле язык - это не проблема, но если это C, это намного лучше.Мне не нужно «рисовать» график, мне просто нужно знать, какой процессор выполняет какой поток и как долго.Спасибо!

РЕДАКТИРОВАТЬ : Я только что нашел инструмент трассировки nptl , если что-нибудь я посмотрю, что они делают, и приспособлюсь к моим потребностям.

1 Ответ

2 голосов
/ 12 июня 2011

Делать это без участия ядра будет сложно .

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

При этом некоторые операционные системы экспортируют такую ​​статистику впользовательское пространство.Например, Linux имеет /proc/[pid]/stat и в этом файле , есть поле под названием processor.

Чтобы получить представление (смутное) о том, что происходит с вашими потоками в любомв данный момент вы можете отслеживать файлы в /proc/self/task/*/stat.

...