了解多线程应用程序使用的 CPU 线程

了解多线程应用程序使用的 CPU 线程

最近,我对多线程应用程序如何使用CPU核心进行了一些研究。我可以使用以下命令查看每个线程正在使用哪些核心:

例如:ceph-osd是一个多线程应用程序

for i in $(pgrep ceph-osd); do ps -mo pid,tid,fname,user,psr -p $i;done 

我的CPU有32个核心和72个线程,因此ceph-osd将有72个TID(线程ID):

    PID     TID COMMAND  USER     PSR
 336157       - ceph-osd ceph       -
      -  336157 -        ceph       6
      -  336160 -        ceph      51
      -  336162 -        ceph      57
      -  336163 -        ceph      23
      -  336164 -        ceph      22
      -  336168 -        ceph       7
      -  336169 -        ceph      17
      -  336203 -        ceph       1
...
...

但我不明白的是:

  • 这个 ceph-osd 进程将使用所有 CPU 核心,或者线程是否刚刚分配并且可能并不总是在使用?

  • 如果我使用 numactl 定义亲和力并将进程绑定到特定线程,它会与以前有什么不同吗?

  • 我的服务器上有多个 ceph-osd 进程,那么手动绑定时是否有助于提高性能?

提前致谢。

相关内容