最近、私はマルチスレッドアプリケーションが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プロセスがあります。手動でバインドするとパフォーマンスの向上に役立ちますか?
よろしくお願いします。