memory domains If bdev doesn't support any memory domain then allocate internal bounce buffer, pull data for write operation before IO submission, push data to memory domain once IO completes for read operation. Update test tool, add simple pull/push functions implementation. Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com> Change-Id: Ie9b94463e6a818bcd606fbb898fb0d6e0b5d5027 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10069 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
80 lines
2.4 KiB
Bash
Executable File
80 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
rootdir=$(readlink -f $testdir/../../..)
|
|
source $rootdir/test/common/autotest_common.sh
|
|
source $rootdir/test/nvmf/common.sh
|
|
|
|
if [ "$TEST_TRANSPORT" != "rdma" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
MALLOC_BDEV_SIZE=64
|
|
MALLOC_BLOCK_SIZE=512
|
|
subsystem="0"
|
|
rpc_py="$rootdir/scripts/rpc.py"
|
|
|
|
function gen_malloc_json() {
|
|
jq . <<- JSON
|
|
{
|
|
"subsystems": [
|
|
{
|
|
"subsystem": "bdev",
|
|
"config": [
|
|
{
|
|
"method": "bdev_nvme_set_options",
|
|
"params": {
|
|
"action_on_timeout": "none",
|
|
"timeout_us": 0,
|
|
"retry_count": 4,
|
|
"arbitration_burst": 0,
|
|
"low_priority_weight": 0,
|
|
"medium_priority_weight": 0,
|
|
"high_priority_weight": 0,
|
|
"nvme_adminq_poll_period_us": 10000,
|
|
"keep_alive_timeout_ms" : 10000,
|
|
"nvme_ioq_poll_period_us": 0,
|
|
"io_queue_requests": 0,
|
|
"delay_cmd_submit": true
|
|
}
|
|
},
|
|
{
|
|
"method": "bdev_malloc_create",
|
|
"params": {
|
|
"name": "Malloc0",
|
|
"num_blocks": 131072,
|
|
"block_size": 512,
|
|
"uuid": "e1c24cb1-dd44-4be6-8d67-de92a332013f",
|
|
"optimal_io_boundary": 2
|
|
}
|
|
},
|
|
{
|
|
"method": "bdev_wait_for_examine"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
JSON
|
|
}
|
|
|
|
nvmftestinit
|
|
nvmfappstart -m 0x3
|
|
|
|
$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS
|
|
$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0
|
|
$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode$subsystem -a -s SPDK00000000000001
|
|
$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode$subsystem Malloc0
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode$subsystem -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
|
|
# test memory translation
|
|
# test_dma doesn't use RPC, but we change the sock path since nvmf target is already using the default RPC sock
|
|
"$rootdir/test/dma/test_dma/test_dma" -q 16 -o 4096 -w randrw -M 70 -t 5 -m 0xc --json <(gen_nvmf_target_json $subsystem) -b "Nvme${subsystem}n1" -f -r /var/tmp/dma.sock
|
|
|
|
# test data pull/push with split against local malloc
|
|
"$rootdir/test/dma/test_dma/test_dma" -q 16 -o 4096 -w randrw -M 70 -t 5 -m 0xc --json <(gen_malloc_json) -b "Malloc0" -r /var/tmp/dma.sock
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
nvmftestfini
|