멀티스레드 애플리케이션에서 사용되는 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 프로세스가 있습니다. 수동으로 바인딩하면 성능 향상에 도움이 됩니까?

미리 감사드립니다.

관련 정보