Consulting the all-knowing Google provided a couple general options: trickle and wondershaper. While there are other utilities, I mainly focused on these two.
Trickle is a 'lightweight user bandwidth shaper', it's particular value is the ability to limit processes independently and it doesn't require superuser privileges.
$ sudo apt-get install trickle
You can limit uploads and downloads to 100 KB/s for a command such as;
$ trickle -u 100 -d 100 wget http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_stereo.ogg
Independently, you could specify alternative limits for another command. Trickle is limited to TCP sockets so if you need to limit bandwidth for UDP sockets you'll need to look for an alternative. Applying system-wide bandwidth, TCP in this case, supposedly is supported via trickled daemon utility but after numerous hours I gave up on getting it to work. Regardless, I abandoned it's use not only because I couldn't get it to work but also it's limitation to TCP and applying the daemon and client command required prepending 'trickle' to the command line. This would disqualify applying the network bandwidth constraints to network services like sshd and such without modifying each service starting the process.
Seeking a system-wide bandwidth traffic shaper brought me back to Wondershaper once again. My first experience with wondershaper I found it didn't always work, this round I tested the usage 1-10 Mbps and I quickly found that it limited the bandwidth like expected until reaching 10 Mbps where it jumped to realized bandwidth of 40 Mbps. Head-scratcher; working fine for bandwidths under 10Mbps but broke at >= 10Mbps. Consulting Google again brought me to a fix proposed by 'buzzy'; https://github.com/magnific0/wondershaper/issues/2. Modifying the wondershaper script as 'buzzy' indicated resolved the issue and I could consistently specify bandwidths 1-40 Mbps and observe realized bandwidths accordingly.
$ cat go
#!/bin/bash
for i in `seq 1 50`; do
echo "$i Mbps"
K=`expr $i \* 1024`
sudo wondershaper wlan0 $K $K
iperf -t 10 -c 192.168.1.132 2> /dev/null | grep "Mbits/sec"
sleep 2
done
sudo wondershaper wlan0 clear
$ ./go
1 Mbps
[ 3] 0.0-11.2 sec 1.38 MBytes 1.03 Mbits/sec
2 Mbps
[ 3] 0.0-10.7 sec 2.62 MBytes 2.06 Mbits/sec
3 Mbps
[ 3] 0.0-10.4 sec 3.75 MBytes 3.02 Mbits/sec
4 Mbps
[ 3] 0.0-10.4 sec 5.00 MBytes 4.04 Mbits/sec
5 Mbps
[ 3] 0.0-10.5 sec 5.12 MBytes 4.11 Mbits/sec
6 Mbps
[ 3] 0.0-10.3 sec 7.38 MBytes 6.00 Mbits/sec
7 Mbps
[ 3] 0.0-10.3 sec 8.50 MBytes 6.95 Mbits/sec
8 Mbps
[ 3] 0.0-10.3 sec 9.75 MBytes 7.97 Mbits/sec
9 Mbps
[ 3] 0.0-10.2 sec 10.6 MBytes 8.76 Mbits/sec
10 Mbps
[ 3] 0.0-10.1 sec 12.0 MBytes 9.94 Mbits/sec
11 Mbps
[ 3] 0.0-10.1 sec 13.2 MBytes 11.0 Mbits/sec
12 Mbps
[ 3] 0.0-10.2 sec 14.5 MBytes 12.0 Mbits/sec
13 Mbps
[ 3] 0.0-10.2 sec 15.5 MBytes 12.8 Mbits/sec
14 Mbps
[ 3] 0.0-10.3 sec 16.1 MBytes 13.2 Mbits/sec
15 Mbps
[ 3] 0.0-10.1 sec 16.4 MBytes 13.6 Mbits/sec
16 Mbps
[ 3] 0.0-10.1 sec 19.0 MBytes 15.8 Mbits/sec
17 Mbps
[ 3] 0.0-10.1 sec 19.8 MBytes 16.4 Mbits/sec
18 Mbps
[ 3] 0.0-10.1 sec 21.1 MBytes 17.6 Mbits/sec
19 Mbps
[ 3] 0.0-10.1 sec 22.1 MBytes 18.3 Mbits/sec
20 Mbps
[ 3] 0.0-10.1 sec 23.1 MBytes 19.3 Mbits/sec
...While the use of WonderShaper requires superuser privileges, it limits the system network bandwidth in it's entirety. Enjoy.
No comments:
Post a Comment