mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
185 lines
4.9 KiB
Bash
185 lines
4.9 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
PROG=zpios-profile-pre.sh
|
||
|
|
||
|
PROFILE_RDY=0
|
||
|
trap "PROFILE_RDY=1" SIGHUP
|
||
|
|
||
|
RUN_PRE=${0}
|
||
|
RUN_PHASE=${1}
|
||
|
RUN_DIR=${2}
|
||
|
RUN_ID=${3}
|
||
|
RUN_POOL=${4}
|
||
|
RUN_CHUNK_SIZE=${5}
|
||
|
RUN_REGION_SIZE=${6}
|
||
|
RUN_THRD_COUNT=${7}
|
||
|
RUN_REGION_COUNT=${8}
|
||
|
RUN_OFFSET=${9}
|
||
|
RUN_REGION_NOISE=${10}
|
||
|
RUN_CHUNK_NOISE=${11}
|
||
|
RUN_THRD_DELAY=${12}
|
||
|
RUN_FLAGS=${13}
|
||
|
RUN_RESULT=${14}
|
||
|
|
||
|
zpios_profile_pre_run_cfg() {
|
||
|
cat > ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh << EOF
|
||
|
#
|
||
|
# Zpios Profiling Configuration for Run ${RUN_ID}
|
||
|
#
|
||
|
|
||
|
PROFILE_RUN_DIR=${RUN_DIR}/${RUN_ID}
|
||
|
|
||
|
PROFILE_RUN_CR_DIR=${RUN_DIR}/${RUN_ID}/create
|
||
|
PROFILE_RUN_CR_PID=${RUN_DIR}/${RUN_ID}/create/profile.pid
|
||
|
PROFILE_RUN_CR_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/create/oprofile.txt
|
||
|
PROFILE_RUN_CR_PIDS_LOG=${RUN_DIR}/${RUN_ID}/create/pids.txt
|
||
|
PROFILE_RUN_CR_PIDS_CSV=${RUN_DIR}/${RUN_ID}/create/pids.csv
|
||
|
PROFILE_RUN_CR_DISK_LOG=${RUN_DIR}/${RUN_ID}/create/disk.txt
|
||
|
PROFILE_RUN_CR_DISK_CSV=${RUN_DIR}/${RUN_ID}/create/disk.csv
|
||
|
|
||
|
PROFILE_RUN_WR_DIR=${RUN_DIR}/${RUN_ID}/write
|
||
|
PROFILE_RUN_WR_PID=${RUN_DIR}/${RUN_ID}/write/profile.pid
|
||
|
PROFILE_RUN_WR_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/write/oprofile.txt
|
||
|
PROFILE_RUN_WR_PIDS_LOG=${RUN_DIR}/${RUN_ID}/write/pids.txt
|
||
|
PROFILE_RUN_WR_PIDS_CSV=${RUN_DIR}/${RUN_ID}/write/pids.csv
|
||
|
PROFILE_RUN_WR_DISK_LOG=${RUN_DIR}/${RUN_ID}/write/disk.txt
|
||
|
PROFILE_RUN_WR_DISK_CSV=${RUN_DIR}/${RUN_ID}/write/disk.csv
|
||
|
|
||
|
PROFILE_RUN_RD_DIR=${RUN_DIR}/${RUN_ID}/read
|
||
|
PROFILE_RUN_RD_PID=${RUN_DIR}/${RUN_ID}/read/profile.pid
|
||
|
PROFILE_RUN_RD_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/read/oprofile.txt
|
||
|
PROFILE_RUN_RD_PIDS_LOG=${RUN_DIR}/${RUN_ID}/read/pids.txt
|
||
|
PROFILE_RUN_RD_PIDS_CSV=${RUN_DIR}/${RUN_ID}/read/pids.csv
|
||
|
PROFILE_RUN_RD_DISK_LOG=${RUN_DIR}/${RUN_ID}/read/disk.txt
|
||
|
PROFILE_RUN_RD_DISK_CSV=${RUN_DIR}/${RUN_ID}/read/disk.csv
|
||
|
|
||
|
PROFILE_RUN_RM_DIR=${RUN_DIR}/${RUN_ID}/remove
|
||
|
PROFILE_RUN_RM_PID=${RUN_DIR}/${RUN_ID}/remove/profile.pid
|
||
|
PROFILE_RUN_RM_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/remove/oprofile.txt
|
||
|
PROFILE_RUN_RM_PIDS_LOG=${RUN_DIR}/${RUN_ID}/remove/pids.txt
|
||
|
PROFILE_RUN_RM_PIDS_CSV=${RUN_DIR}/${RUN_ID}/remove/pids.csv
|
||
|
PROFILE_RUN_RM_DISK_LOG=${RUN_DIR}/${RUN_ID}/remove/disk.txt
|
||
|
PROFILE_RUN_RM_DISK_CSV=${RUN_DIR}/${RUN_ID}/remove/disk.csv
|
||
|
|
||
|
# PROFILE_PIDS_LOG=${RUN_DIR}/${RUN_ID}/pids-summary.csv
|
||
|
# PROFILE_DISK_LOG=${RUN_DIR}/${RUN_ID}/disk-summary.csv
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_run_args() {
|
||
|
cat > ${RUN_DIR}/${RUN_ID}/zpios-args.txt << EOF
|
||
|
#
|
||
|
# Zpios Arguments for Run ${RUN_ID}
|
||
|
#
|
||
|
|
||
|
DIR=${RUN_DIR}
|
||
|
ID=${RUN_ID}
|
||
|
POOL=${RUN_POOL}
|
||
|
CHUNK_SIZE=${RUN_CHUNK_SIZE}
|
||
|
REGION_SIZE=${RUN_REGION_SIZE}
|
||
|
THRD_COUNT=${RUN_THRD_COUNT}
|
||
|
REGION_COUNT=${RUN_REGION_COUNT}
|
||
|
OFFSET=${RUN_OFFSET}
|
||
|
REGION_NOISE=${RUN_REGION_NOISE}
|
||
|
CHUNK_NOISE=${RUN_CHUNK_NOISE}
|
||
|
THRD_DELAY=${RUN_THRD_DELAY}
|
||
|
FLAGS=${RUN_FLAGS}
|
||
|
RESULT=${RUN_RESULT}
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
# Spawn a user defined profiling script to gather additional data
|
||
|
zpios_profile_pre_start() {
|
||
|
local PROFILE_PID=$1
|
||
|
|
||
|
${PROFILE_USER} ${RUN_PHASE} ${RUN_DIR} ${RUN_ID} &
|
||
|
echo "$!" >${PROFILE_PID}
|
||
|
|
||
|
# Sleep waiting for profile script to be ready, it will
|
||
|
# signal us via SIGHUP when it is ready to start profiling.
|
||
|
while [ ${PROFILE_RDY} -eq 0 ]; do
|
||
|
sleep 0.01
|
||
|
done
|
||
|
}
|
||
|
|
||
|
zpios_profile_post_proc_start() {
|
||
|
|
||
|
if [ -f ${PROFILE_ARC_PROC} ]; then
|
||
|
echo 0 >${PROFILE_ARC_PROC}
|
||
|
fi
|
||
|
|
||
|
if [ -f ${PROFILE_VDEV_CACHE_PROC} ]; then
|
||
|
echo 0 >${PROFILE_VDEV_CACHE_PROC}
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_oprofile_start() {
|
||
|
local OPROFILE_LOG=$1
|
||
|
|
||
|
/usr/bin/opcontrol --reset >>${OPROFILE_LOG} 2>&1
|
||
|
/usr/bin/opcontrol --start >>${OPROFILE_LOG} 2>&1
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_create() {
|
||
|
mkdir ${PROFILE_RUN_CR_DIR}
|
||
|
zpios_profile_pre_start ${PROFILE_RUN_CR_PID}
|
||
|
zpios_profile_post_proc_start
|
||
|
zpios_profile_pre_oprofile_start ${PROFILE_RUN_CR_OPROFILE_LOG}
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_write() {
|
||
|
mkdir ${PROFILE_RUN_WR_DIR}
|
||
|
zpios_profile_pre_start ${PROFILE_RUN_WR_PID}
|
||
|
zpios_profile_post_proc_start
|
||
|
zpios_profile_pre_oprofile_start ${PROFILE_RUN_WR_OPROFILE_LOG}
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_read() {
|
||
|
mkdir ${PROFILE_RUN_RD_DIR}
|
||
|
zpios_profile_pre_start ${PROFILE_RUN_RD_PID}
|
||
|
zpios_profile_post_proc_start
|
||
|
zpios_profile_pre_oprofile_start ${PROFILE_RUN_CR_RD_LOG}
|
||
|
}
|
||
|
|
||
|
zpios_profile_pre_remove() {
|
||
|
mkdir ${PROFILE_RUN_RM_DIR}
|
||
|
zpios_profile_pre_start ${PROFILE_RUN_RM_PID}
|
||
|
zpios_profile_post_proc_start
|
||
|
zpios_profile_pre_oprofile_start ${PROFILE_RUN_RM_OPROFILE_LOG}
|
||
|
}
|
||
|
|
||
|
# Source global zpios test configuration
|
||
|
if [ -f ${RUN_DIR}/zpios-config.sh ]; then
|
||
|
. ${RUN_DIR}/zpios-config.sh
|
||
|
fi
|
||
|
|
||
|
# Source global per-run test configuration
|
||
|
if [ -f ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh ]; then
|
||
|
. ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh
|
||
|
fi
|
||
|
|
||
|
case "${RUN_PHASE}" in
|
||
|
pre-run)
|
||
|
mkdir -p ${RUN_DIR}/${RUN_ID}/
|
||
|
zpios_profile_pre_run_cfg
|
||
|
zpios_profile_pre_run_args
|
||
|
;;
|
||
|
pre-create)
|
||
|
zpios_profile_pre_create
|
||
|
;;
|
||
|
pre-write)
|
||
|
zpios_profile_pre_write
|
||
|
;;
|
||
|
pre-read)
|
||
|
zpios_profile_pre_read
|
||
|
;;
|
||
|
pre-remove)
|
||
|
zpios_profile_pre_remove
|
||
|
;;
|
||
|
*)
|
||
|
echo "Usage: ${PROG} {pre-run|pre-create|pre-write|pre-read|pre-remove}"
|
||
|
exit 1
|
||
|
esac
|
||
|
|
||
|
exit 0
|