【发布时间】:2011-04-11 02:49:56
【问题描述】:
我目前正在做一个关于在 linux 环境中将进程设置为一个核心的项目。我使用 sched_setaffinity 来完成这项工作,我想知道 linux 是否提供了一些函数来获取进程在哪个内核上运行。我使用 top 命令并发现它可以使用 j 选项获取此信息。所以我确信有一些方法可以在用户空间中获取这些信息。
【问题讨论】:
我目前正在做一个关于在 linux 环境中将进程设置为一个核心的项目。我使用 sched_setaffinity 来完成这项工作,我想知道 linux 是否提供了一些函数来获取进程在哪个内核上运行。我使用 top 命令并发现它可以使用 j 选项获取此信息。所以我确信有一些方法可以在用户空间中获取这些信息。
【问题讨论】:
你可能想要sched_getcpu()。如果您运行的是旧版本的 glibc,您可以阅读 /proc/[pid]/stat 的第 39 个字段以获取相应的 pid -- 请参阅 proc(5) 手册页了解更多详细信息。
【讨论】:
您可以使用内联汇编(在 x86 架构上)来实现:
mov eax, 1 ; cpuid functionality depends on the value of eax
cpuid ; get cpu info
shr ebx, 24 ; ebx[31:24] is the cpu ID.
mov eax, ebx ; eax contains the cpu ID
您可以在此处阅读更多关于 CPUID 指令的信息http://download.intel.com/design/processor/applnots/24161832.pdf
【讨论】: