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