====== Worst Case Latency Test Scenarios ======
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 [[https://leemgs.fedorapeople.org/|Geunsik Lim]].
===== Requirements =====
Following tools are being used by this test:
* [[realtime:documentation:howto:tools:cyclictest:start|Cyclictest]]
* [[realtime:documentation:howto:tools:ltp|Linux Test Project]]
* [[realtime:documentation:howto:tools:hackbench|Hackbench]] (part of the [[https://git.kernel.org/cgit/utils/rt-tests/rt-tests.git/|rt-tests]].)
* other commands like taskset, chrt, ping, dd, tar and netperf which is usually available by default in most linux systems.
===== Latency test scenarios =====
This is Test scenario to measure a latency guarantee in the worstcase environments using simple script and commands.
==== Latency test ====
# 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
==== Stress Environments ====
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 -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.
===== Contacts =====
Geunsik Lim, leemgs1@gmail.com