CPU의 가상쓰레드 사용량에 대해 궁금합니다.
안녕하세요. 최근에 서버 엔지니어의 길로 들어선 뉴비입니다.
제가 맡고있는 고객사에 서버점검을 하면서 궁금한점이 있어서 질문올립니다.
RHEL 7.5버전으로 되어있는 서버인데 top 명령어로 CPU의 사용률을 체크하면서 생긴 궁금점입니다.
(자세한 스펙은 문제가 될까봐 공개 못하는점 양해바랍니다.)
기본적 하드웨어적으로 코어는 6개인것으로 보이고 스레드가 12개입니다.
여기에 가상스레드를 추가하여 24개까지 보이는데 서버에서 기본적으로 돌리고있는 프로세스가 있을거고,
그 프로세스의 대해서 CPU사용량이 균등하게 나눠져 돌아가고있다는것은 육안적으로도 보입니다.
여기서 궁금점은 CPU의 사용분배가 이상하게 되어있습니다.
예를들어 6개의 코어와 12개의 스레드가 있고, 솔루션이나 어플리케이션을 서비스중이라 가정할때
top 명령어를 실행해 각 CPU의 사용률을 보면
cpu(1) 15%
cpu(2) 6%
cpu(3) 3%
cpu(4) 1%
cpu(5) 0%
cpu(6) 0%
cpu(7) 15%
cpu(8) 6%
cpu(9) 3%
cpu(10) 1%
cpu(11) 0%
cpu(12) 0%
위처럼 출력됩니다. 여기서 궁금한게 왜 1번부터 12번까지 균등하게 나눠지는게 아니고, 1번과 7번이 주 코어인것처럼 인식되면서 5,6번과 11,12번이 0%로 할당이 안되는게 왜 그런지 궁금합니다.
이게 단순히 OS적인 인식or설정 문제인지, 해당 서버에서 사용하고있는 어플리케이션의 설정문제인지 가늠할수없어서 질문드립니다.
정상입니다
간단하게 single thread로 코어를 100% 사용하면서 돌아가는 프로세스가 있다고 생각해 봅시다. 이 프로세스를 코어 12개에 골고루 나눠서 일을 시키는 것보다, 코어 하나를 잡아서 그 코어만 죽어라 일하게 만들고 나머지 코어 11개는 놀고 있는 것이 훨씬 효율적입니다. 놀고 있는 코어는 클럭을 낮춰서 전기를 적게 쓸 수 있고, 이미 사용중인 코어의 L1 캐시에 중간 결과들이 모조리 저장되어 있을 테니까 말이죠.
마찬가지로 커널 입장에서는 코어를 골고루 나눠 쓰는 것보다 "일단 일하기 시작한 놈 계속 일시키기"가 더 효율적인 스케줄링입니다.
따라서 모든 코어가 100% 일하는 환경이 아닌 한, 일부 코어가 열심히 일하고 있고 나머지가 놀고 있는 건 매우 정상입니다.
한번 읽고 이해할수있는 좋은 답변 감사드립니다!
한번 읽고 이해할수있는 좋은 답변 감사드립니다!
댓글 달기