3

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

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

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

虽然可以创建一个在内核空间中执行这些指令的驱动程序,但当答案返回到线程时,它可能已经移动到不同的内核。

从 Linux 用户级进程有没有办法获取当前线程正在运行的内核的 ID?

4

2 回答 2

3

pthread_getaffinity_np或sched_getcpu足够了吗?

于 2010-10-13T21:06:08.440 回答
-1

另一种方法是使用 WHOAMI 注册。WHOAMI 寄存器返回读取它的内核的 CPU ID。

于 2014-08-13T13:46:20.373 回答