WiFi Dongle 칩 선정을 위한 성능 테스트 결과 정리를 목적으로 만들어졌다.
이 문서에서는 'Ralink, Broadcom' Dongle을 대상으로 테스트 할 것이다. Realtek 은 번외로 하겠다.
하지만, 성능 테스트에 사용할 AP 는 Ralink, Broadcom, Realtek, Atheros 에서 추천한 제품들을 사용할 것이다.
테스트는 크게 Infrastruct/Ad-hoc 모드로 나눠서 할 것이다. 테스트는 부팅을 하여 화면이 출력되었을 때, WiFi Dongle 을 꽂아서 측정한다.
AP 접속 방식은 WPA2PSK AES 인증을 사용한다. 간단하게 아래의 그림과 같다.
실험 조건은 다음과 같다.
- 802.11 n only
- WPA2-PSK AES
- 2.4 GHz / 5 GHz
- Channel Bandwidth : AUTO(20/40)
- Infrastructure / Ad-Hoc mode
테스트 방법
iperf
iperf 포팅하기
여기서는 정해진 시간 동안 얼마만큼의 데이터를 주고 받는지를 알 수 있는 Throughput 을 측정할 것이다. 이를 위해서 http://sourceforge.net/projects/iperf iperf 라는 측정 툴을 사용한다. 가장 최신 버전인 2.0.4 를 받는다.
$tar xzf iperf-2.0.4.tar.gz $cd iperf-2.0.4 $./configure
타겟에 포팅을 해야 하기 때문에, 컴파일 환경을 수정해야 한다.
$vi Makefile $vi compat/Makefile $vi man/Makefile $vi src/Makefile $vi doc/Makefile $vi include/Makefile
각각의 Makefile 들은 거의 대부분 수정 포인트가 비슷하다.
... CC = mipsel-linux-gcc CPP = mipsel-linux-gcc CXX = mipsel-linux-gcc PTHERAD_CC = mipsel-linux-gcc ac_ct_CC = mipsel-linux-gcc ac_ct_CXX = mipsel-linux-gcc DEFS = -static 추가 iperf_LDFLAGS = -static 추가(src/Makefile 경우) ...
수정 후에 make 를 실행하면, 에러없이 컴파일이 완료된다. 타겟에 올리면 된다.
iperf 사용하기
성능 측정은 각각 Upload, Download 속도를 측정할 것이다. 측정하려는 것에 따라서 PC 와 타겟에서는 각기 다른 명령으로 iperf 를 실행해야 한다.
크게 서버모드와 클라이언트 모드가 있다.
PC | 타겟 | |
Upload 측정시 | 서버 | 클라이언트 |
Download 측정시 | 클라이언트 | 서버 |
테스트를 하다보면, 혼동하는 경우가 종종 발생하는데 이럴 때는 단순하게 클라이언트는 항상 패킷을 보내는 쪽이라고 생각하면 쉽다.
서버 모드 실행하기
#iperf -s -w 202k -f m
클라이언트 모드 실행하기
#iperf -c 서버IP -w 202k -f m -t 60 -i 10 // 60 초동안 202 Kbyte 정도의 데이터를 서버에게 전송. 이때 단위는 Mega 이고 10 초마다 Throughput 을 출력
-h 옵션을 사용하면, iperf 실행 시에 사용할 수 있는 옵션들에 대해서 알 수 있다. 위에서 사용한 옵션들에 대해서 간단히 설명하면 다음과 같다.
옵션 | 설명 |
-s | 서버 모드로 실행 |
-c | 클라이언트 모드로 실행 |
-w 숫자 | 한번에 생성할 윈도우(즉 데이터)의 크기 |
-f m | Mega 단위로 출력 |
-t 숫자 | 측정할 시간 입력 |
-i 숫자 | 지정한 초(숫자)마다 Throughput 출력 |
스크립트 파일 생성하기
AP 접속을 위해서는 매번 부팅 시마다 동일한 명령어를 여러번 실행해야 한다. 일일이 타이핑한다면, 그야말로 노가다가 될 것이다. 이를 방지하기 위해 아래와 같이 ralink, broadcom 의 스크립트 파일을 만들었다.
참고로 infrastruct 의 경우는 WPA2-PSK AES 방식을, ad-hoc 의 경우에는 암호가 없는 open 방식을 사용하도록 만들었다.
ralink
ralink.sh (infrastruct mode)
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless/ralink/ insmod rt3572sta.ko #/sbin/insmod /mnt/lg/lgapp/drivers/wireless/ralink/rt3572sta.ko #/bin/sleep 10 ifconfig ra0 up #/bin/sleep 3 /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set NetworkType=Infra /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set AuthMode=WPA2PSK /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set EncrypType=AES /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set SSID="ASW" /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set WPAPSK="abcdefgh" /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set SSID="ASW" #/bin/sleep 3 cd /mnt/lg/lgapp/drivers/wireless/ ./busybox udhcpc -i ra0 -s simple.script renew #/mnt/lg/lgapp/drivers/wireless/busybox udhcpc -i ra0 -s simple.script renew
ralink_adhoc.sh (ad-hoc mode)
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless/ralink/ insmod rt3572sta.ko #/sbin/insmod /mnt/lg/lgapp/drivers/wireless/ralink/rt3572sta.ko #/bin/sleep 10 ifconfig ra0 up #/bin/sleep 3 /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set NetworkType=Adhoc /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set AuthMode=OPEN /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set EncrypType=NONE /mnt/lg/lgapp/drivers/wireless/iwpriv ra0 set SSID="ASW" ifconfig ra0 192.168.100.81 up route add default gw 192.168.100.1 dev ra0 #/bin/sleep 3 #cd /mnt/lg/lgapp/drivers/wireless/ #./busybox udhcpc -i ra0 -s simple.script renew #/mnt/lg/lgapp/drivers/wireless/busybox udhcpc -i ra0 -s simple.script renew
broadcom
bcm.sh (infrastruct mode)
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless/bcm/ insmod usbabs.ko insmod wl.ko ./bcmdl rtecdc.trx sleep 3 ifconfig eth0 up /mnt/lg/lgapp/drivers/wireless/bcm/wl down /mnt/lg/lgapp/drivers/wireless/bcm/wl up /mnt/lg/lgapp/drivers/wireless/bcm/wl infra 1 /mnt/lg/lgapp/drivers/wireless/bcm/wl wsec 4 /mnt/lg/lgapp/drivers/wireless/bcm/wl sup_wpa 1 /mnt/lg/lgapp/drivers/wireless/bcm/wl wpa_auth 128 /mnt/lg/lgapp/drivers/wireless/bcm/wl set_pmk abcdefgh /mnt/lg/lgapp/drivers/wireless/bcm/wl ssid ASW /bin/sleep 3 /mnt/lg/lgapp/drivers/wireless/bcm/wl status cd /mnt/lg/lgapp/drivers/wireless/ ./busybox udhcpc -i eth0 -s simple.script renew
bcm_adhoc.sh (ad-hoc mode)
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless/bcm/ insmod usbabs.ko insmod wl.ko ./bcmdl rtecdc.trx sleep 3 ifconfig eth0 up /mnt/lg/lgapp/drivers/wireless/bcm/wl down /mnt/lg/lgapp/drivers/wireless/bcm/wl up /mnt/lg/lgapp/drivers/wireless/bcm/wl infra 0 /mnt/lg/lgapp/drivers/wireless/bcm/wl auth 0 /mnt/lg/lgapp/drivers/wireless/bcm/wl wpa_auth 0 /mnt/lg/lgapp/drivers/wireless/bcm/wl wsec 0 /mnt/lg/lgapp/drivers/wireless/bcm/wl ssid ASW /bin/sleep 3 /mnt/lg/lgapp/drivers/wireless/bcm/wl status ifconfig eth0 192.168.100.81 route add default gw 192.168.100.1 dev eth0 #cd /mnt/lg/lgapp/drivers/wireless/ #./busybox udhcpc -i eth0 -s simple.script renew
iperf 사용하기
server.sh
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless ./iperf -s -w 202k -f m
client.sh
#!/bin/sh cd /mnt/lg/lgapp/drivers/wireless #./iperf -s -w 202k -f m ./iperf -c $1 -w 202k -f m -t 60 -i 10
chariot
iperf 와는 달리 chariot 은 유상 프로그램이다. 가격은 약 2000 만원선이다.
iperf 처럼 타겟과 호스트 프로그램으로 나뉘어져 있는데, 타겟에 올리는 프로그램은 http://www.ixiacom.com/support/endpoint_library/embedded_endpoints 제조사 홈페이지에서 무료로 다운받을 수 있다.
하지만, PC 에 설치하는 호스트 프로그램이 2000 만원이다.
다운 받을 때, 'Embedded Endpoints' 탭에서 'Open WRT Operating System (Linux/MIPS)' 을 받는다.
이 파일은 컴파일이 필요없이 타겟에 올리면 바로 실행이 가능하다. 하지만, 몇가지 전제 조건이 필요하다.
타겟에 .tar 채로 올려야 한다. 그리고, /tmp 디렉토리 아래에 압축을 푼다. 그리고 아래와 같이 endporint 를 실행한다.
# tar xf pelinux_mipsle_710.tar -C /tmp # cd /tmp/temp # mount /var # mkdir -p /var/local # ./endpoint & Processing INI file (/tmp/temp/endpoint.ini). ENDPOINT Performance Endpoint, Version 7.10 SP2 (Retail) Copyright (c) Ixia, 2003-2010. Copyright (c) NetIQ Corporation, 1995-2003. U.S. Patents 5,838,919, 5,881,237, 5,937,165, 6,061,725, 6,397,359, and 6,408,335. Other Patents Pending. Build 167 Endpoint INI information in use: All available protocols are enabled. All consoles may run tests on this endpoint. Security Auditing: NONE Audit filename: /tmp/temp/endpoint.aud Support for IP Multicast is enabled. CHR0503: Notice: unable to register with the Ixia Discovery Server. Support for disabling and enabling TCP's Nagle Algorithm is available. Support for disabling and enabling generation of the UDP checksum is available. Support for setting the Maximum Segment Size is available. Support for TCP protocol has been started.
위와 같이 출력 메세지가 나왔다면, 이제 호스트 쪽에서 프로그램을 실행하여 테스트가 가능하다.
테스트 결과
wifi_test_result.xls 이것은 테스트 결과를 엑셀파일로 만든 것이다.
업체별 상황
Ralink
Broadcom 을 제외하고는 가장 높은 Throughput 을 보인다. 하지만, iperf 실행시 CPU 점유율이 90 % 에 육박한다. 따라서 TV Application 이 제대로 동작하지 않는다.
이후 Ralink 엔지니어와 이 문제에 대해서 얘기해본 결과, 주 원인은 216 Mhz 의 Saturn6 였다. 테스트에서 나온 수치가 Saturn6 플랫폼에서 낼 수 있는 가장 최고의 속도라는 결론을 얻었다.
400 Mhz 정도의 BCM 플랫폼에서 Down 의 경우, 60 ~ 80 Mbps 이면서, CPU 점유율이 30 ~ 40 % 되는 것을 보면 어느정도 일리가 있는 설명이다.
Broadcom
Throughput 이 Ralink 의 작게는 1/5, 많게는 1/10 정도 밖에 안된다. 아직 정확한 원인은 밝혀지지 않았고, 현재 BCM 본사에 리포팅을 해놓은 상태다.
이틀 간의 Broadcom 엔지니어의 지원 덕분에 Up 의 경우에는 15 Mbps, Down 의 경우에는 23 Mbps 의 결과를 얻었다. Throughput 이 올라갈 수록 CPU 점유율은 올라가는 현상은 Ralink 와 동일했다. 이를 확인해볼 수 있는 방법은 AP 의 'MCS' 항목을 'AUTO' 가 아닌 가장 작은 값인 '1' 수정해서 테스트를 해보는 것이다.
Realtek
혹시나 했지만, 디바이스 드라이버가 불안정해서 테스트를 여러번 시도한 끝에 측정이 가능했다. UP 의 경우, 어느 정도 신빙성 있는 자료를 얻었지만 Down 의 경우, 믿기 어려울 정도로 낮은 Throughput 을 얻었다.
Broadcom 이 가진 문제와 비슷해 보인다. 측정결과 Up 의 경우에는 12 Mbps, Down 의 경우에는 13 Mbps 의 결과를 얻었다.
결론
wifi_result_final.ppt PPT 파일 로 정리했다. 성능 측정 결과, 약간의 차이이긴 하지만 Ralink 가 높고 기술지원이나 중간에 Running Change 가 없어 S/W 적으로 부담이 적은 'Ralink' 로 최종 결정했다.