Throttle lets you simulate slow network connections on Linux and Mac OS X.
Throttle uses pfctl on Mac and tc on Linux (you also need ip and route for Throttle to work on Linux) to simulate different network speeds and is inspired by tylertreat/Comcast, the connectivity setting in the WPTAgent and sltc.
What is Throttle good for?
It is usually used for two different things:
You can set the download/upload speed and RTT. Upload/download is in kbit/s and RTT in ms.
npm install @sitespeed.io/throttle -g
Here is an example for running with 3G connectivity. Remember: Throttle will use sudo so your user will need sudo rights.
throttle --up 330 --down 780 --rtt 200
To make it easier we have pre made profiles, check them out by throttle –help:
--profile Premade profiles, set to one of the following
3g: up:768 down:1600 rtt:150
3gfast: up:768 down:1600 rtt:75
3gslow: up:400 down:400 rtt:200
2g: up:32 down:35 rtt:650
cable: up:1000 down:5000 rtt:14
You can start throttle with one of the pre-made profiles:
throttle --profile 3gslow
Stopping is as easy as giving the parameter stop to throttle.
throttle --stop
This is useful if you run WebPageReplay and want to add som latency to your tests.
throttle --rtt 200 --localhost
throttle --stop --localhost
const throttle = require('@sitespeed.io/throttle');
// Returns a promise
throttle.start({up: 360, down: 780, rtt: 200}).then(() => ...
Make sure to run sudo modprobe ifb numifbs=1
before you start the container.
And then when you actually start your Docker container, give it the right privileges with --cap-add=NET_ADMIN
You can also use Docker networks to change connectivity when testing inside a container.