Permalink
| #!/bin/bash | |
| export LANG=C | |
| USE_RAMDISK=true | |
| CLEAN_ON_EXIT=false | |
| NPROC=$1 | |
| TPROC=$2 | |
| [ -n "$NPROC" ] || NPROC=$(nproc) | |
| [ -n "$TPROC" ] || TPROC=1 | |
| cleanup() { | |
| sudo rm -rf /mnt/ramdisk/* | |
| sudo umount /mnt/ramdisk | |
| } | |
| if $CLEAN_ON_EXIT; then | |
| trap "cleanup" SIGHUP SIGINT SIGTERM EXIT | |
| fi | |
| echo "Install required packages" | |
| if which apt-get &>/dev/null; then | |
| sudo apt-get install build-essential | |
| elif which dnf &>/dev/null; then | |
| sudo dnf install -y @development-tools | |
| else | |
| exit 1 | |
| fi | |
| if $USE_RAMDISK; then | |
| echo "Create compressed ramdisk" | |
| sudo mkdir -p /mnt/ramdisk || exit 1 | |
| sudo modprobe zram num_devices=1 || exit 1 | |
| echo 64G | sudo tee /sys/block/zram0/disksize || exit 1 | |
| sudo mkfs.ext4 -q -m 0 -b 4096 -O sparse_super -L zram /dev/zram0 || exit 1 | |
| sudo mount -o relatime,nosuid,discard /dev/zram0 /mnt/ramdisk/ || exit 1 | |
| sudo mkdir -p /mnt/ramdisk/workdir || exit 1 | |
| sudo chmod 777 /mnt/ramdisk/workdir || exit 1 | |
| cp buildloop.sh /mnt/ramdisk/workdir/buildloop.sh || exit 1 | |
| cd /mnt/ramdisk/workdir || exit 1 | |
| mkdir tmpdir || exit 1 | |
| export TMPDIR="$PWD/tmpdir" | |
| fi | |
| echo "Download GCC sources" | |
| wget ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-7.1.0/gcc-7.1.0.tar.bz2 || exit 1 | |
| echo "Extract GCC sources" | |
| tar xf gcc-7.1.0.tar.bz2 || exit 1 | |
| echo "Download prerequisites" | |
| (cd gcc-7.1.0/ && ./contrib/download_prerequisites) | |
| [ -d 'buildloop.d' ] && rm -r 'buildloop.d' | |
| mkdir -p buildloop.d || exit 1 | |
| echo "cat /proc/cpuinfo | grep -i -E \"(model name|microcode)\"" | |
| cat /proc/cpuinfo | grep -i -E "(model name|microcode)" | |
| echo "sudo dmidecode -t memory | grep -i -E \"(rank|speed|part)\" | grep -v -i unknown" | |
| sudo dmidecode -t memory | grep -i -E "(rank|speed|part)" | grep -v -i unknown | |
| echo "uname -a" | |
| uname -a | |
| echo "cat /proc/sys/kernel/randomize_va_space" | |
| cat /proc/sys/kernel/randomize_va_space | |
| # start journal process in different working directory | |
| pushd / | |
| journalctl -kf | sed 's/^/[KERN] /' & | |
| popd | |
| echo "Using ${NPROC} parallel processes" | |
| START=$(date +%s) | |
| for ((I=0;$I<$NPROC;I++)); do | |
| (./buildloop.sh "loop-$I" "$TPROC" || echo "TIME TO FAIL: $(($(date +%s)-${START})) s") | sed "s/^/\[loop-${I}\] /" & | |
| sleep 1 | |
| done | |
| wait |