Add script for performance testing
authorTomas Mlcoch <tmlcoch@redhat.com>
Wed, 25 Jul 2012 13:16:59 +0000 (15:16 +0200)
committerTomas Mlcoch <tmlcoch@redhat.com>
Wed, 25 Jul 2012 13:16:59 +0000 (15:16 +0200)
utils/speed_test.sh [new file with mode: 0755]

diff --git a/utils/speed_test.sh b/utils/speed_test.sh
new file mode 100755 (executable)
index 0000000..1fcaa5c
--- /dev/null
@@ -0,0 +1,148 @@
+#!/bin/bash
+
+# Global variables
+
+REPO=""             # Path to repo
+CLEAR_CACHE=true    # Clear cache?
+
+# Param check
+
+if [ $# -lt "1" -o $# -gt "2" ]; then
+    echo "Usage: `basename $0` <repository> [--cache]"
+    exit 1
+fi
+
+if [ $1 == "-h" ]; then
+    echo "Tool for comparsion of speed between createrepo and createrepo_c."
+    echo "WARNING! This tool changes (removes) repodata if exits!"
+    echo "Usage: `basename $0` <repository> [--cache]"
+    echo "Options:"
+    echo "  --cache   Skip cleaning of disk cache"
+    exit 0
+fi
+
+if [ $# -eq "2" ]; then
+    if [ $2 != "--cache" ]; then
+        echo "Unknown param $2"
+        exit 1
+    else
+        CLEAR_CACHE=false
+    fi
+fi
+
+if $CLEAR_CACHE; then
+    if [ `id --user` != "0" ]; then
+        echo "Note:"
+        echo "You are not root!"
+        echo "For cleaning disk caches you have to have a root permissions."
+        echo "You will be asked for sudo password."
+        echo "(Maybe even several times)"
+        sudo bash -c "echo \"OK\""
+        echo
+    fi
+fi
+
+REPO=$1
+
+if [ ! -d "$REPO" ]; then
+    echo "Directory $REPO doesn't exists"
+    exit 1
+fi
+
+# Main
+
+function clear_cache {
+    # Clear cache if CLEAR_CACHE is true
+
+    if ! $CLEAR_CACHE; then
+        return
+    fi
+
+    if [ `id --user` != "0" ]; then
+        sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
+    else
+        echo 3 > /proc/sys/vm/drop_caches
+    fi
+}
+
+function run {
+    # Run - entire metadata from scratch
+
+    rm -rf "$REPO"/.repodata # Just in case previous run of createrepo_c failed
+
+    rm -rf "$REPO"/repodata
+    echo -e "\n\$ createrepo_c $1 $REPO"
+    clear_cache
+    (time createrepo_c $1 "$REPO") 2>&1
+
+    rm -rf "$REPO"/repodata
+    echo -e "\n\$ createrepo $1 $REPO"
+    clear_cache
+    (time createrepo $1   "$REPO") 2>&1
+
+    echo
+}
+
+function dirty_run {
+    # Run - repodata already exists in place
+
+    rm -rf "$REPO"/.repodata # Just in case previous run of createrepo_c failed
+
+    # Prepare metadata
+    rm -rf "$REPO"/repodata
+    createrepo --quiet --database "$REPO" > /dev/null
+
+    echo -e "\n\$ createrepo_c $1 $REPO"
+    clear_cache
+    (time createrepo_c $1 "$REPO") 2>&1
+
+    # Prepare metadata
+    rm -rf "$REPO"/repodata
+    createrepo --quiet --database "$REPO" > /dev/null
+
+    echo -e "\n\$ createrepo $1 $REPO"
+    clear_cache
+    (time createrepo $1   "$REPO") 2>&1
+
+    echo
+}
+
+echo "Test setup"
+echo "+---------------------------------------------------------------+"
+echo "System:"
+uname --operating-system --kernel-release
+if [ -e /etc/issue ]; then
+    head -q -n 1 /etc/issue
+fi
+grep "model name" /proc/cpuinfo
+uname --processor
+grep "MemTotal" /proc/meminfo
+echo
+echo "Package versions:"
+rpm -qa|grep createrepo
+echo
+echo "Test repo:"
+echo "$REPO"
+echo
+echo "Case-1: generating entire metadata from scratch"
+echo "+---------------------------------------------------------------+"
+echo "+ With sqlite DB"
+echo "+----------------------+"
+run "--database"
+echo "+ Without sqlite DB"
+echo "+----------------------+"
+run "--no-database"
+
+echo "Case-2: re-generating metadata (with existing repodata in place)"
+echo "+---------------------------------------------------------------+"
+echo "+ With sqlite DB"
+echo "+----------------------+"
+dirty_run "--update --database"
+echo "+ Without sqlite DB"
+echo "+----------------------+"
+dirty_run "--update --no-database"
+
+# Final clean up
+
+rm -rf "$REPO"/repodata
+rm -rf "$REPO"/.repodata