티스토리 뷰

Docker/Docker 자원 관리

CPU 자원관리

로또_ 2019. 9. 18. 01:07

기본적으로 Docker 컨테이너는 호스트 머신의 CPU 자원을 제한없이 사용할 수 있습니다. 즉, 하나의 컨테이너가 수행될 때 CPU-Intensive 한 작업을 돌리면, 호스트 머신의 CPU 자원을 점유해버리는 상황도 발생할 수 있습니다. 이는 컨테이너간 독립적인 환경을 구축할 수 없음을 의미하기 때문에 CPU 사이클에 대한 쿼터(Quota)를 적용할 필요가 있습니다.

 

Docker는 기본적으로 CFS 스케줄러를 사용하며, 버전 1.13이상에서 실시간 스케줄러를 이용할 수 있습니다. CFS 스케줄러를 이용하기 때문에 설정들이 CFS 스케줄러와 연관되어 있습니다.

 

 

CPU에 대한 실시간 스케줄링은 다음과 같이 할 수 있습니다.

 

 


 

 

cpu를 할당해서 sysbench 테스트를 진행해보겠습니다.

cpu 0과 1, 2개를 사용하도록 설정하였습니다.

10초의 시간이 걸린걸 확인하실 수 있습니다.

 

또한 하나의 코어를 100% 사용한 걸 확인 할 수 있습니다.(top 명령어를 실행한 뒤 숫자 1번을 누르면 cpu별 점유율을 확인 할 수 있습니다.) 저는 2개의 코어를 사용한다고 설정하였지만 위와 같이 코어를 하나만 사용하는 상황이 나와서 의문입니다. 

 

그래서 이번엔 코어를 1개만(0번 코어) 사용하게 하고 실행해 보았습니다.

여기서는 cpu0번만을 사용하도록 지정하였기 때문에 문제 없이 돌아갔습니다.

 

문제점을 찾았습니다. 제가 cpu0,1을 할당하여도 스레드가 1개로만 돌렸기 때문에  cpu한개 외의 다른 cpu가 필요하지 않았습니다. 그래서 2스레드 환경으로 다시 실험하였습니다.

 

제가 예상한 결과와 같은 것을 볼 수 있습니다.

 

https://www.joinc.co.kr/w/man/12/docker/limits

반응형