OpenWrt sqm을 통한 트래픽 관리

버퍼블로트(bufferbloat)는 라우터나 기타 네트워크 장비에서 패킷손실을 줄이기 위해 네트워크 버퍼를 증가시켰지만 실제 처리량의 한계로 인해 발생하는 버퍼링으로 지체되는 대기시간으로

무엇인가가 모든 대역폭을 사용하고 있을 경우 tcp 'ack', dns, voip 같은 소형 패킷이 더 큰 패킷에 밀려 버퍼안에 갇혀 랙(lag)이 발생하게 되는데 이런경우 소개할 sqm(smart queue management)은 이런 버퍼블로트 문제를 해결합니다.

일러두기

  • OpenWrt에는 qos패키지도 있지만 설정이 어렵고 sqm보다 작업수행 능력이 떨여져 sqm이 선호되고 있습니다.
  • qos/sqm 사용시 NAT offloading (하드웨어/소프트웨어 NAT 가속)기능이 작동하지 않으며 더 많은 cpu 자원을 필요로 합니다.
  • sqm은 총 대역폭 중에서 대용량 트래픽을 사용하는 대역폭을 일정 수준(80~95%)로 제한하고 소형 트래픽을 위한 공간을 만들어 전체 네트워크의 균형을 맞추는 원리로 버퍼블로트 문제를 해결합니다. 따라서 sqm을 작동하고 속도테스트를 하면 다운로드 및 업로드 속도는 최고치가 위에서 설정한 일정수준(80~90%)로 제한된 속도가 됩니다.
  • 평소 온라인 게임이나 p2p든 뭐든 대용량화일 전송이 많아 랙이 발생하는 사용자에게는 필요하지만, 랙을 잘 못 느끼는 경우라면 굳이 sqm 설치를 권하고 싶지 않습니다.

속도 및 지연시간 테스트 방법(현재상태 확인)

방법(1)

http://www.dslreports.com/speedtest 에서 웹으로 속도 및 bufferbloat 테스트를 할 수 있습니다. 주의할 사항은 윈도우 클라이언트에 네트워크를 감시하는 virus 감시 프로그램이나 adguard 광고제거 프로그램 등이 실행중이라면 이를 종료 해야 합니다. 또한 테스트에 앞서 테스트 페이지 우측 상단에 톱니바퀴를 눌러 아래처럼 설정합니다.

dslreport speedtest preference

속도 및 bufferbloat 테스트 결과 다운로드 233Mbps, 업로드 207Mbps, bufferbloat는 30~40msec가 나왔습니다.

dslreport speedtest result
dslreport speedtest result

방법(2)

speedtest-netperf 패키지를 이용한 지연시간 및 속도측정

opkg update
opkg install speedtest-netperf

패키지 설치 후 지연시간 테스트을 합니다. 옵션 -s는 다운로드/업로드 각각(순차) 테스트, 옵션 -c는 참고사항으로 다운로드/업로드 동시 테스트인데 동시테스트는 테스트하는동안 다운로드와 업로드를 동시에 진행하므로 아무래도 속도가 덜 나옵니다.

speedtest-netperf.sh -s
speedtest-netperf.sh -c

sqm을 설치하지 않은 상태로 레이턴시(지연시간)을 확인해보니 30~40msec 정도의 지연시간이 발생했습니다.

[email protected]:/etc/config# speedtest-netperf.sh -s
2020-11-27 18:58:48 Starting speedtest for 60 seconds per transfer session.
Measure speed to netperf.bufferbloat.net (IPv4) while pinging gstatic.com.
Download and upload sessions are sequential, each with 5 simultaneous streams.
.............................................................
 Download: 195.20 Mbps
  Latency: [in msec, 62 pings, 0.00% packet loss]
      Min:  34.157
    10pct:  34.388
   Median:  34.772
      Avg:  35.145
    90pct:  36.358
      Max:  38.592
 CPU Load: [in % busy (avg +/- std dev) @ avg frequency, 58 samples]
     cpu0:  15.7 +/-  6.8  @ 1072 MHz
     cpu1:  14.0 +/-  6.2  @  775 MHz
 Overhead: [in % used of total CPU available]
  netperf:   9.8
.............................................................
   Upload: 185.98 Mbps
  Latency: [in msec, 61 pings, 0.00% packet loss]
      Min:  34.265
    10pct:  34.371
   Median:  34.754
      Avg:  34.859
    90pct:  35.300
      Max:  37.174
 CPU Load: [in % busy (avg +/- std dev) @ avg frequency, 58 samples]
     cpu0:  27.7 +/-  4.5  @ 1138 MHz
     cpu1:  34.4 +/-  6.4  @ 1263 MHz
 Overhead: [in % used of total CPU available]
  netperf:  12.6
[email protected]:/etc/config#

속도 및 지연시간 테스트 총평

위에서 방법(1) 테스트결과 속도는 다운로드 230, 업로드 200, 버퍼블로트는 35 정도 나왔습니다. 여기서 중요한것은 버퍼블로트값인데 50 이하면 양호한 값으로 저는 sqm 패키지를 사용하지 않기로 하였습니다. 만약 버퍼블로트 값이 높게 나왔다면 sqm을 설치해서 속도 및 버퍼블로트 확인해 설치전과 비교해 보세요.

sqm 설치

opkg install sqm-scripts luci-app-sqm

luci를 이용한 설정

luci > network > sqm qos 선택

  1. Basic Settings 에서
    • sqm 구동을 위해 Enable 체크
    • 인터페이스는 WAN 으로 설정
    • 다운로드 및 업로드 속도를 위에서 측정한 속도의 80-95%로 설정합니다 .
  2. Queue Discipline 탭에서
    • Queueing Discipline 을 cake 로 선택
    • Queueing 설정 스크립트로 piece_of_cake.qos 를 선택
  3. Link Layer Adaptation 탭에서 인터넷 종류 연결 종류 선택
    • VDSL - Ethernet을 선택하고 , 패킷 오버 헤드 당 34 입력(PPPoE를 사용하지 않는경우 26)
    • 다른 DSL (ADSL 등) - ATM을 선택하고 , 패킷 오버 헤드 당 44 입력
    • Cable - Ethernet을 선택하고, 패킷 오버 헤드 당 22
    • Ethernet 또는 FTTP - Ethernet을 선택하고, 패킷 오버 헤드 당 44
    • 의심스러우면 - 패킷 오버 헤드 당 44
  4. 저장 및 적용

sqm을 설치 후 설치전과 속도 및 버퍼블로트 비교해 보고, 필요한 경우 설정을 바꿔보세요.

/etc/config/sqm

config queue 'eth1'
        option enabled '1'
        option qdisc_advanced '0'
        option interface 'eth0.2'
        option download '195000'
        option upload '170000'
        option debug_logging '0'
        option verbosity '5'
        option qdisc 'cake'
        option script 'piece_of_cake.qos'
        option linklayer 'ethernet'
        option overhead '44'

참고사이트

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다