Queueing Disciplines

wwiki
이동: 둘러보기, 검색


tc명령어에서 사용하는 오브젝트의 한 종류로 대기열 규칙에 관한 것들.

Simple classless Queueing Disciplines[편집 | 원본 편집]

데이터를 수락한 후, qdisc에 따라서 일정을 조정, 지연 또는 삭제한다.

  • pfifo_fast(First In First Out): 설정이 없는 하드웨어 기본값
  • Token Bucket Filter(TBF): 인터페이스 속도를 늦추는
  • Stochastic Fairness Queueing(SFQ): round robin(원형큐를 돌면서 시간할당량만큼 처리)처럼 확률적으로 공정한 대기열, 각 세션이 기회를 얻는다.

Token Bucket Filter (TBF)[편집 | 원본 편집]

인터페이스의 속도를 늦추기 위해서 간단하고 쉽다.

#tc qdisc add dev eth1 root tbf rate 220kbit latency 50ms burst 1540 

설명:

qdisc - 대기열 규칙 오브젝트를 사용하겠다.
latency - 지연값(number of bytes that can be queued waiting for tokens to become available.)
burst - 버킷 크기(Size of the bucket, in bytes.)
rate - speedknob

Stochastic Fairness Queueing (SFQ)[편집 | 원본 편집]

라운드 로빈 방식으로 각 세션이 턴마다 데이터를 보낼 수 있는 기회를 제공한다. 간격 내에서 해싱 알고리즘을 변경한다. 단일 세션은 나가는 대역폭을 지배할 수 없다.

#tc qdisc add dev eth1 root sfq perturb 10

설명:

qdisc - qdisc사용
perturb - 해싱을 한번에 재구성할 시간(초)

Testing Classless Queueing[편집 | 원본 편집]

실행상태를 체크하기 위해서

#tc -s -d qdisc show dev eth1

삭제하려면

#tc qdisc del dev eth1 root

Classful Queueing Disciplines[편집 | 원본 편집]

트래픽의 우선순위를 다른 종류로 설정하도록 도와준다.

  • Class Based Queueing (CBQ): 오래되고 복합하다.
  • Hierarchical Token Bucket (HTB)

Hierarchical Token Bucket (HTB)[편집 | 원본 편집]

HTB를 사용하여 소규모 사무실에 대한 몇 가지 규칙을 만들고 싶다고 가정해보자.

Hierarchical Token Bucket Sample.png
eth0: 외부 인터페이스, public ip
eth1: 내부 인터페이스, local ip
이메일은 우선 순위가 높다.
다른 것들은 보통의 우선 순위이다.
비디오 스트리밍은 낮은 순위로 하고 싶다.

'root 1: '과 '1:1'을 HTB를 사용해서 생성한다. ('default 6'은 매칭되는 규칙이 없으면 '1:6'을 따른다.)

#tc qdisc add dev eth1 root handle 1: htb default 6
#tc class add dev eth1 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit

하위 클래스 '1:5'를 생성한다. ('prio'는 priority이다. 0이 최우선이다.)

#tc class add dev eth1 parent 1:1 classid 1:5 htb rate 1mbit ceil 1.5mbit
#tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip src YOUR_MAIL_SERVER_IP/32 flowid 1:5
#tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip sport 22 0xffff flowid 1:5

하위 클래스 '1:6'을 생성한다. (이건 root의 기본값이므로 하위 규칙을 설정하지 않는다. )

#tc class add dev eth1 parent 1:1 classid 1:6 htb rate 0.5mbit ceil 1.5mbit

하위 클래스 '1:7'을 생성한다.(특정 아이피를 지정하려면 /32를 사용하고, 범위를 지정하려면 /24를 사용해라. 'prio 5'는 낮은 우선 순위이다. "iptraf"를 사용해서 ip주소를 얻을 수 있다.)

#tc class add dev eth1 parent 1:1 classid 1:7 htb rate 0.2mbit ceil 1mbit
#tc filter add dev eth1 protocol ip parent 1:0 prio 5 u32 match ip src VIDEO_STREAM_IP/32 flowid 1:7

선택적으로 하위에 규칙을 더할 수도 있다.(예를 들면 '1:5"하위 클래스에 SFQ를 추가)

#tc qdisc add dev eth1 parent 1:5 handle 20: sfq perturb 10

삭제하려면

#tc qdisc del dev eth1 root handle 1: htb