我有一个多线程应用程序,该程序在8核PowerPC处理器上的Linux 2.6.30下运行。我想确定启动线程时正在使用哪个CPU。明显的答案是打印PID-处理器ID专用寄存器。使用mfspr指令访问PID寄存器。我尝试在我的C程序中使用以下asm访问它:

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

问题在于mfspr是特权指令,即使该应用程序以root身份运行,它也会出现错误的指令错误。在裸机应用上执行时,此指令可以正常工作。

尽管可以创建一个在内核空间中执行此指令的驱动程序,但是当答案回到线程时,它可能已移至另一个内核。

从Linux用户级进程中,有什么方法可以获取当前线程所运行的内核的ID?

最佳答案

pthread_getaffinity_npsched_getcpu是否足够?

10-08 12:17