有没有办法找出应用程序的每个线程绑定到哪个核心?

时间:2013-02-28 15:02:23

标签: multithreading unix solaris solaris-10

比如说,多线程应用程序在8核Solaris上运行。有没有办法列出每个线程和核心之间的映射#?

谢谢,

1 个答案:

答案 0 :(得分:1)

首先,你可以编写C代码来查询进程中的每个线程 在那里打开/proc/[id]/lwp/[tid]/lwpsinfo并将其取入 lwpsinfo_t

中定义的procfs.h结构
processorid_t pr_onpro;         /* processor which last ran this lwp */
processorid_t pr_bindpro;       /* processor to which lwp is bound */

您感兴趣的两位成员。在浪费你的时间之前

接下来你浪费了很多时间(假设区域):

prctl -i zone {ZONENAME}仅在全局区域中由root运行。你得到这样的输出:

NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
zone.max-swap
        system          16.0EB    max   deny                                 -
zone.max-locked-memory
        system          16.0EB    max   deny                                 -
zone.max-shm-memory
        system          16.0EB    max   deny                                 -
zone.max-shm-ids
        system          16.8M     max   deny                                 -
zone.max-sem-ids
        system          16.8M     max   deny                                 -
zone.max-msg-ids
        system          16.8M     max   deny                                 -
zone.max-lwps
        system          2.15G     max   deny                                 -
zone.cpu-cap
        privileged      1.20K       -   deny                                 -
        system          4.29G     inf   deny                                 -
zone.cpu-shares
        privileged          1       -   none                                 -
        system          65.5K     max   none                                 -

zone.cpu-cap 1.20K表示1200 ==表示百分比。所以1200意味着12 cpus。如果我是您的管理员,DEV或TEST区域将无法拥有64个核心。所以先检查一下。

另外,似乎你的假设是错误的。除非启用了亲和性(处理器集等),否则系统会使用当前启用的调度算法(FSS等)将cpus分配给线程。这意味着任何线程都可以随时转到任何可用的cpu,具体取决于调度程序和负载。 / p>