Mac의 Docker에서 인산 CPU 코어를 최대한 사용

3398 단어 boot2dockerDockerMac
Docker, 개발 환경 구축에 편리합니다!
로컬을 오염시키지 않을 뿐만 아니라 가벼운 개발 환경을 만들 수도 있고 다른 기계에 환경을 분배할 수도 있고 서버에 디자인을 할 수도 있다.
저는 주로 Docker를 개발 환경으로 삼아 컨테이너 안에서 호스트 편지에서 설치된 원본 코드를 실행함으로써 코드와 실행 환경을 분리합니다.
수백만 건의 데이터를 처리하고 때로는 CPU 중량급 처리를 하려고 할 때도 있다. 이때 우리는 Docker 컨테이너에서 인산효소 CPU를 최대한 활용하는 방법을 조사했다.
그나저나 환경은 물리 2핵, 가상 4핵의 맥북 프로다.

이번에 사용한 Docker 버전


이런 느낌이에요.
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
docker-machine version 0.4.1 (e2c88d6)

CPU 로드 테스트용 이미지 준비 및 시도


CPU에 부하를 가하기 위한 좋은 인상이 있기 때문에 CPU가 정말 사용할 수 있는지 테스트하기 위해 이pull을 먼저 꺼냅니다.
$ docker pull jess/stress
만약 이 그림에서 용기를 작동시켜 호스트 측 기계의 CPU에 부하를 가할 수 있다면 CPU는 잘 사용할 수 있을 것이다.
빨리 시동 걸어봐.지령은 여기 있습니다.
$ docker run --rm -it jess/stress --cpu 4
마지막--cpu4는 컨테이너를 시작할 때 실행되는 명령 옵션으로 테스트 부하의 CPU 수를 지정할 수 있습니다.
이번에 테스트를 이용한 MBP는 가상 4 핵심이기 때문에 cpu에서 4개를 지정했습니다.
실행한 결과는 어떻게 될까요?
$ stress: info: [1] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
성공적으로 시작했습니다.top 명령으로 CPU 사용률을 확인합니다.
Boot2 Docker의 공급자가 VirtualBox를 사용하기 때문에 호스트 측면에서 볼 수 있는 명령 이름은 VBoxHeadless입니다.
PID    COMMAND      %CPU
36580  VBoxHeadless 100.3
아이고, 부하가 증가하는 CPU 수에 4를 지정했는데 실제 부하가 증가하는 것은 100%(가상1핵)이다.
컨테이너에서 호스트의 CPU를 모두 사용하지 않은 것 같습니다.

Boot2 Docker에 할당된 코어 수 확인


여기서 확인해야 할 것은 Mac는 Docker를 직접 설치할 수 없기 때문에 어떤 가상 환경에서 Boot2 Docker라는 Docker 전용 환경을 구축하여 Docker 컨테이너를 이동할 수 있다.
따라서 VirtualBox에서 시작하는 Boot2 Docker의 설정을 확인합니다.
Boot2 Docker를 중지한 다음 VirtualBox를 엽니다.

왼쪽 위에 있는 톱니바퀴 아이콘의 설정 단추에서 시스템→프로세서로 전진하면...

역시 1CPU만 할당된 것으로 알고 있습니다.
이 때문에 stress 용기에서 2개 이상의 CPU 코어에 부하를 가하더라도 사실상 1개의 코어만 사용할 수 있기 때문이다.
그러면 여기를 녹색 범위의 최대치인 4CPU로 지정하고 다시 시도해 보세요.

결실


실행할 명령은 아까와 같다.
$ docker run --rm -it jess/stress --cpu 4
top 지령은 어떻게 돼요?
PID    COMMAND      %CPU
36580  VBoxHeadless 370.8
370.8%로 볼 수 있으며 기본적으로 가상 4개 코어의 400%를 사용할 수 있다.
이렇게 용기 안에서 대량의 처리를 병행하려고 할 때도 호스트의 CPU 출력을 충분히 이용할 수 있다!

추가: CPU 사용량을 반대로 제한


VirtualBox에 Boot2 Docker가 활용할 수 있는 코어 수를 추가하면 VM에서 이동하는 모든 컨테이너가 해당 CPU 리소스를 활용할 수 있습니다.
마음에 들지 않으면 컨테이너를 시작할 때 사용할 수 있는 CPU를 지정하는 옵션을 사용하여 컨테이너 단위로 사용할 CPU를 제한할 수 있다.
구체적으로 말하면
$ docker run --rm -it --cpuset-cpus="0,1" jess/stress --cpu 4
이런 느낌으로 - cpust-cpus 선택을 사용합니다.
'0'을 지정하면 0번째 CPU만 있고,'0, 1, 2'를 지정하면 0, 1, 2개만 사용하는 CPU를 제한할 수 있다.0-3 등의 범위를 지정할 수도 있습니다.
방금 4개의 코어로 설정된 Boot2 DockerVM에서 컨테이너를 시작해 확인했습니다.
가상 4핵 0, 1, 2, 3호의 핵심이 있기 때문에 이 중 0, 1, 2, 3개의 CPU를 사용할 수 있도록 제한하고 용기를 가동해 본다.로드할 CPU 수를 4로 설정합니다.
$ docker run --rm -it --cpuset-cpus="0,1,2" jess/stress --cpu 4
탑명령 확인해봐.
PID    COMMAND      %CPU
36580  VBoxHeadless 297.2
4개의 로드된 CPU 수를 지정했지만 가상 4코어 400% 중 약 300%인 3개의 CPU 리소스만 사용할 수 있습니다.
제한이 잘 됐다고요?

좋은 웹페이지 즐겨찾기