tc를 사용하여 동일한 장치에 여러 개의 qdisc를 추가할 수 있습니까, 아니면 장치당 하나의 qdisc만 사용할 수 있습니까?
또한, qdisc는 하위 qdisc를 포함할 수 있습니까, 아니면 하위 클래스만 포함할 수 있습니까? 즉, 이것이 가능합니까 tc qdisc add parent <existing qdisc> handle <child qdisc> <qdisc type>
?
답변1
OP의 질문에는 해결해야 할 실제 문제가 없으므로 하나를 제공하겠습니다.매우 간단하다네트워크 네임스페이스 사용 예
커뮤니케이션 구축
ip -n test1 link add up type veth peer netns test2 ip -n test2 link set veth0 up ip -n test1 address add 192.0.2.11/24 dev veth0 ip -n test2 address add 192.0.2.12/24 dev veth0
예비 테스트
# ip netns exec test1 ping -c1 192.0.2.12 PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data. 64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=0.068 ms --- 192.0.2.12 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.068/0.068/0.068/0.000 ms
첫 번째 기본 qdisc를 추가합니다:네템
tc -n test1 qdisc add dev veth0 root handle 1: netem delay 100ms
시험 결과
# ip -n test1 neigh flush all # ip netns exec test1 ping -c2 192.0.2.12 PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data. 64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=200 ms 64 bytes from 192.0.2.12: icmp_seq=2 ttl=64 time=100 ms --- 192.0.2.12 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 100.152/150.223/200.294/50.071 ms
(IP 대기 시간 외에도 첫 번째 핑은 ARP 대기 시간도 선택하므로 대기 시간이 두 배나 높습니다.)
qdisc를 다시 추가하고 이전 qdisc의 부모가 됩니다.
tc -n test1 qdisc add dev veth0 parent 1: handle 2: netem delay 350ms
다시 테스트하다
# ip -n test1 neigh flush all # ip netns exec test1 ping -c2 192.0.2.12 PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data. 64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=900 ms 64 bytes from 192.0.2.12: icmp_seq=2 ttl=64 time=450 ms --- 192.0.2.12 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 450.228/675.272/900.317/225.044 ms
보시다시피 두 사람은네템사용된 qdisc: 100+350=450ms (첫 번째 ARP로 인해 두 번 사용됨)
qdisc의 특정 속성이 의미가 있는 한 계속할 수 있습니다.
tc -n test1 qdisc add dev veth0 parent 2: handle 3: prio
말이 안 될 때까지 (prio는멋을 아는q디스크):
# tc -n test1 qdisc add dev veth0 parent 3: handle 4: sfq
Error: Specified class not found.
또는 지원이 없는 경우(아마도 말이 안 되기 때문일 수 있음):
# tc -n test1 qdisc del dev veth0 parent 2: handle 3:
# tc -n test1 qdisc add dev veth0 parent 2: handle 3: sfq
# tc -n test1 qdisc add dev veth0 parent 3: handle 4: netem delay 100ms
RTNETLINK answers: Operation not supported
그러나 두 번째 qdisc를 무언가에 추가할 수는 없습니다(이것이 여러 클래스를 제공하는 qdisc 클래스가 있는 이유입니다):
# tc -n test1 qdisc add dev veth0 root handle 5: netem delay 100ms
Error: NLM_F_REPLACE needed to override.
결론적으로:
예, 둘 이상이 있을 수 있습니다.큐 디스크장치당 총계이지만 특정 계층 구조 내에는 하나만 있습니다.큐 디스크. "동일한 레벨의" 여러 개의 qdisc를 가지려면 다음이 필요합니다.큐 디스크그것은 여러 가지를 제공합니다친절한각각은 다음의 부모가 될 수 있습니다.큐 디스크.
및 (비범주에만 해당)큐 디스크또 있을 수 있어큐 디스크아이들로서.
가장 유용한 상황에서 사람들은 다음을 사용합니다.멋을 아는qdisc 및친절한, 추가 qdisc 추가친절한부모로서 다음과 같은 것이 있습니다.필터수업 선택 방법을 선택하세요.
다음은 2부의 이 시나리오에 대한 답변입니다.CentOS 7에서 특정 포트의 대역폭을 제한하시겠습니까?