#!/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