실험 환경과 자료의 범위
아래는 Ubuntu 10.10, 커널 2.6.35, MadWifi와 당시 영상 품질 도구를 사용한 과거 실험 기록입니다. 현재 운영체제에 그대로 설치하는 안내가 아니며, 명령 출력과 측정 수치는 해당 환경의 결과로 읽어야 합니다. 이번 보완에서 실험을 재현하거나 새 성능 수치를 측정하지 않았습니다.
UDP 손실과 화질을 구분해서 읽기
수신 프레임 수가 줄었다는 것은 이 실험에서 관찰한 현상입니다. 프레임 수의 비율만으로 모든 영상의 품질이나 실제 회선 속도를 판단할 수는 없습니다. 비교하려면 전송률, 패킷 손실, 지연 변동과 영상 재생 결과를 함께 기록하고, 동일한 영상·전송 시간·배경 트래픽 조건을 맞춰야 합니다.
현재 도구와 과거 명령을 혼용하지 마세요
현재 iperf3의 옵션은 ESnet 공식 실행 문서에서 확인할 수 있습니다. 아래 과거 iperf 명령과 iperf3는 버전과 동작을 별도로 확인해야 하며, 이름이 비슷하다고 명령을 그대로 옮겨 쓰지 않습니다. 부하 실험은 허가된 격리 환경에서 범위를 정해 수행하세요.
QoS 개선 제안이 입증하려는 것
우선순위를 주자는 제안과 실제 효과 검증은 서로 다른 단계입니다. 같은 조건에서 적용 전후의 손실·지연·재생 결과를 비교해야 개선 효과를 평가할 수 있습니다. 아래의 짧은 프레임 구간에 대한 관찰을 모든 실시간 스트리밍에 일반화하지 않습니다.
1단계 – madwifi 설치하기
설치환경:
시스템 – Intel Mac with Atheros ar5008
운영체제 – ubuntu 10.10 (커널버젼: 2.6.35-22-generic)
사용한 드라이버 – http://snapshots.madwifi-project.org/madwifi-0.9.4-current.tar.gz
(madwifi 0.9.4-r4133-20100922 수정버젼)
설치전 작업:
– 시냅틱 꾸러미 관리자를 사용하여 linux-headers, build-essential, bin86, sharutils 설치
# make
| qdwe@ubuntu:~/Mobile/madwifi-0.9.4-r4133-20100922$ make Checking requirements… ok. Checking kernel configuration… ok. make -C /lib/modules/2.6.35-22-generic/build SUBDIRS=/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922 modules make[1]: Entering directory `/usr/src/linux-headers-2.6.35-22-generic’ CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath/if_ath.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath/if_ath_pci.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath/ath_pci.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/ah_os.o HOSTCC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/uudecode UUDECODE /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/i386-elf.bin UNMANGLE /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/i386-elf.hal.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/ath_hal.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr/amrr.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr/ath_rate_amrr.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel/minstrel.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel/ath_rate_minstrel.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe/onoe.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe/ath_rate_onoe.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample/sample.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample/ath_rate_sample.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/if_media.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_beacon.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_crypto.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_crypto_none.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_input.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_node.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_output.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_power.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_proto.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_scan.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_wireless.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_linux.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_monitor.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_rate.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_acl.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_crypto_ccmp.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_scan_ap.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_scan_sta.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_crypto_tkip.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_crypto_wep.o CC [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/ieee80211_xauth.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_wep.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_tkip.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_ccmp.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_acl.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_xauth.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_sta.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_ap.o Building modules, stage 2. MODPOST 14 modules CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath/ath_pci.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath/ath_pci.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/ath_hal.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal/ath_hal.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr/ath_rate_amrr.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr/ath_rate_amrr.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel/ath_rate_minstrel.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel/ath_rate_minstrel.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe/ath_rate_onoe.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe/ath_rate_onoe.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample/ath_rate_sample.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample/ath_rate_sample.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_acl.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_acl.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_ccmp.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_ccmp.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_ap.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_ap.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_sta.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_scan_sta.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_tkip.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_tkip.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_wep.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_wep.ko CC /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_xauth.mod.o LD [M] /home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211/wlan_xauth.ko make[1]: Leaving directory `/usr/src/linux-headers-2.6.35-22-generic’ make -C ./tools all || exit 1 make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/tools’ gcc -o athstats -g -O2 -Wall -I. -I../hal -I.. -I../ath athstats.c athstats.c: In function ‘main’: athstats.c:285: warning: format not a string literal and no format arguments athstats.c:287: warning: format not a string literal and no format arguments athstats.c:307: warning: format not a string literal and no format arguments athstats.c:309: warning: format not a string literal and no format arguments athstats.c:344: warning: format not a string literal and no format arguments gcc -o 80211stats -g -O2 -Wall -I. -I../hal -I.. 80211stats.c 80211stats.c: In function ‘main’: 80211stats.c:290: warning: format not a string literal and no format arguments gcc -o athkey -g -O2 -Wall -I. -I../hal -I.. athkey.c gcc -o athchans -g -O2 -Wall -I. -I../hal -I.. athchans.c gcc -o athctrl -g -O2 -Wall -I. -I../hal -I.. athctrl.c gcc -o athdebug -g -O2 -Wall -I. -I../hal -I.. athdebug.c gcc -o 80211debug -g -O2 -Wall -I. -I../hal -I.. 80211debug.c gcc -o wlanconfig -g -O2 -Wall -I. -I../hal -I.. wlanconfig.c wlanconfig.c: In function ‘if_find_unit’: wlanconfig.c:297: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result wlanconfig.c: In function ‘list_keys’: wlanconfig.c:830: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result wlanconfig.c: In function ‘ieee80211_status’: wlanconfig.c:946: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/tools’ qdwe@ubuntu:~/Mobile/madwifi-0.9.4-r4133-20100922$ |
# make install
| qdwe@ubuntu:~/Mobile/madwifi-0.9.4-r4133-20100922$ sudo make install |
password for qdwe:
sh scripts/find-madwifi-modules.sh -r 2.6.35-22-generic
for i in ath/ ath_hal/ ath_rate/ net80211/; do \
make -C $i install || exit 1; \
done
make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_pci.ko //lib/modules/2.6.35-22-generic/net
make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath’
make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_hal.ko //lib/modules/2.6.35-22-generic/net
make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_hal’
make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate’
for i in amrr/ onoe/ sample/ minstrel/; do \
make -C $i install || exit 1; \
done
make[2]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_rate_amrr.ko //lib/modules/2.6.35-22-generic/net
make[2]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/amrr’
make[2]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_rate_onoe.ko //lib/modules/2.6.35-22-generic/net
make[2]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/onoe’
make[2]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_rate_sample.ko //lib/modules/2.6.35-22-generic/net
make[2]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/sample’
make[2]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel’
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
install -m 0644 ath_rate_minstrel.ko //lib/modules/2.6.35-22-generic/net
make[2]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate/minstrel’
make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/ath_rate’
make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211′
test -d //lib/modules/2.6.35-22-generic/net || mkdir -p //lib/modules/2.6.35-22-generic/net
for i in wlan.o wlan_wep.o wlan_tkip.o wlan_ccmp.o wlan_acl.o wlan_xauth.o wlan_scan_sta.o wlan_scan_ap.o; do \
f=`basename $i .o`; \
install -m 0644 $f.ko //lib/modules/2.6.35-22-generic/net; \
done
make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/net80211′
(export KMODPATH=/lib/modules/2.6.35-22-generic/net; /sbin/depmod -ae 2.6.35-22-generic)
WARNING: -e needs -E or -F
make -C ./tools install || exit 1
make[1]: Entering directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/tools’
install -d /usr/local/bin
for i in athstats 80211stats athkey athchans athctrl athdebug 80211debug wlanconfig; do \
install $i /usr/local/bin/$i; \
strip /usr/local/bin/$i; \
done
install -d /usr/local/man/man8
install -m 0644 man/*.8 /usr/local/man/man8
install ../scripts/madwifi-unload /usr/local/bin/madwifi-unload
make[1]: Leaving directory `/home/qdwe/Mobile/madwifi-0.9.4-r4133-20100922/tools’
qdwe@ubuntu:~/Mobile/madwifi-0.9.4-r4133-20100922$
# sudo gedit /etc/modules
마지막줄에 ath_pci 추가.
2단계 – UDP 스트리밍
Application
- 서버-클라리언트 구조의 파일(데이터) 전송 프로그램 구현
- 소스 파일 udp_project 폴더 참조
- Client 폴더 : 클라이언트 파트 소스 파일 (파일 Sender 측)
- Sever 폴더 : 서버 파트 소스 파일 (파일 Receiver 측)
- Include
폴더 : 클라이언트 및 서버 공통
정의 파일
- 4개의 Raw Data File들을 UDP 방식으로 클라이언트에서 서버로 전송
- 4개의 파일을 순차적으로 전송 각 파일의 전송 프레임은 요구사항에 맞춰 파일에 따라서 다르게 설정됨.
- 서버측 프로그램은 전송 받은 데이터를
파일로 저장함.
- 프로그램 빌드 및 실행
- Server
파트 : make clean; make;
./udp_server
정상적으로 실행되면 Client 접속 대기 상태로 전환
클라이언트가 접속하면 클라이언트에서 접속한 파일을 전송받아 파일로 작성.
- Client
파트 : make clean; make;
./udp_client [ipaddress]
Ex.) ./udp_client 192.168.0.45
정상적으로 실행되면 Server에 접속하여 지정된 4개의 파일을 UDP로 전송
- 작업 스크린 샷
- Server and Client Application Build (Make)

- 클라이언트 파트에서 서버에 접속하여 4개의 데이터 파일을 순차적으로 전송.

- 클라이언트의 접속을 대기중인 상태
클라이언트와
접속이 된 후, 파일을 생성하고, 순차적으로 전송 받음.
UDP 전송이기 때문에 트래픽으로 인해 패킷이 손실되어 전송 받은 파일의 사이즈가 원본 사이즈와 달라지는 경우가 발생하기도 함.
3단계 – MSU VMT를 사용하여 비디오품질 측정하기
사용한 프로그램:
– YUVPlayer – http://www.yuvplayer.com/ 에서
제공하는 YUV 동영상파일 플레이어 (v2.6.4)
– MSU VMT – MSU에서 제공하는 video quality measurement tool (v2.7)
1. YUVPlayer 를 이용한비디오 품질비교
(1) 기준 비디오 – 352×288, 30fps
프레임수:
정상전송의 경우 – 300frame이 손실없이 그대로 전송됨
iperf -b 100m -n 30m – 239fram이 전송됨 (전송률: 79.67%)
iperf -b 1000m -n 30m – 127frame이 전송됨 (전송률: 42.33%)
(2) 기준 비디오 – 352×288, 15fps
프레임수:
정상전송의 경우 – 150frame이 손실없이 그대로 전송됨
iperf -b 100m -n 30m – 103frame이 전송됨 (전송률: 68.67%)
iperf -b 1000m -n 30m – 64frame이 전송됨 (전송률: 42.67%)
(3) 기준 비디오 – 176×144, 15fps
프레임수:
정상전송의 경우 – 150frame이 손실없이 그대로 전송됨
iperf -b 100m -n 30m – 126frame이 전송됨 (전송률: 84%)
iperf -b 1000m -n 30m – 66frame이 전송됨 (전송률: 44%)
(4) 기준 비디오 – 176×144, 7.5fps
프레임수:
정상전송의 경우 – 75frame이 손실없이 그대로 전송됨
iperf -b 100m -n 30m – 41frame이 전송됨 (전송률: 54.67%)
iperf -b 1000m -n 30m – 32frame이 전송됨 (전송률: 42.67%)
2. MSU Video Quality Measurement Tool을 이용한 비디오 품질비교
분석결과:
모든 비디오파일에서 상당히 큰 오차가 있었다. 위의 분석파일에서 알
수 있듯, 처음의 10여 프레임을 지나고 난 이후로는 완전히
알아보기 힘든 비디오 파일이 되어버린 것을 알 수 있다. 그러나 반대로 생각하면 5프레임 이내의 짧은 길이의 경우 무난하게 전송이 가능한 것을 알 수 있었다.
4단계 – 비디오품질 개선을
위한 알고리즘 제안
백그라운드 트래픽의 차이가 클수록 화질이 망가지는 현상을 볼 수 있었던 만큼,
우선순위의 부여가 중요하다고 생각할 수 있었다. 또한,
N/S의 비율이 높아질수록 화질이 빨리 망가졌다. 화질의 개선이 첫번째 우선순위를 가지는
만큼, QoS의 구현을 위해서는 반드시 우선순위를 보여줄 수 있어야 한다고 생각한다.