장치당 여러 개의 qdisc를 사용할 수 있나요?

장치당 여러 개의 qdisc를 사용할 수 있나요?

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에서 특정 포트의 대역폭을 제한하시겠습니까?

관련 정보