From 107e6585331e9494b0e3cb689c209a2516eb3c3e Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Tue, 19 May 2020 12:02:33 +0000
Subject: [PATCH] Compression benchmark script, easily expandable
---
compression_bench.sh | 123 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/compression_bench.sh b/compression_bench.sh
new file mode 100755
index 0000000..6eea870
--- /dev/null
+++ b/compression_bench.sh
@@ -0,0 +1,123 @@
+#!/bin/bash
+
+function test-comp() {
+ #compress file
+ $1 -$2 -c test.tar > "test.$2.$3" 2>/dev/null
+ #write file size to temp file for csv formation
+ printf "$(wc -c test.$2.$3 | awk '{print $1}')\n" >> $3
+ #remove file
+ rm -f "test.$2.$3"
+}
+
+function test-bzip2() {
+ rm -f "bz2"
+ for i in {1..9}; do
+ test-comp bzip2 $i "bz2"
+ done
+}
+
+function test-gzip() {
+ rm -f "gz"
+ for i in {1..9}; do
+ test-comp gzip $i "gz"
+ done
+}
+
+function test-lz4() {
+ rm -f "lz4"
+ for i in {1..12}; do
+ test-comp lz4 $i "lz4"
+ done
+}
+
+function test-xz() {
+ rm -f "xz"
+ for i in {1..9}; do
+ test-comp xz $i "xz"
+ done
+}
+
+function test-xz-e() {
+ rm -f "xze"
+ for i in {1..9}; do
+ test-comp "xz -e" $i "xze"
+ done
+}
+
+function test-lzma() {
+ rm -f "lzma"
+ for i in {1..9}; do
+ test-comp lzma $i "lzma"
+ done
+}
+
+function test-lzma-e() {
+ rm -f "lzmae"
+ for i in {1..9}; do
+ test-comp "lzma -e" $i "lzmae"
+ done
+}
+
+function test-zstd() {
+ rm -f "zst"
+ for i in {1..19}; do
+ test-comp zstd $i "zst"
+ done
+ for i in {20..22}; do
+ test-comp "zstd --ultra" $i "zst"
+ done
+}
+
+if [ -z $1 ]; then
+ echo "Usage: $0 FILES"
+ exit
+fi
+
+# create a tar file to deal with directories
+tar -cf test.tar "$@"
+
+# run tests with all algorithms/programs
+rm -f results.csv
+ALGS=(bzip2 gzip lz4 xz xz-e lzma lzma-e zstd)
+for i in ${ALGS[*]}; do
+ test-$i
+done
+rm -f test.tar
+
+# create csv with vertical columns
+ALG_RES=`find . -maxdepth 1 -not -name '*.*' -type f`
+printf "level" >> results.csv
+for i in ${ALG_RES[*]}; do
+ printf ",%s" $(echo $i | sed 's/\.\///') >> results.csv
+done
+printf "\n" >> results.csv
+
+for i in {1..22}; do
+ printf "$i" >> results.csv
+ for j in $ALG_RES; do
+ k=1;
+ FOUND=0;
+ while read LINE; do
+ if [ $k == $i ]; then
+ printf ",$LINE" >> results.csv
+ FOUND=1
+ break
+ fi
+ k=$((k+1))
+ done < $j
+ [ $FOUND == 0 ] && printf "," >> results.csv
+ done
+ printf "\n" >> results.csv
+done
+for i in ${ALG_RES[*]}; do
+ rm -f $i
+done
+
+# generate plot using gnuplot
+read -p "Generate plot? Y/n " PLOT
+if [[ -z $PLOT || $PLOT == "y" || $PLOT == "Y" ]]; then
+ gnuplot -e "set datafile separator \",\"; \
+ set term png; \
+ set output 'results.png'; \
+ plot for [col=2:$((${#ALGS[@]}+1))] 'results.csv' using 1:col with lines title columnheader"
+fi
--
Gitblit v1.10.0