tc를 사용하여 각 연결의 대역폭을 제한하는 방법은 무엇입니까?

tc를 사용하여 각 연결의 대역폭을 제한하는 방법은 무엇입니까?

저는 Linux와 tc 명령을 처음 접했고 최근에는 tc 명령을 사용하여 각 연결의 대역폭을 제한하는 솔루션을 찾고 있습니다. I/O 작업으로 구성된 클라이언트의 요청을 처리하는 서버 애플리케이션이 있고, 대역폭이 충분하다면 요청당 최대 50MB/s의 속도를 달성하고 싶습니다(그러나 병렬 요청이 너무 많지 않은지 확인합니다). , 이렇게 하면 요청당 대역폭이 50MB/s 미만이 됩니다. tc를 사용하여 대역폭을 제한했지만 각 연결이 50MB의 대역폭을 얻는 대신 모든 연결이 50MB의 대역폭으로 분할되었습니다. 내가 시도한 tc 명령은 아래에서 볼 수 있습니다.

sudo tc qdisc add dev eth4 root netem rate 400mbit

또는

sudo tc qdisc add dev eth4 root handle 1: htb default 30
sudo tc class add dev eth4 parent 1: classid 1:1 htb rate 100gbit burst 15k

sudo tc class add dev eth4 parent 1:1 classid 1:10 htb rate 400mbit burst 15k
sudo tc class add dev eth4 parent 1:1 classid 1:20 htb rate 400mbit burst 15k 

sudo tc filter add dev eth4 protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:10
sudo tc filter add dev eth4 protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 flowid 1:20

또는 서버와 클라이언트를 모두 제어하고 서버가 포트 9000에서 클라이언트 요청을 처리한다는 것을 알고 있으므로 클라이언트 호스팅 시스템에서 다음을 시도했습니다.

sudo tc qdisc add dev eth4 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sudo tc qdisc add dev eth4 parent 1:2 handle 20: netem rate 400mbit
sudo tc filter add dev eth4 parent 1:0 protocol ip u32 match ip dport 9000 0xffff flowid 1:2

그러나 이러한 솔루션 중 어느 것도 내가 원하는 대로 작동하지 않았습니다. 지금까지 파악한 바에 따르면 요청이 전송되는 포트마다 클래스를 생성해야 할 것 같은데, 제가 할당한 것이 아니라 자동으로 선택되기 때문에 미리 알 수 없습니다. 이런 의미에서 이러한 클래스를 "이동 중에" 만들 수 있는 방법이 있습니까, 아니면 이를 달성할 수 있는 다른 방법이 있습니까?

시간을 내어 도와주셔서 감사합니다!

관련 정보