A short delay is required between starting up a primary and secondary process with DPDK depending on what the secondary depends on wrt the primary. As the SPDK sample apps are not designed to be dependent on each other, when we use them as primary/secondary in test scripts with no deterministic synchronization, it is possible for one ore more to hang resulting in DPDK fatal init failures. Often times this would show up as a failure to get hugepages in vtophys A related fix, same failing signature in the same test script, is also included here where the stub app, which is designed to act as primary in certain sections of the test script, was being killed by the test script but the next primary app was coming up before the process was dead and coming up as a secondary. A wait was added to assure that the stub process is gone before the next app tries to start. Change-Id: If2f6fc25e76b769ad8edafa8e965be246e98dab9 Signed-off-by: Paul Luse <paul.e.luse@intel.com> Reviewed-on: https://review.gerrithub.io/367725 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
116 lines
2.7 KiB
Bash
Executable File
116 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
rootdir=$(readlink -f $testdir/../../..)
|
|
source $rootdir/scripts/autotest_common.sh
|
|
|
|
# delay time for apps to start up as primary
|
|
app_start=5
|
|
|
|
function linux_iter_pci {
|
|
lspci -mm -n -D | grep $1 | tr -d '"' | awk -F " " '{print $1}'
|
|
}
|
|
|
|
timing_enter nvme
|
|
|
|
if [ `uname` = Linux ]; then
|
|
start_stub "-s 2048 -i 0 -m 0xF"
|
|
sleep $app_start
|
|
trap "kill_stub; exit 1" SIGINT SIGTERM ExIT
|
|
fi
|
|
|
|
if [ $RUN_NIGHTLY -eq 1 ]; then
|
|
timing_enter aer
|
|
$testdir/aer/aer
|
|
timing_exit aer
|
|
|
|
timing_enter reset
|
|
$testdir/reset/reset -q 64 -w write -s 4096 -t 2
|
|
timing_exit reset
|
|
fi
|
|
|
|
timing_enter identify
|
|
$rootdir/examples/nvme/identify/identify -i 0
|
|
for bdf in $(linux_iter_pci 0108); do
|
|
$rootdir/examples/nvme/identify/identify -r "trtype:PCIe traddr:${bdf}" -i 0
|
|
done
|
|
timing_exit identify
|
|
|
|
timing_enter perf
|
|
$rootdir/examples/nvme/perf/perf -q 128 -w read -s 12288 -t 1 -LL -i 0
|
|
timing_exit perf
|
|
|
|
timing_enter reserve
|
|
$rootdir/examples/nvme/reserve/reserve
|
|
timing_exit reserve
|
|
|
|
timing_enter hello_world
|
|
$rootdir/examples/nvme/hello_world/hello_world
|
|
timing_exit
|
|
|
|
timing_enter sgl
|
|
$testdir/sgl/sgl
|
|
timing_exit sgl
|
|
|
|
timing_enter e2edp
|
|
$testdir/e2edp/nvme_dp
|
|
timing_exit e2edp
|
|
|
|
timing_enter overhead
|
|
$rootdir/test/lib/nvme/overhead/overhead -s 4096 -t 1 -H
|
|
timing_exit overhead
|
|
|
|
timing_enter arbitration
|
|
$rootdir/examples/nvme/arbitration/arbitration -t 3 -i 0
|
|
timing_exit arbitration
|
|
|
|
if [ `uname` = Linux ]; then
|
|
trap - SIGINT SIGTERM EXIT
|
|
kill_stub
|
|
fi
|
|
PLUGIN_DIR=$rootdir/examples/nvme/fio_plugin
|
|
|
|
if [ -d /usr/src/fio ]; then
|
|
timing_enter fio_plugin
|
|
for bdf in $(linux_iter_pci 0108); do
|
|
# Only test when ASAN is not enabled. If ASAN is enabled, we cannot test.
|
|
if [ $SPDK_RUN_ASAN -eq 0 ]; then
|
|
LD_PRELOAD=$PLUGIN_DIR/fio_plugin /usr/src/fio/fio $PLUGIN_DIR/example_config.fio --filename="trtype=PCIe traddr=${bdf//:/.} ns=1"
|
|
fi
|
|
break
|
|
done
|
|
|
|
timing_exit fio_plugin
|
|
fi
|
|
|
|
if [ $(uname -s) = Linux ] && [ $SPDK_TEST_NVME_MULTIPROCESS -eq 1 ]; then
|
|
timing_enter multi_process
|
|
$rootdir/examples/nvme/arbitration/arbitration -i 0 -s 4096 -t 10 -c 0xf &
|
|
pid=$!
|
|
sleep $app_start
|
|
$rootdir/examples/nvme/perf/perf -i 0 -q 1 -w randread -s 4096 -t 10 -c 0x10 &
|
|
sleep 1
|
|
kill -9 $!
|
|
count=0
|
|
while [ $count -le 2 ]; do
|
|
$rootdir/examples/nvme/perf/perf -i 0 -q 1 -w read -s 4096 -t 1 -c 0xf
|
|
count=$(($count + 1))
|
|
done
|
|
count=0
|
|
while [ $count -le 1 ]; do
|
|
core=$((1 << (($count + 4))))
|
|
printf -v hexcore "0x%x" "$core"
|
|
$rootdir/examples/nvme/perf/perf -i 0 -q 128 -w read -s 4096 -t 1 -c $hexcore &
|
|
sleep $app_start
|
|
$rootdir/examples/nvme/identify/identify -i 0 &
|
|
sleep $app_start
|
|
count=$(($count + 1))
|
|
done
|
|
wait $pid
|
|
timing_exit multi_process
|
|
fi
|
|
|
|
timing_exit nvme
|