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