간단한 HTB 계층 구조가 있다고 가정해 보겠습니다.man 8 tc-htb
) subhtb 클래스에 지정된 총 대역폭을 설정합니다.초과하다루트 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는 대역폭 제한을 초과합니다. 상위 항목에 대한 제한은 적용되지 않으며 "대여 대역폭" 계산(한도 비율 기준)에만 사용됩니다. 실제 대역폭 제한은 하위(리프) 클래스에 의해서만 적용됩니다.
아니면 적어도 몇 년 전 메일링 리스트에서는 다음과 같이 설명되었습니다.
상위 클래스 셀이 하위 클래스 셀의 합보다 작은 경우 하위 클래스는 상위 클래스가 허용하는 것보다 더 많은 대역폭을 소비할 수 있습니다. 이는 상위 클래스가 확인되지 않았기 때문에 발생합니다! 부모는 자녀가 이자율을 초과하고 부모로부터 빌리기를 원하는 경우에만 확인됩니다.
https://www.spinics.net/lists/lartc/msg08619.html
이것은 매우 오래된 문서이지만 오늘날에도 여전히 관련이 있습니다.