Netem is a module within the Linux traffic control facilities. Netem allows the user to add delay, packet loss, duplication and more other characteristics to outgoing packets (from a selected network interface). Netem may be thought of as a collection of packet scheduling services, consisting of packet schedulers and packet classifiers. Netem is one of those schedulers and it, in turn, uses other schedulers. The entire system that we typically call "netem" also includes classifiers that look at packet headers and mark them for different scheduling treatment.
The two challenges
There are two challenges in using Netem. First, there are multiple user interfaces for controlling Netem, however the one that is most used and most supported is the command line tool "TC". Second, Netem requires tuning and calibration for both the operating system and underlying hardware. Without proper tuning and calibration, the Netem results will not be accurate.
Netem TC compared to a GUI
Netem TC Example
Here is an example from the Linux Foundation Wiki for using the TC command in netem to apply Rate Control:
# TC qdisc add dev eth0 root handle 1:0 netem delay 100ms # TC qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000 # TC -s qdisc ls dev eth0 qdisc netem 1: limit 1000 delay 100.0ms Sent 0 bytes 0 pkts (dropped 0, overlimits 0 ) qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
Here is an example from the Mini Maxwell Network Emulator for using the GUI to apply Rate Control. In this case, the rate is limited to emulate DSL performance of 1.5 Mbps. The Rate Limit parameter may be entered into the last box on the bottom left of the screen. Using a graphical user interface, it is a matter of entering the number into a box.
While the TC command and its options are both powerful and useful, a casual user or beginner, may find mastery of TC quite challenging and prone to errors. Such a user could get started and be effective in much less time with a well designed netem GUI.
Netem tuning and calibration
Assembling inexpensive processors, motherboards, disk drives, and so on to build a PC is fairly easy. Downloading a Linux variant to run on that hardware is also straightforward. Individuals with relatively low technical skills can successfully build their own PC and set up and configure the operating system without expert help.
However, when it comes to using netem to introduce packet drops, delay and so on, there's a problem: accuracy. Without properly tuning and calibrating the entire system, Netem is likely to be way off. This is particularly true of testing and measuring TCP performance.
When you run TCP over a high capacity, high latency network, you need to do some TCP tuning to increase the maximum possible buffer space. According to the Pittsburgh Super Computing Center, performance can vary by a factor of ten.
These considerations are not limited to TCP; many other network protocols are affected in many other ways.
Properly tuned and calibrated, graphically driven, netem systems
To address the issues of Netem TC and Netem tuning and calibration, InterWorking Labs offers the Maxwell Family of Network Emulators. All products are carefully tuned and calibrated for the most accurate network emulations. All products can be controlled by a graphical user interface or from a command line or a script. Mini Maxwell and Maxwell G are based on netem. Maxwell Pro is based on a more sophisticated network emulation engine.