【问题标题】:How could I know which core a process is running on?我怎么知道进程在哪个核心上运行?
【发布时间】:2011-04-11 02:49:56
【问题描述】:

我目前正在做一个关于在 linux 环境中将进程设置为一个核心的项目。我使用 sched_setaffinity 来完成这项工作,我想知道 linux 是否提供了一些函数来获取进程在哪个内核上运行。我使用 top 命令并发现它可以使用 j 选项获取此信息。所以我确信有一些方法可以在用户空间中获取这些信息。

【问题讨论】:

    标签: c linux process smp


    【解决方案1】:

    你可能想要sched_getcpu()。如果您运行的是旧版本的 glibc,您可以阅读 /proc/[pid]/stat 的第 39 个字段以获取相应的 pid -- 请参阅 proc(5) 手册页了解更多详细信息。

    【讨论】:

    • 很遗憾,我的 Glibc 版本低于 2.6,所以无法使用
    • 好的。修改了我的答案以包含 2.6 之前的 glibcs​​ 的解决方案。
    【解决方案2】:

    您可以使用内联汇编(在 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

    【讨论】:

    • 感谢您的建议,但是我的 cpu 是 xeon 5560,操作系统是 RHEL 5.4 64bit。 CPUID 还可以作为所有更改名称的寄存器吗?
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多