У меня есть многопоточное приложение, которое работает под Linux 2.6.30 на 8-ядерном процессоре PowerPC. Я хочу определить, какой процессор используется при запуске потока. Очевидный ответ - распечатать регистр специального назначения идентификатора PID-процессора. Доступ к регистру PID осуществляется с помощью инструкции mfspr. Я пытаюсь получить к нему доступ, используя следующую программу asm в моей C-программе:
asm(" mfspr %0, 286 " : "=r" (cpu_no));
Проблема в том, что mfspr
является привилегированной инструкцией, и даже когда это приложение запускается с правами суперпользователя, оно вызывает ошибку недопустимой инструкции. Эта инструкция прекрасно работает, когда выполняется на голом металлическом приложении.
Хотя можно создать драйвер, который будет выполнять эти инструкции в пространстве ядра, к тому времени, когда ответ вернется в поток, он, возможно, переместится в другое ядро.
Из процесса уровня пользователя Linux есть ли способ получить идентификатор ядра, на котором работает текущий поток?