test/nvmf: allow running as unprivileged user
Add a new test flag SPDK_RUN_NON_ROOT forcing some of the SPDK applications to run as an unprivileged user. For now we implement it in nvmf tests. If enabled, nvmf_tgt will run as the user who invoked `sudo ./autotest.sh`. Running SPDK as non-root has two major prerequisites right now: * there must be an IOMMU in the system in order to use PCI devices * DPDK version must be either < 18.05 or >= 19.08-rc1 Change-Id: If1ba9dfcc09fc6cac059867408a1b54eddecfb4b Signed-off-by: Ben Walker <benjamin.walker@intel.com> Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454679 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
c049304a95
commit
714a56466a
@ -56,6 +56,7 @@ export RUN_NIGHTLY_FAILING
|
||||
: ${SPDK_RUN_ASAN=0}; export SPDK_RUN_ASAN
|
||||
: ${SPDK_RUN_UBSAN=0}; export SPDK_RUN_UBSAN
|
||||
: ${SPDK_RUN_INSTALLED_DPDK=0}; export SPDK_RUN_INSTALLED_DPDK
|
||||
: ${SPDK_RUN_NON_ROOT=0}; export SPDK_RUN_NON_ROOT
|
||||
: ${SPDK_TEST_CRYPTO=0}; export SPDK_TEST_CRYPTO
|
||||
: ${SPDK_TEST_FTL=0}; export SPDK_TEST_FTL
|
||||
: ${SPDK_TEST_BDEV_FTL=0}; export SPDK_TEST_BDEV_FTL
|
||||
@ -433,8 +434,19 @@ function killprocess() {
|
||||
fi
|
||||
|
||||
if kill -0 $1; then
|
||||
echo "killing process with pid $1"
|
||||
kill $1
|
||||
if [ "$(ps --no-headers -o comm= $1)" = "sudo" ]; then
|
||||
# kill the child process, which is the actual app
|
||||
# (assume $1 has just one child)
|
||||
local child="$(pgrep -P $1)"
|
||||
echo "killing process with pid $child"
|
||||
kill $child
|
||||
else
|
||||
echo "killing process with pid $1"
|
||||
kill $1
|
||||
fi
|
||||
|
||||
# wait for the process regardless if its the dummy sudo one
|
||||
# or the actual app - it should terminate anyway
|
||||
wait $1
|
||||
fi
|
||||
}
|
||||
|
@ -4,8 +4,17 @@ NVMF_IP_LEAST_ADDR=8
|
||||
NVMF_TCP_IP_ADDRESS="127.0.0.1"
|
||||
NVMF_TRANSPORT_OPTS=""
|
||||
|
||||
function build_nvmf_app_args()
|
||||
{
|
||||
if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then
|
||||
echo "sudo -u $(logname) ./app/nvmf_tgt/nvmf_tgt -i $NVMF_APP_SHM_ID -e 0xFFFF"
|
||||
else
|
||||
echo "./app/nvmf_tgt/nvmf_tgt -i $NVMF_APP_SHM_ID -e 0xFFFF"
|
||||
fi
|
||||
}
|
||||
|
||||
: ${NVMF_APP_SHM_ID="0"}; export NVMF_APP_SHM_ID
|
||||
: ${NVMF_APP="./app/nvmf_tgt/nvmf_tgt -i $NVMF_APP_SHM_ID -e 0xFFFF"}; export NVMF_APP
|
||||
: ${NVMF_APP="$(build_nvmf_app_args)"}; export NVMF_APP
|
||||
|
||||
have_pci_nics=0
|
||||
|
||||
|
@ -33,7 +33,12 @@ $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPOR
|
||||
|
||||
# Test multi-process access to local NVMe device
|
||||
if [ -n "$local_nvme_trid" ]; then
|
||||
$rootdir/examples/nvme/perf/perf -i $NVMF_APP_SHM_ID -q 32 -o 4096 -w randrw -M 50 -t 1 -r "$local_nvme_trid"
|
||||
if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then
|
||||
perf_app="sudo -u $(logname) $rootdir/examples/nvme/perf/perf"
|
||||
else
|
||||
perf_app="$rootdir/examples/nvme/perf/perf"
|
||||
fi
|
||||
$perf_app -i $NVMF_APP_SHM_ID -q 32 -o 4096 -w randrw -M 50 -t 1 -r "$local_nvme_trid"
|
||||
fi
|
||||
|
||||
$rootdir/examples/nvme/perf/perf -q 32 -o 4096 -w randrw -M 50 -t 1 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT"
|
||||
|
Loading…
Reference in New Issue
Block a user