Connecting
Docker 환경과 물리머신의 성능평가 본문
Docker 컨테이너 성능 벤치마크
지난 시간에는 한정된 자원을 사용하기 위한 노력들과 컨테이너의 정의와 사용하는 이유, Kubernetes가 등장한 이유에 대해서 살펴보았다. 이번 시간에는 실제 SBC에 Docker를 설치하여 물리 머신과 컨테이너 환경에서의 성능 차이를 알아보도록 한다.
Docker 환경 성능
컨테이너가 일반 VM보다 이득이라는 점은 지난 시간에서 설명하였다. 실질적으로 컨테이너를 사용했을 때 물리머신과 성능 차이가 존재하는지, 존재한다면 얼마나 많은 차이가 나는지에 대해서 알아보도록 한다.
컨테이너는 OS 커널에서 동작하기 때문에 Linux 커널에 의존적인 관계를 가질 수 밖에수밖에 없는 구조를 가지고 있다. 띠라서 여러 Docker 환경을 구축하더라도 하나의 커널에서만 종속적인 관계를 가질 수밖에 없기 때문에 컨테이너별 커널 구성이 불가능하다. 만약 컨테이너별 다른 커널 구성을 원한다면 다른 하드웨어 혹은 다른 VM에서 OS를 설치해서 운영해야 한다. 대부분의 환경에서는 기존 VM위에서 Docker 컨테이너를 구성하는 방법이 일반적인데, 이때 하이퍼바이저와 호스트 OS 추상화 단계에서 일부 문제가 발생할 수 있다. 이점은 다음에 시간이 된다면 자세히 언급하도록 하겠다.
물리 머신 환경
이번 테스트 구성에서는 라떼판다를 활용했다. 라떼판다는 X86 개발 보드 중에 하나로, 아두이노와 결합된 형태로 제작되어 강력한 개발 보드를 필요한 요구에 따라서 개발되었다. X86 시스템이기 때문에 라즈베리파이와 달리 ARM 프로세서의 태생적인 한계를 극복하고, 다양한 OS를 지원하기 때문에 미니 PC로 생각해도 된다.
이번 테스트에서 사용할 라떼판다의 사양은 다음과 같다.
CPU | RAM | Storage | I/O | Wireless | OS |
---|---|---|---|---|---|
Intel 체리트레일 Z8300 | 4GB | eMMC 64GB | USB, Ethernet | Wi-Fi, 블루투스 4.0 | Windows, Linux |
- 먼저 CPU의 경우 인텔에서 출시한 Atom 계열의 초저전력 CPU가 탑재되었다. Z8300은 쿼드코어 프로세서이며, 성능은 약 10여 년 전에 출시된 E8500과 비슷한 성능을 가지고 있다.
- RAM의 경우 LPDDR3 4GB이며, 클럭스피드는 1600MT/s이다.
- 내장 스토리지는 eMMC가 내장되어 있는데 스마트폰이나 태블릿 PC에 가장 많이 사용하는 스토리지 종류에 하나이다. 전력 소모가 적고, SSD에 비해 저렴하며, eMMC 4.4 기준 최대 104MB/s, eMMC 5.0에서는 400MB/s까지 지원한다. 아래에서 디스크 벤치를 확인하면 알 수 있겠지만 eMMC 4.4 버전으로 추정된다.
- 입출력 단자는 USB 3.0 1개 포트, USB 2.0 2개 포트가 있으며, 유선 이더넷 100Mbps 단자가 있다.
- Wi-Fi 2.4GHz 대역을 사용하며, 블루투스 4.0을 지원한다. 5 Ghz를 지원했으면 하는 아쉬움이 있으나, 새롭게 출시된 버전에서는 이러한 문제점을 의식했는지 802.11AC를 공식 지원한다.
- OS는 공식적으로 Windows를 지원하지만 본 환경에서는 Lattepada에서 공식으로 지원하는 ubuntu 16.04 LTS 버전에서 18.04 LTS 버전으로 업데이트하여 진행하였다.
본 테스트는 네트워크, 스토리지 속도에 대해서 Docker 환경과 물리머신 환경에서 얼마나 차이가 나는지에 대해서 진행하였다. Docker 버전은 2019년 7월 15일 기준 최신 버전으로 진행하였다. 다만 머신이 라떼판다에 한정되어 있으며, 테스트 환경과 방식에 따라 차이가 날 수 있기 때문에 절대적인 신뢰가 아닌 참고용으로 확인해 주길 바란다.
네트워크 속도 테스트
라떼판다는100Mbps 이더넷을 지원하기 때문에 큰 변화를 느끼기 힘들 것이라 생각했다. 테스트는 iperf3 프로그램을 사용했으며, NETGEAR의 1 Gbps 스위치와 서버는 리얼텍 NIC가 메인보드에 포함된 1 Gbps 이더넷 환경에서 10번의 속도 평균치를 계산하였다.
- 물리 머신에서의물리 머신에서의 네트워크 속도
디바이스 | Sender(Mbits/sec) | Receiver Bandwidth (Mbits/sec) |
---|---|---|
A | 94.7 | 94.2 |
B | 94.7 | 94.2 |
C | 94.8 | 94.2 |
A, B, C 디바이스 모드 똑같은 네트워크 속도를 보여주고 있다. 100 Mbps 이더넷이라는 것을 감안할 때 정상적인 수치라는 것을 확인할 수 있다.
- Docker - Real Server 환경에서의 네트워크 속도
디바이스 | Sender(Mbits/sec) | Receiver Bandwidth (Mbits/sec) |
---|---|---|
A | 95.2 | 94.3 |
B | 95.7 | 94.3 |
C | 95.2 | 95.2 |
Docker환경과 리얼서버에서의 이더넷 속도를 살펴보면 이전 테스트에 비해서 아주 소폭 상승한 것을 확인할 수 있는데 이는 오차범위 안의 값이라고 생각할 수 있다.
- Docker - Docker 환경에서의 속도
디바이스 | Sender(Mbits/sec) | Receiver Bandwidth (Mbits/sec) |
---|---|---|
A | 95.3 | 94.3 |
B | 95.4 | 94.3 |
C | 95.6 | 94.3 |
Docker - Docker 네트워크도 앞서 벤치 테스트 결과와 크게 다르지 않은 값을 보여주고 있다. 라떼판다에서 지원하는 이더넷 속도가 낮기 때문에 큰 차이를 보이지 않는 것일 수도 있으며, Docker 버전이 올라가면서 네트워크 성능이 향상되었을 수도 있다. 이 부분에 대해서는 차후 1 Gbps, 10 Gbps, 네트워크 환경과, 물리 머신 위에 Docker, 하이퍼바이저 위에서 동작하는 게스트 OS 상의 Docker 테스트를 진행하면 좀 더 의미 있는 결과를 얻을 수 있지 않을까 생각한다.
스토리지 속도 테스트
Ubuntu 상에서 1MB 파일을 1024번 반복, 읽기 쓰기를 진행하는 작업을 총 5회 진행하여 평균치를 계산하였으며, 읽기 작업시에는 캐시를 지운 상태에서 진행하였음을 알린다.
- 디바이스 쓰기 속도 평균
디바이스 | 속도 |
---|---|
A | 87.1800 MB/s |
B | 34.4000 MB/s |
C | 86.9000 MB/s |
이 테스트에서 이상한 점은 B 디바이스가 쓰기 속도가 심각하게 떨어진다는 점을 알 수 있었다. A, C 디바이스가 약 85MB/s의 속도를 보여주는 것에 반해서 34.4MB/s 속도를 보여준다는 것은 B 디바이스의 eMMC의 수명이 떨어졌거나, TRIM이 진행되지 않은 상태 등 이유로 인해 많은 성능 하락이 있지 않았을까 하는 생각이 든다.
- 디바이스 읽기 속도 평균
디바이스 | 속도 |
---|---|
A | 162.4000 MB/s |
B | 148.6000 MB/s |
C | 161.2000 MB/s |
B디바이스의 문제가 읽기 속도에서 여김 없이 나타났다. 지금까지의 벤치를 보았을 때, 라떼판다의 스토리지 성능은 ATA/100 인터페이스와 연결된 하드디스크와 유사한 성능을 보여준다는 것을 알 수 있다.
- Docker 디스크 쓰기 속도
디바이스 | 속도 |
---|---|
A | 84.8200 MB/s |
B | 20.9600 MB/s |
C | 85.2600 MB/s |
Docker 환경에서 디스크 쓰기 속도를 테스트했을 때 B의 속도는 체감이 될 정도로 떨어진 것을 확인할 수 있었으며, A, B의 경우도 오차범위일 수 있지만 소폭 하락한 모습을 볼 수 있었다. Docker 컨테이너 환경에서 디스크 쓰기 작업에서는 어느 정도 영향이 있는 것으로 추측되는 부분이다.
- Docker 디스크 읽기 속도
디바이스 | 속도 |
---|---|
A | 163.6667 MB/s |
B | 150.0000MB/s |
C | 157.0000 MB/s |
읽기 속도는 A, B, C 디바이스 모두 비슷한 성능을 보여주고 있다. 여기서 재미있는 점은 B 디바이스가 물리 머신에서 비해 소폭 향상된 모습을 볼 수 있는데 이 부분에 대해서는 다양한 저장 스토리지를 대상으로 테스트를 진행해야 한다는 생각이 드는 부분이다.
이렇게 3개의 라떼판다를 가지고 네트워크와 디스크 속도를 벤치를 진행하였는데 한정된 디바이스로 테스트한 결과이기 때문에 참고 용도로 확인하면 좋을 것 같으며, 차후 더 많은 디바이스로 벤치를 진행하면 좋지 않을까 하는 생각이 든다. 하나 컨테이너 환경이라도 라떼판다의 물리 머신의 성능과 크게 차이가 나지 않는다는 점이 인상적이었다.
'Container' 카테고리의 다른 글
ELK Docker 설치 방법 (6) | 2019.08.20 |
---|---|
Mattermost 설치 및 운영하기 (9) | 2019.08.19 |
Docker Swarm으로 시작하는 오케스트레이션 - 1 (0) | 2019.05.07 |
Docker Postgresql 설치 및 셋팅하기 (9) | 2019.02.25 |
Docker Node Example (0) | 2019.01.08 |