성능 측정은 인프라의 기본입니다.
특히 서버와 네트워크의 성능 측정은 현업에서 자주 요구되는 시험 중 하나입니다.
다양한 방법의 시험이 있겠지만, 리눅스 환경에서는 iperf라는 걸출한 도구가 있어 시험이 쉽습니다.
물론 실제 어플리케이션의 성능 측정 등은 nGrinder와 같은 부하 도구를 사용해야 합니다.
CentOS 환경에 iperf3 설치하기
iperf의 가장 최신 버전은 3 입니다.
각 리눅스 환경에서 패키지 매니저를 이용하여 쉽게 설치 가능합니다.
제 경우는 CentOS 환경이라 yum 으로 설치를 진행했습니다.
$ sudo yum install iperf3
...
...
Dependencies Resolved
======================================================================================================================
Package Arch Version Repository Size
======================================================================================================================
Installing:
iperf3 x86_64 3.1.7-2.el7 base 79 k
Transaction Summary
======================================================================================================================
Install 1 Package
Total download size: 79 k
...
...
Running transaction
Installing : iperf3-3.1.7-2.el7.x86_64 1/1
Verifying : iperf3-3.1.7-2.el7.x86_64 1/1
Installed:
iperf3.x86_64 0:3.1.7-2.el7
기본적인 사용 방법 : 서버와 클라이언트의 구성
iperf3는 서버 역할을 할 데몬과 클라이언트 역할을 할 데몬을 실행함으로써 시험을 수행하게 됩니다.
성능 측정을 하고자 하는 대상 장비, 인스턴스에서 iperf3를 서버 모드로 실행하고
다른 장비에서 iperf3를 클라이언트 모드로 실행하여 성능을 측정합니다.
서버 모드로 iperf3 실행하기
iperf3를 서버 모드로 실행하기 위해서는 -s 파라메터를 지정합니다.
서버의 성능은 대역폭 혹은 전송량으로 표기되는데
-f 파라메터 뒤에 소문자 m, g, t 등을 사용하면 대역폭으로
-f 파라메터 뒤에 대문자 M, G, T 등을 사용하면 전송량으로 표기합니다.
iperf2는 기본적으로 5201 포트로 수신을 합니다만
다른 포트를 사용하기 위해 -p 파라메터와 포트 번호를 지정할 수도 있습니다.
// 서버 모드로 iperf3를 실행
$ iperf3 -s
// 서버 모드로 iperf3를 실행하되 대역폭을 Mbps로 표기
$ iperf3 -s -f m
// 서버 모드로 iperf3를 실행하되 대역폭을 Gbps로 표기
$ iperf3 -s -f g
// 서버 모드로 iperf3를 실행하되 전송량 GB/sec로 표기
$ iperf3 -s -f G
// 기본 포트(5201)가 아닌 지정된 포트로 서버 구동
$ iperf3 -s -f g -p 1234
-----------------------------------------------------------
Server listening on 1234
-----------------------------------------------------------
클라이언트 모드로 iperf3 실행하여 시험 수행하기
서버를 구동했다면 이제 클라이언트를 구동할 차례입니다.
옵션은 서버로 쓸때와 비슷한데요
접속 대상 iperf3 서버 IP를 -c 옵션으로 지정한다는 정도의 차이가 있습니다.
// 서버 10.20.30.40 으로 시험 패킷을 전송
$ iperf3 -c 10.20.30.40
// 서버 10.20.30.40를 1234번 포트로 연결하여 시험 패킷을 전송
$ iperf3 -c 10.20.30.40 -p 1234
// 시험 패킷을 전송하되 단위를 Mbps로 표기
$ iperf3 -c 10.20.30.40 -p 1234 -f m
// 시험 패킷을 전송하되 단위를 MB/sec로 표기
$ iperf3 -c 10.20.30.40 -p 1234 -f M
시험 심화 : UDP 시험
기본적으로 iperf3는 TCP 시험을 수행합니다.
그런데 UDP 도 널리 쓰이고 있기 때문에 시험이 필요할 수 있습니다.
이때는 다음과 같이 -u 옵션을 사용하면 됩니다.
서버는 -u 옵션을 사용하지 않아도 되고, 클라이언트에서만 -u 옵션을 사용하면 됩니다.
$ iperf3 -c 10.20.30.40 -p 1234 -f M -u
Connecting to host 10.20.30.40, port 1234
[ 4] local 10.20.30.50 port 32888 connected to 10.20.30.40 port 1234
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 116 KBytes 0.11 MBytes/sec 82
[ 4] 1.00-2.00 sec 129 KBytes 0.13 MBytes/sec 91
[ 4] 2.00-3.00 sec 127 KBytes 0.12 MBytes/sec 90
[ 4] 3.00-4.00 sec 129 KBytes 0.13 MBytes/sec 91
[ 4] 4.00-5.00 sec 127 KBytes 0.12 MBytes/sec 90
[ 4] 5.00-6.00 sec 129 KBytes 0.13 MBytes/sec 91
[ 4] 6.00-7.00 sec 127 KBytes 0.12 MBytes/sec 90
[ 4] 7.00-8.00 sec 129 KBytes 0.13 MBytes/sec 91
[ 4] 8.00-9.00 sec 127 KBytes 0.12 MBytes/sec 90
[ 4] 9.00-10.00 sec 129 KBytes 0.13 MBytes/sec 91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-10.00 sec 1.24 MBytes 0.12 MBytes/sec 0.006 ms 0/897 (0%)
[ 4] Sent 897 datagrams
iperf Done.
시험 심화 : 다중 TCP 연결 시험
현실의 서버들은 단일 TCP 연결이 아니라 다중 TCP 연결을 쓰게 됩니다.
iperf3는 이런 상황을 대비하여 다중 스트림을 쏠 수 있는 기능도 제공합니다.
-t 옵션을 사용하면서 뒤에 스트림 숫자를 지정해 주면 됩니다.
$ iperf3 -c 10.20.30.40 -p 1234 -f m -P 20
소개한 옵션들은 사실 기본적인 옵션들입니다.
각자의 상황에 필요한 옵션은 공식 문서를 통해 찾아 보는게 좋겠습니다!
https://github.com/esnet/iperf