![멀티스레드 애플리케이션에서 사용되는 CPU 스레드 이해](https://linux55.com/image/226700/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C%20%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%20CPU%20%EC%8A%A4%EB%A0%88%EB%93%9C%20%EC%9D%B4%ED%95%B4.png)
최근에 저는 멀티스레드 애플리케이션이 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 프로세스가 있습니다. 수동으로 바인딩하면 성능 향상에 도움이 됩니까?
미리 감사드립니다.