比如说,多线程应用程序在8核Solaris上运行。有没有办法列出每个线程和核心之间的映射#?
谢谢,
答案 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>