tc netem을 사용하여 [0, 1500ms] 범위에서 짧은 [0.5, 1.5]초 지연 증가를 시뮬레이션하려고 합니다.
이는 다음 명령을 사용하여 수행됩니다.
sudo tc qdisc add dev enp37s0 root netem delay 200ms
시간 초과 후 qdisc를 삭제하여 지연을 재설정합니다.
sudo tc qdisc del dev enp37s0 root
또는 지연을 0ms로 변경하십시오.
sudo tc qdisc add dev enp37s0 root netem delay 0ms
지연 시간이 200밀리초를 초과하면 재설정 단계로 인해 패킷이 삭제됩니다. 내부 버퍼 또는 대기열 오버플로로 인해 이것이 발생한다고 가정합니다.
예를 들어 대기 시간이 1500밀리초인 경우 패킷 크기가 80바이트인 경우 1Mbps에서 많은 비율의 패킷이 지속적으로 손실됩니다.
이런 일이 발생하지 않도록 하는 방법이 있나요?
netem이 이 작업을 수행하는 데 적합한 도구인지 확실하지 않으며 조언을 주시면 감사하겠습니다.
도움이 된다면 iperf를 사용하여 패킷 손실을 측정하겠습니다.
iperf3 -c <host> -t 1200 -u -l 80
답변1
속도를 테스트하기 위해 UDP를 사용하고 있습니다(-u). UDP는 연결이 없고 혼잡 제어 기능이 없으므로 TCP처럼 사용 가능한 대역폭으로 축소되지 않습니다.
따라서 iperf는 항상 생성됩니다.UDP 데이터그램처음부터 일정한 속도로(기본값 1Mbit/초).
그런 다음 데이터그램은 흐름 제어 하위 시스템에 의해 대기열에 추가되어 대기열 규칙(qdisc)을 적용합니다.
분명히 트래픽 속도를 제한하기 위해 tc는 필요한 대역폭/지연 시간과 일치하도록 대기열 제거 속도를 제어합니다.
가장 간단한 경우, 대기열 속도 > 대기열 해제 속도인 경우 대기열이 가득 차 있기 때문에 초과 데이터그램이 대기열보다 먼저 삭제됩니다.
1Mb/s 0.1Mb/s
process -> queue -> interface
이 동작은 예상된 것이며 문제를 나타내지 않습니다.
TCP를 사용해 보세요.