안녕하세요. 이번 포스팅에서는 저번 포스팅에서 설명을 못다한 CPU Steal time에 대해 알아볼까 합니다. 물론 CPU Steal time에 대한 이해가 없어도 OS과목에서 CPU Scheduling을 이해하는데 전혀 무리가 없습니다. 공유 컴퓨팅 차원에서의 CPU 스케쥴링이 훌륭한 연구 topic이 되겠다며 CPU Steal에 대해 소개해드렸었는데요. CPU Steal time은 클라우드 서비스와 물리 서버의 환경 차이에서 발생하는 지표 중 하나인데 가상화된 자원을 분배하는 과정에서 CPU의 자원을 얼마나 빼앗기는지 알려준다고 말씀드렸습니다.
21.01. CPU Steal Time
Hypervisor가 다른 가상 프로세서를 서비스하는 동안 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값
Virtual Machine(VM)은 단일 host에 있는 다른 인스턴스와 resource를 공유하는데 CPU Steal time을 통해 VM에서 동작하는 CPU가 물리 machine으로부터 자원을 할당받기위해 대기하는 시간을 알 수 있습니다.(CPU Steal time은 프로세스가 비자발적으로 대기하는 시간이기 때문에 서비스 제공자가 이를 줄이기 위해 노력하는 것은 당연한 일일겁니다.)
Linux에서는 top 명령을 실행하면 성능 metric의 실시간으로 볼 수 있습니다. 물론 서비스에 문제가 발생해 과거 시점의 data가 필요하다면 모니터링을 해야 하긴 합니다.(대부분 모니터링 시스템에서는 CPU Steal 지표를 모니터링합니다.)
//field
PID : 프로세스 ID (PID)
USER : 프로세스를 실행한 사용자 ID
PRI : 프로세스 우선순위 (priority)
NI : nice value. 마이너스를 가지는 nice value는 우선순위가 높음.
VIRT : 가상 메모리 사용량(SWAP+RES)
RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ]
%CPU : 프로세스가 사용하는 CPU의 사용율
%MEM : 프로세스가 사용하는 메모리의 사용율
TIME+ : 프로세스 시작된 이후 경과된 총 시간
COMMAND : 실행된 명령어
CPU Steal은 VM이 올라가 있는 물리 장비에 자원이 처음부터 부족하거나 VM에 할당된 CPU 자원이 부족하기 때문에 일어납니다. VM의 수가 많거나 관리자가 resource 설정을 잘못했을 경우 이러한 문제가 발생할 수 있죠. 그렇다면 CPU Steal time이 높으면 어떤 상황이 발생할까요?
Batch작업과 같이 background에서 장시간 동작하는 작업은 문제가 되지 않습니다. 이런 작업은 중지되지는 않고 다른 VM과 CPU 주기를 공유하는 과정에서 조금 더 느리게 작업이 종료될 뿐입니다.(느린게 더 느려지는 것도 문제가 될 수도 있긴하죠.) 하지만 요청을 실시간으로 처리해야하는 application같은 경우는 문제가 발생하고 성능이 감소한다면 서비스에 장애가 발생하게 됩니다.
21.02. 해결방안
앞서 CPU Steal time이 높아지는 이유에 대해 말씀드렸습니다. 그럼 이 부분을 해결하면 되겠죠. Resource 설정을 변경하면 됩니다. VM별로 사용률을 관리하여 자원을 많이 사용하는 VM에 의해 다른 VM이 영향을 받지 않도록 할 수 있습니다. 또한 hypervisor나 software를 upgrade할 수 있죠. VM의 자원을 적절하게 할당하는 알고리즘이 더 향상된 성능을 제공한다면 CPU Steal time을 낮출 수 있습니다. 또는 resource 자체의 capa를 늘릴 수도 있습니다.(Core를 추가할 수 있죠.) 앞서 소개한대로 자원을 많이 사용하는 VM에 대한 사용률을 제한할 수도 있지만 VM 자원 사용률 자체를 평준화시키는 것도 고려해볼 수 있습니다. 물리적으로 분리하여 task를 분산시키는 거죠. 지금까지는 서비스 제공 vender에서 할 수 있는 조치들이였습니다.
Client 입장에서 해결할 수 있는 조치들은 매우 제한적인데요. 좀 더 강력한 인스턴스를 구매하거나 다른 인스턴스에 application을 재배포하는 방법이 사용할 수 있습니다.(Hosting 업체들은 VM이 계약에 따라 resource들을 적절히 제공하고 있다고 답변할게 뻔하죠. 그래서 클라우드 사용자들은 반드시 모니터링을 해야하는지도 모르겠습니다.)
이번 포스팅에서는 CPU Steal time에 대해 알아보았습니다. 질문은 언제나 환영이니 댓글로 남겨주시면 감사하겠습니다. 아직 OS과목을 수강하지 않은 제가 독학하면서 내용을 정리하는 것이라 reference에 신중을 기하더라도 오류가 있을 수 있습니다. 오류 지적 또한 댓글로 남겨주시면 감사하겠습니다.
'학부공부 > OS_운영체제' 카테고리의 다른 글
23. CPU Scheduling(3) (0) | 2021.12.06 |
---|---|
22. CPU Scheduling(2) (0) | 2021.12.01 |
20. CPU Scheduling(1) (0) | 2021.11.30 |
19. Socket programming basic [Interesting topic to study] (2) | 2021.11.28 |
18. Message Queue [Interesting topic to study] (2) | 2021.11.25 |
댓글