154 lines
3.1 KiB
Plaintext
154 lines
3.1 KiB
Plaintext
|
#!/usr/bin/bash
|
||
|
# This script can be invoked as follows:
|
||
|
#
|
||
|
# glibc-bench-compare [options] <BUILD> [BUILD]
|
||
|
#
|
||
|
# Options may be one of the following:
|
||
|
#
|
||
|
# -t The BUILD arguments are task ids and not a version-release string
|
||
|
# -a ARCH Do comparison for ARCH architecture
|
||
|
#
|
||
|
# If any of the above options are given, both BUILD arguments must be given.
|
||
|
# Otherwise, if only one BUILD is specified, then it is compared against the
|
||
|
# installed glibc.
|
||
|
|
||
|
# Silence the pushd/popd messages
|
||
|
pushd() {
|
||
|
command pushd "$@" > /dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
popd() {
|
||
|
command popd "$@" > /dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
# Clean up any downloaded files before we exit
|
||
|
trap "rm -rf /tmp/glibc-bench-compare.$BASHPID.*" EXIT
|
||
|
|
||
|
task=0
|
||
|
arch=$(uname -i)
|
||
|
options=0
|
||
|
path=0
|
||
|
installed=
|
||
|
|
||
|
# Look for any commandline options
|
||
|
while getopts ":tpa:" opt; do
|
||
|
case $opt in
|
||
|
p)
|
||
|
path=1
|
||
|
;;
|
||
|
t)
|
||
|
task=1
|
||
|
options=1
|
||
|
echo "Not implemented."
|
||
|
exit 1
|
||
|
;;
|
||
|
a)
|
||
|
arch=$OPTARG
|
||
|
options=1
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# Done, now shift all option arguments out.
|
||
|
shift $((OPTIND-1))
|
||
|
|
||
|
if [ $# -gt 2 ] || [ $# -eq 0 ] || [ $# -lt 2 -a $options -eq 1 ]; then
|
||
|
echo "Usage: $0 [OPTIONS] <old> [new]"
|
||
|
echo
|
||
|
echo "OPTIONS:"
|
||
|
echo -e "\t-t\tCompare two brew tasks"
|
||
|
echo -e "\t-a ARCH\tGet rpms for the ARCH architecture"
|
||
|
echo -e "\t-p\tCompare built rpms in two paths."
|
||
|
echo -e "\t\tThis minimally needs glibc, glibc-common and glibc-benchtests"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ -z $2 ]; then
|
||
|
new="$1"
|
||
|
old=$(rpm --queryformat "%{VERSION}-%{RELEASE}\n" -q glibc | head -1)
|
||
|
installed=$old
|
||
|
else
|
||
|
new="$2"
|
||
|
old="$1"
|
||
|
fi
|
||
|
|
||
|
decompress_rpms() {
|
||
|
# We were given a path to the rpms. Figure out the version-release and
|
||
|
# decompress the rpms.
|
||
|
if [ -n $1 ]; then
|
||
|
vr=$(rpm --queryformat="%{VERSION}-%{RELEASE}" -qp $1/glibc-2*.rpm | head -1)
|
||
|
mkdir $vr && pushd $vr
|
||
|
fi
|
||
|
|
||
|
for r in $1*.rpm; do
|
||
|
( rpm2cpio $r | cpio -di ) > /dev/null
|
||
|
done
|
||
|
|
||
|
if [ -n $1 ]; then
|
||
|
popd
|
||
|
echo $vr
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Get rpms for a build and decompress them
|
||
|
get_build() {
|
||
|
echo "Processing build $1"
|
||
|
mkdir $1 && pushd $1
|
||
|
brew buildinfo "glibc-$1" |
|
||
|
sed -n -e "s|/mnt/koji\(.\+$arch.\+\)|http://kojipkgs.fedoraproject.org\1|p" |
|
||
|
while read url; do
|
||
|
echo "Downloading $url"
|
||
|
wget -q $url
|
||
|
done
|
||
|
decompress_rpms
|
||
|
|
||
|
echo "Removing rpms"
|
||
|
rm -f $1/*.rpm
|
||
|
|
||
|
popd
|
||
|
}
|
||
|
|
||
|
# Run benchmarks for a build
|
||
|
run_bench() {
|
||
|
if [ -z $1 ]; then
|
||
|
make DETAILED=1 ver=$installed prefix= -f /usr/libexec/glibc-benchtests/bench.mk bench
|
||
|
else
|
||
|
make DETAILED=1 ver=$1 prefix=$PWD -f $1/usr/libexec/glibc-benchtests/bench.mk bench
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Get absolute paths if needed, since we will change into the working directory
|
||
|
# next.
|
||
|
if [ $path -eq 1 ]; then
|
||
|
old_path=$(realpath $old)/
|
||
|
new_path=$(realpath $new)/
|
||
|
fi
|
||
|
|
||
|
tmpdir=$(mktemp -p /tmp -d glibc-bench-compare.$$.XXXX)
|
||
|
pushd $tmpdir
|
||
|
|
||
|
# Get both builds.
|
||
|
if [ $path -eq 0 ]; then
|
||
|
if [ -z $installed ]; then
|
||
|
get_build $old
|
||
|
fi
|
||
|
get_build $new
|
||
|
else
|
||
|
old=$(decompress_rpms $old_path)
|
||
|
new=$(decompress_rpms $new_path)
|
||
|
fi
|
||
|
|
||
|
# make bench for each of those.
|
||
|
if [ -z $installed ]; then
|
||
|
run_bench $old
|
||
|
else
|
||
|
run_bench
|
||
|
fi
|
||
|
run_bench $new
|
||
|
|
||
|
# Now run the comparison script.
|
||
|
$old/usr/libexec/glibc-benchtests/compare_bench.py $old/usr/libexec/glibc-benchtests/benchout.schema.json \
|
||
|
bench.$old.out bench.$new.out
|