From d3b17bcee13262b27673d7f3f8bc881b74206a03 Mon Sep 17 00:00:00 2001 From: Ming Liu Date: Wed, 9 Dec 2020 13:07:38 +0100 Subject: [PATCH] rt-tests: generate latency plot - Generate a latency plot PNG file in /tmp/latency-plot.png. - Generate a latency summary file in /tmp/latency-summary.log. Related-to: TOR-1198 Signed-off-by: Ming Liu --- rt-tests/Dockerfile | 6 +++-- rt-tests/rt-tests.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100755 rt-tests/rt-tests.sh diff --git a/rt-tests/Dockerfile b/rt-tests/Dockerfile index 2d85b7e..96331f6 100644 --- a/rt-tests/Dockerfile +++ b/rt-tests/Dockerfile @@ -4,7 +4,9 @@ ARG IMAGE_TAG=2-bullseye FROM --platform=$IMAGE_ARCH torizon/debian:$IMAGE_TAG RUN apt-get update \ - && apt-get install -y --no-install-recommends rt-tests \ + && apt-get install -y --no-install-recommends gnuplot rt-tests \ && rm -rf /var/lib/apt/lists/* -CMD ["cyclictest","-S","-p99","-i1000","-m","-D20m", "-q", "|", "tee", "cyclictest.log"] +COPY rt-tests.sh /rt-tests.sh + +CMD ["/rt-tests.sh"] diff --git a/rt-tests/rt-tests.sh b/rt-tests/rt-tests.sh new file mode 100755 index 0000000..305a223 --- /dev/null +++ b/rt-tests/rt-tests.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# Run cyclictest +if ! cyclictest -S -p99 -i1000 -m -D12h -h400 -q >output; then + echo "ERROR: cyclictest failed" >&2 + exit 1 +fi + +# Get maximum latency +max=`grep "Max Latencies" output | tr " " "\n" | sort -n | tail -1 | sed s/^0*//` + +# Grep data lines, remove empty lines and create a common field separator +grep -v -e "^#" -e "^$" output | tr " " "\t" >histogram + +# Create two-column data sets with latency classes and frequency values for each core +cores=$(grep -c ^processor /proc/cpuinfo) +for i in `seq 1 $cores` +do + column=`expr $i + 1` + cut -f1,$column histogram >histogram$i +done + +# Create plot command header +echo -n -e "set title \"Latency plot\"\n\ +set terminal png\n\ +set xlabel \"Latency (us), max $max us\"\n\ +set logscale y\n\ +set xrange [0:400]\n\ +set yrange [0.8:*]\n\ +set ylabel \"Number of latency samples\"\n\ +set output \"plot.png\"\n\ +plot " >plotcmd + +# Append plot command data references +for i in `seq 1 $cores` +do + if test $i != 1 + then + echo -n ", " >>plotcmd + fi + cpuno=`expr $i - 1` + if test $cpuno -lt 10 + then + title=" CPU$cpuno" + else + title="CPU$cpuno" + fi + echo -n "\"histogram$i\" using 1:2 title \"$title\" with histeps" >>plotcmd +done + +# Execute plot command +gnuplot -persist /tmp/latency-summary.log + +# Copy plot to /tmp/latency-plot.png +echo "Generating latency plot to /tmp/latency-plot.png" +cp plot.png /tmp/latency-plot.png + +# Clean up +rm -f histogram* output plotcmd plot.png