This section talks about different ways one can generate workloads to test worst case latency for a real-time system. These tests were originally designed by Geunsik Lim.
Following tools are being used by this test:
This is Test scenario to measure a latency guarantee in the worstcase environments using simple script and commands.
# This is task to keep Latency(Max limitation: 200uSec) at the worst case. # Written by GeunSik,Lim # If you need histogram information just, Please Use -h option. time cyclictest -t1 -p 99 -i 1000 -n -l 1000000000000 -d 86400 -m -a 1
Following are some simple scripts which can be used to generate loads on target system:
Note that these are reference commands and slight modifications to the commands might be required depending on the version of the command you are using. For example, busybox version of ping does not support the '-l' argument.
Below test code is background stress for the worst case in RT system.
time cyclictest -t50 -p 80 -i 10000 -n -l 100000000000 -d 86400 -a 3
Following is another way to generate heavy CPU load.
#!/bin/sh # Most hardcore test (Ingo Molnar - http://lkml.org/lkml/2005/6/22/347) # For Heavy CPU Ratio. while true; do /bin/dd if=/dev/zero of=bigfile bs=1024000 count=1024; done & while true; do /usr/bin/killall hackbench; sleep 5; done & while true; do /sbin/hackbench 20; done & # some source code(ltp-full-20090531) consists of sched_setschduler() with FIFO 99. cd ltp-full-20090531; while true; do ./runalltests.sh -x 40; done &
For 100% Usage of CPU Load using ping. This command should run as root to preload more than 3 packets.
taskset -c 0 /bin/ping -l 100000 -q -s 10 -f localhost & taskset -c 1 /bin/ping -l 100000 -q -s 10 -f localhost & taskset -c 2 /bin/ping -l 100000 -q -s 10 -f localhost & taskset -c 3 /bin/ping -l 100000 -q -s 10 -f localhost &
For 100% Usage of I/O Load using linux-2.6.30 tar source like tiobench s/w. Don't forget disk total usage ratio (ex: df ). Clone the repository using git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-stable
cd /opt while true; do taskset -c 0 tar cvzf test1.tgz ./linux-stable ; done & while true; do taskset -c 1 tar cvzf test2.tgz ./linux-stable ; done & while true; do taskset -c 2 tar cvzf test3.tgz ./linux-stable ; done & while true; do taskset -c 3 tar cvzf test4.tgz ./linux-stable ; done &
Generating I/O load using du
while true; do taskset -c 3 /bin/du / ; done &
Generate network loads
# First start the server... /usr/bin/netserver # then start netperf to connect to the server /usr/bin/netperf -H <IP_ADDR_OF_SERVER> -t TCP_STREAM -A 16K,16K -l 3600 # Streamming Stress using firefox webbrowser. firefox http://www.intomail.net/stream.php
USB Disk I/O Stress(External HDD's I/O )
cd /media/usb/ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-stable taskset -c 2 tar cvzf test5.tgz /media/usb/linux-stable &
A lot of these tests produce a lot of output. It can be redirected to /dev/null
so that it does not flood the terminal. This can especially be a problem when using a serial console.
Geunsik Lim, leemgs1@gmail.com