fio static binary compiled with support for io_uring for brenchmarking SSDs
This commit is contained in:
Executable
+141
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
|
||||
# For xnvme support, meson build system is required
|
||||
# https://github.com/xnvme/xnvme
|
||||
|
||||
# Rebuilds a static Linux AMD64 fio binary with io_uring support.
|
||||
# Output binary path: ./fio
|
||||
|
||||
# Directory where this script is located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
TARGET_DIR="$SCRIPT_DIR/../../"
|
||||
|
||||
lastWORK_DIR=''
|
||||
WORK_DIR=''
|
||||
cd "$TARGET_DIR"
|
||||
source "${TARGET_DIR}/lib/trim.sh"
|
||||
|
||||
|
||||
createOrSetWorkDir()
|
||||
{
|
||||
# Check if previous WORK_DIR already set
|
||||
if [ -f ".WORK_DIR" ]; then
|
||||
lastWORK_DIR=$(cat .WORK_DIR)
|
||||
fi
|
||||
|
||||
if [ ! -d "$lastWORK_DIR" ]; then
|
||||
lastWORK_DIR=""
|
||||
fi
|
||||
|
||||
|
||||
# Either we don't have a previous WORK_DIR or it doesn't exist
|
||||
if [ "$lastWORK_DIR" == "" ]; then
|
||||
|
||||
# printf "%-8s [CREATE]"
|
||||
# Create one
|
||||
declare -g WORK_DIR="$(mktemp -d)"
|
||||
#printf "$WORK_DIR" > .WORK_DIR
|
||||
else
|
||||
# printf "%-8s [OK]"
|
||||
declare -g WORK_DIR="$lastWORK_DIR"
|
||||
fi
|
||||
|
||||
cd "$WORK_DIR"
|
||||
}
|
||||
|
||||
ispinner "Setting up build environment..." &
|
||||
createOrSetWorkDir
|
||||
|
||||
sleep 1
|
||||
|
||||
|
||||
SPIN_PID=$!
|
||||
kill $SPIN_PID
|
||||
|
||||
# echo "[OK]"
|
||||
printf "\b\b\b\b[%s]\n" "" "OK"
|
||||
|
||||
printf "%-4s WORKDR_DIR: %s\n" "" "$WORK_DIR"
|
||||
|
||||
|
||||
printf "%-4s We will now build fio in $WORK_DIR\n" ""
|
||||
printf "%-4s Intermediate files will be deleted on completion\n" ""
|
||||
printf "%-4s and binaries will be deposited in ./%s" " " $(basename "$SCRIPT_DIR")
|
||||
|
||||
|
||||
# Delete the WORK_DIR on exit, so we don't leave a mess
|
||||
trap 'rm -rf "$WORK_DIR"' EXIT
|
||||
|
||||
need_cmd() {
|
||||
if ! command -v "$1" >/dev/null 2>&1; then
|
||||
printf 'error: required command not found: %s\n' "$1" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
need_cmd git
|
||||
need_cmd make
|
||||
need_cmd gcc
|
||||
need_cmd pkg-config
|
||||
need_cmd file
|
||||
need_cmd ldd
|
||||
|
||||
liburing_prefix="$WORK_DIR/liburing-static"
|
||||
|
||||
git clone --depth=1 https://github.com/axboe/liburing.git "$WORK_DIR/liburing"
|
||||
|
||||
|
||||
# If we don't change into the directory, the stuff ends up directly in $WORK_DIR
|
||||
cd "$WORK_DIR/liburing"
|
||||
"$WORK_DIR/liburing/configure" --prefix="$liburing_prefix"
|
||||
make -C "$WORK_DIR/liburing" -j"$(nproc)"
|
||||
|
||||
# There is no actual need to install it
|
||||
# make -C "$WORK_DIR/liburing" install
|
||||
|
||||
printf "Status: %s\n" "$?"
|
||||
echo "Finished building liburing?"
|
||||
# exit
|
||||
|
||||
|
||||
cd "$WORK_DIR"
|
||||
git clone --depth=1 https://github.com/axboe/fio.git "$WORK_DIR/fio-src"
|
||||
|
||||
|
||||
cd "$WORK_DIR/fio-src"
|
||||
export PKG_CONFIG_PATH="${liburing_prefix}/lib/pkgconfig"
|
||||
export PKG_CONFIG="pkg-config --static"
|
||||
|
||||
EXTFLAGS="-static" "$WORK_DIR/fio-src/configure" --disable-native --build-static
|
||||
make -C "$WORK_DIR/fio-src" -j"$(nproc)"
|
||||
|
||||
printf "Status: %s\n" "$?"
|
||||
|
||||
cp "$WORK_DIR/fio-src/fio" "${TARGET_DIR}/fio-io_uring"
|
||||
|
||||
cd "$TARGET_DIR"
|
||||
|
||||
printf 'Verifying static linkage...\n'
|
||||
file ./fio-io_uring
|
||||
ldd ./fio-io_uring || true
|
||||
|
||||
printf 'Verifying io_uring engine...\n'
|
||||
./fio-io_uring --enghelp | grep -E '(^|[[:space:]])io_uring([[:space:]]|$)'
|
||||
|
||||
printf 'Done. Rebuilt binary at %s/fio-io_uring\n' "${TARGET_DIR}"
|
||||
|
||||
|
||||
|
||||
# # Fetching libaio
|
||||
# git clone https://github.com/anlongfei/libaio
|
||||
# cd libaio
|
||||
# make prefix=../build ENABLE_SHARED=false
|
||||
# make prefix=../build ENABLE_SHARED=false install
|
||||
|
||||
# cd ../fio-src/
|
||||
# export PKG_CONFIG_PATH="../build/lib/pkgconfig"
|
||||
# export PKG_CONFIG="pkg-config --static"
|
||||
# EXTFLAGS="-static" ./configure" --disable-native --build-static
|
||||
Reference in New Issue
Block a user