기존 프로세스의 다운로드 대역폭을 제한하는 방법은 무엇입니까? (iptables, tc,?)

기존 프로세스의 다운로드 대역폭을 제한하는 방법은 무엇입니까? (iptables, tc,?)

포트별로 업로드 속도를 제한하는 데 만족하지만 프로세스별로 다운로드를 제한하고 싶습니다.

iptables에는 OR 형식 으로 프로세스별로 --pid-owner패킷을 일치시키고 표시하는 기능이 있었던 것으로 보입니다 --cmd-owner. 하지만 이제 둘 다 제거되었습니다.

$ iptables -m owner --help
...
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists

사용자나 그룹별로 매칭하는 옵션이 있는 것 같은데, 프로세스별로 매칭하는 옵션은 없는 것 같습니다.

나는 trickle과 wondershaper를 알고 있지만 이미 실행 중인 프로세스의 형성을 허용하지 않습니다.

답변1

프로세스를 net_clscgroup에 넣고 cgroup을 사용하여 패킷 클래스를 설정한 다음 클래스 필터를 사용하여 tc해당 클래스의 패킷 속도를 제한합니다. 예를 들어:

cgcreate -g net_cls:slow
echo 0x10001 > /sys/fs/cgroup/net_cls/slow/net_cls.classid
cgclassify -g net_cls:slow <pid of the process you want to limit>
tc qdisc add dev eth0 root handle 1: htb
tc filter add dev eth0 parent 1: handle 1: cgroup
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps

이는 지정한 프로세스(및 해당 하위 프로세스)의 대역폭 제한이 초당 1MB임을 의미합니다. 마지막 명령의 매개변수를 원하는 대역폭으로 조정하세요.

관련 정보