trickleコマンドで特定のコマンドのネットワーク帯域を絞る

ストリーミングビデオを見ているときに他の通信を行うとビデオの画質が止まってしまいストレスです．ローカルにダウンロード出来るものはダウンロードしてから再生することでストレスなく視聴可能ですがそれができないものやライブだとできません．
アプリケーションによっては帯域を絞るオプションがありますがそれがないものは不便．今回 trickle というツールを使って特定のプログラムの帯域を絞ってみました．

mariusae/trickle: Trickle is a userland bandwidth shaper for Unix-like systems.

今回Raspberry Pi OS bookworm armhf環境でパッケージから導入しました．

$ sudo apt install trickle
$ trickle -h
Usage: trickle [-hvVs] [-d <rate>] [-u <rate>] [-w <length>] [-t <seconds>]
[-l <length>] [-n <path>] command ...
-h Help (this)
-v Increase verbosity level
-V Print trickle version
-s Run trickle in standalone mode independent of trickled
-d <rate> Set maximum cumulative download rate to <rate> KB/s
-u <rate> Set maximum cumulative upload rate to <rate> KB/s
-w <length> Set window length to <length> KB
-t <seconds> Set default smoothing time to <seconds> s
-l <length> Set default smoothing length to <length> KB
-n <path> Use trickled socket name <path>
-L <ms> Set latency to <ms> milliseconds
-P <path> Preload the specified .so instead of the default one

wgetには帯域を絞るオプションがあります( --limit-rate )がお手軽なのでまずはこれで試します．
ここでは -s でデーモンを使わずアドホックに利用します．
-d 30 とダウンロードを 30KB/s に制限したのが効いているようでそれに近い速度になっています．

$ trickle -s -d 30 wget https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.3-x86_64.iso -O /dev/null
:
/dev/null 0%[ ] 2.63M 31.3KB/s eta 2d 9h

次に帯域制限がなさそうなRaspberryPiのKernelを新しくするコマンドで試します．はじめsudoコマンドの前にtrickleを置くと効きませんでした．sudoの後ろにtrickleを置くことで帯域制限できました．でも今回は接続が切れてしまいました．程々にしないと駄目みたいですね．もしくはcontinueやretryを使うよう書き換える．

$ sudo trickle -s -d 30 rpi-update
:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
15 144M 15 22.9M 0 0 28070 0 1:29:44 0:14:17 1:15:27 30009
curl: (56) Recv failure: Connection reset by peer

アプリケーションごとの帯域制限のオプションは覚えきれないし毎回オプションを調べるのは面倒．でもtrickleだけなら覚えられそうです．

環境

$ dpkg-query -W trickle wget curl
curl 8.5.0-2~bpo12+1
trickle 1.07-12
wget 1.21.3-1+b1
$ lsb_release -dr
No LSB modules are available.
Description: Raspbian GNU/Linux 12 (bookworm)
Release: 12
$ arch
armv7l
$ grep ^Model /proc/cpuinfo
Model : Raspberry Pi 3 Model B Rev 1.2