Как получить идентификатор процессора на многоядерном PowerPC? - PullRequest
3 голосов
/ 14 октября 2010

У меня есть многопоточное приложение, которое работает под Linux 2.6.30 на 8-ядерном процессоре PowerPC. Я хочу определить, какой процессор используется при запуске потока. Очевидный ответ - распечатать регистр специального назначения идентификатора PID-процессора. Доступ к регистру PID осуществляется с помощью инструкции mfspr. Я пытаюсь получить к нему доступ, используя следующую программу asm в моей C-программе:

asm(" mfspr %0, 286 " : "=r" (cpu_no));

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

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

Из процесса уровня пользователя Linux есть ли способ получить идентификатор ядра, на котором работает текущий поток?

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Хватит ли pthread_getaffinity_np или sched_getcpu ?

0 голосов
/ 13 августа 2014

Другой способ - использовать регистр WHOAMI.Регистр WHOAMI возвращает идентификатор процессора, который читает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...