既存のプロセスのダウンロード帯域幅を制限する方法は? (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

これは、指定したプロセス(およびそのサブプロセス)の帯域幅制限が毎秒1 MBであることを意味します。最後のコマンドのパラメータを希望の帯域幅に調整します。

おすすめ記事