我有一个多线程应用程序,它在 8 核 PowerPC 处理器上的 Linux 2.6.30 下运行。我想确定启动线程时正在使用哪个 CPU。显而易见的答案是打印 PID - 处理器 ID 专用寄存器。使用 mfspr 指令访问 PID 寄存器。我尝试在我的 C 程序中使用以下 asm 访问它:
asm(" mfspr %0, 286 " : "=r" (cpu_no));
问题是这mfspr
是一条特权指令,即使这个应用程序以 root 身份运行,它也会出现非法指令错误。在裸机应用程序上执行此指令时可以正常工作。
虽然可以创建一个在内核空间中执行这些指令的驱动程序,但当答案返回到线程时,它可能已经移动到不同的内核。
从 Linux 用户级进程有没有办法获取当前线程正在运行的内核的 ID?