티스토리 뷰

개발/Linux

회선 대역폭 측정 (iperf)

Jaeyeon Baek 2011. 8. 31. 22:00


회선 대역폭을 측정하기 위한 툴로 다양햔 open-source가 존재합니다. 이번 포스팅은 그 중 가장 강력한(?) 툴인 iperf를 설명하고자 합니다 (굉장히 주관적인 생각). 우선 source는 여기에서 다운 받고 compile은 README에 있는 내용처럼, 

 ./configure      -- configure for your machine
 make             -- compile Iperf

두가지만 해주면 됩니다. 간단하지 않은가요?

compile 이 완료되었으면 회선 대역폭을 측정하고자 하는 장비(혹은PC)에 compile의 결과물인 iperf를 넣어주기만 하면 준비는 끝입니다. 이제 옵션을 알아 볼텐데, document 보다 더한 설명이 어디있을까요, 우선 document 를 참조합니다,


index.html

자세하게 옵션에 대해 설명이 되어 있는데, 이중 몇개 간추려보자면, 기본적으로 s는 iperf 를 server로 사용하겠다는 것이고, (server로 사용시에 기타 옵션은 거의 사용하지 않습니다.) c는 iperf 를 client로 사용하겠다는 의미입니다. 기타 유용한 옵션은 아래와 같습니다.

Client 기준 옵션

d

양방향 측정 (동시 진행정확도 떨어짐)

r

양방향 측정 (수신이 끝나면 측정, 서버 쪽에서만 결과 보임, 정확도 괜찮음)

t

전송 시간(?)… default 10초 (defualt로 초당 10MB 송신, 10초 일경우 100MB송신) 

P

몇 개의 포트에서 나누어 송신할지많으면 정확도 떨어짐..

i

Interval… 초당 전송되는 현황 output으로 출력 (default 0)


공통 옵션

B

Interface binding.. client, server 입장에서 측정하고자 하는 interface 설정




자, 이제 옵션에 대한 설명은 접고, 실제 동작을 알아봅시다.

 


위 그림과 같이 PC_1 과 PC_2 에 각각 iperf가 있는 상태엥서 단방향 테스트는 간단합니다. Sever로 사용할 PC에서 iperf를 server옵션을 주고 실행을 시켜놓고,

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

반대쪽 Client로 사용할 PC에서 Packet을 전송하기만 하면 됩니다. 전송은 간단하게 iperf를 Client 옵션을 주고, Server IP만 입력해주면됩니다.

$ iperf -c xxx.xxx.xxx.xxx -t 1   (t옵션은 1초 동안만 packet을 보내겠다는 의미)
------------------------------------------------------------
Client connecting to xxx.xxx.xxx.xxx, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local yyy.yyy.yyy.yyy port 36709 connected with xxx.xxx.xxx.xxx port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  8.12 MBytes  67.4 Mbits/sec
$ 

xxx.xxx.xxx.xxx 는 Server IP, yyy.yyy.yyy.yyy는 Clienet IP ... 개인정보로 인해 감추었습니다. 여하튼 결과는 바로 확인 가능합니다, 이 결과는 Server에 Upload에 대한 대역폭입니다. 여기까지는 어느 블로그에 가도 모두 포함되어 있는 내용이고, 이제 양방향을 테스트 해봅니다. 기본적으로 양방향 테스트를 위해서는 Client 쪽에도 iperf의 Server가 동작되어야 합니다. 양방향이라고 하면 당연히 송신과 수신을 해야할테니까.

Client에서 우선 Server를 데몬으로 실행시켜둡시다, (직전 테스트에서 Server를 데몬으로 실행시키지 않은것은, Server쪽에서도 Client에서 측정한 결과를 볼 수 있기 때문입니다. 이때 Server쪽에 출력되는 결과는 Download에 대한 측정 결과가 됩니다)

$ iperf -s &         
Running Iperf Server as a daemon
The Iperf daemon process ID : 11626
$ 
$ ps | grep iperf
11626 root        416 S   iperf -s -D 
$ 

그리고 동일하게 Server쪽도 iperf를 Server옵션을 주고 올리도록 합니다. 이제부터 편의상 Server는 PC_2, Client는 PC_1이라 칭합니다. 현재 상태는 PC_2에는 (iperf -s) 옵션으로 iperf가 올라와 있는 상태이고, PC_1에는 (iperf -s &) 옵션으로 iperf가 실행되어 있는 상태입니다, 그럼 이상태에서 PC_1에서 양방향 대역폭을 측정해 봅니다.

옵션은 간단합니다. 직전 테스트에 옵션 -r 만 추가하도록 합니다.

$ iperf -c xx.xx.xx.xx -t 1 -r
bind failed: Address already in use
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to xx.xx.xx.xx, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  5] local yy.yy.yy.yy port 56588 connected with xx.xx.xx.xx port 5001
Waiting for server threads to complete. Interrupt again to force quit.
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0- 1.0 sec  8.05 MBytes  67.2 Mbits/sec
[  4] local yy.yy.yy.yy port 5001 connected with xx.xx.xx.xx port 44895
$ [ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 1.0 sec  8.34 MBytes  69.6 Mbits/sec

$

빨간색은 Client에서 Server로의 Upload 대역폭을 나타내고, 파란색은 Download 대역폭을 나타냅니다.

이 테스트는 TCP를 이용한 회선 대역폭 측정으로 UDP에 비해 정밀도가 높고, 보통 회선대역폭을 측정해주는 사이트를 보면 100MB FULL로 packet을 발생시켜 측정하지만 테스트는 10MB 정도의 Packet을 발생시켰습니다, 이정도만 해도 어느정도 정확한 값에 근사하므로.. document 를 참조하면 더욱 다양하고 재미있는 옵션들이 있으니 꼭 한번 시간을 내서 확인하도록 하고, 이번 포스팅은 여기서 마치도록 합니다.

'개발 > Linux' 카테고리의 다른 글

kernel thread 목록  (0) 2011.09.05
drop_caches (caches flush)  (0) 2011.09.05
struct size의 오해와 진실...  (0) 2011.08.25
전처리문 - #ifdef AND ...  (0) 2011.08.17
pthread_cond_wait, pthread_cond_signal  (0) 2011.08.17
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday