マルチスレッドアプリケーションで使用される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プロセスがあります。手動でバインドするとパフォーマンスの向上に役立ちますか?

よろしくお願いします。

関連情報