
간단한 HTB 계층 구조가 있다고 가정해 보겠습니다.man 8 tc-htb
) 하위 HTB 클래스에 대해 지정된 총 대역폭을 설정합니다.초과하다루트 HTB 클래스에 대해 지정된 총 대역폭:
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 70kbps
여기서 루트 htb 클래스의 최대값은 100kbps이지만 하위 htb 클래스의 집합적 최대값은 160kbps입니다.
커널은 최대 속도로 트래픽을 생성하는 세 하위 항목을 모두 어떻게 처리합니까? 이 경우 집계 트래픽의 공정한 처리를 보장하기 위해 중간 sfq를 사용할 수 있습니까?
더 중요한 것은 생성되는 총 트래픽이 하드웨어 인터페이스의 대역폭을 초과하는 경우 통과할 트래픽을 커널이 어떻게 결정합니까?
답변1
HTB에 대한 일반적인 권장 사항은 "하위 클래스의 비율 합계가 상위 클래스의 비율과 같거나 작습니다.".
하위 클래스가 더 높은 속도를 허용하는 경우 HTB는 대역폭 제한을 초과합니다. 상위 항목에 대한 제한은 적용되지 않으며 단지 "대역폭 차용" 계산(ceil rate에 따라)에만 사용됩니다. 실제 대역폭 제한은 하위(리프) 클래스에 의해서만 적용됩니다.
아니면 적어도 수년 전에 메일링 리스트에 설명된 내용은 다음과 같습니다.
상위 클래스 셀이 하위 셀의 합보다 작으면 하위 셀은 상위 클래스가 허용하는 것보다 더 많은 대역폭을 소비할 수 있습니다. 이는 상위 클래스가 확인되지 않았기 때문에 발생합니다! 상위 클래스는 하위가 요금을 초과했고 상위 클래스에서 빌리기를 원하는 경우에만 확인됩니다.
https://www.spinics.net/lists/lartc/msg08619.html
이것은 매우 오래된 문서이지만 오늘날에도 여전히 적용되어야 합니다.