test/vhost: load json configuration to vhost in spdk_vhost_run.
Json configuration can be loaded by adding parameter --json-path=PATH. Also spdk_vhost_run can be launched without initial config file. New JSON RPC call "load_subsystem_config" for loading subsystem config. Change-Id: I4e71da99ea574484cba7e0d29b87cbc0b41e5ce6 Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com> Reviewed-on: https://review.gerrithub.io/411460 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
bc8f2cd90f
commit
43c5429d6f
@ -5,11 +5,42 @@ set -e
|
|||||||
rootdir=$(readlink -f $(dirname $0))/..
|
rootdir=$(readlink -f $(dirname $0))/..
|
||||||
source "$rootdir/scripts/common.sh"
|
source "$rootdir/scripts/common.sh"
|
||||||
|
|
||||||
bdfs=$(iter_pci_class_code 01 08 02)
|
bdfs=($(iter_pci_class_code 01 08 02))
|
||||||
|
function create_classic_config()
|
||||||
|
{
|
||||||
echo "[Nvme]"
|
echo "[Nvme]"
|
||||||
i=0
|
for (( i=0; i < ${#bdfs[@]}; i++))
|
||||||
for bdf in $bdfs; do
|
do
|
||||||
echo " TransportID \"trtype:PCIe traddr:$bdf\" Nvme$i"
|
echo " TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i"
|
||||||
let i=i+1
|
|
||||||
done
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_json_config()
|
||||||
|
{
|
||||||
|
echo "{"
|
||||||
|
echo '"subsystem": "bdev",'
|
||||||
|
echo '"config": ['
|
||||||
|
for (( i=0; i < ${#bdfs[@]}; i++))
|
||||||
|
do
|
||||||
|
echo '{'
|
||||||
|
echo '"params": {'
|
||||||
|
echo '"trtype": "PCIe",'
|
||||||
|
echo "\"name\": \"Nvme$i\","
|
||||||
|
echo "\"traddr\": \"${bdfs[i]}\""
|
||||||
|
echo '},'
|
||||||
|
echo '"method": "construct_nvme_bdev"'
|
||||||
|
if [ -z ${bdfs[i+1]} ]; then
|
||||||
|
echo '}'
|
||||||
|
else
|
||||||
|
echo '},'
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo ']'
|
||||||
|
echo '}'
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$1" = "--json" ]; then
|
||||||
|
create_json_config
|
||||||
|
else
|
||||||
|
create_classic_config
|
||||||
|
fi
|
||||||
|
@ -75,6 +75,15 @@ if __name__ == "__main__":
|
|||||||
p.add_argument('-f', '--filename', help="""JSON Configuration file.""")
|
p.add_argument('-f', '--filename', help="""JSON Configuration file.""")
|
||||||
p.set_defaults(func=load_config)
|
p.set_defaults(func=load_config)
|
||||||
|
|
||||||
|
@call_cmd
|
||||||
|
def load_subsystem_config(args):
|
||||||
|
rpc.load_subsystem_config(args.client, args)
|
||||||
|
|
||||||
|
p = subparsers.add_parser('load_subsystem_config', help="""Configure SPDK subsystem using JSON RPC. If no file is
|
||||||
|
provided or file is '-' read configuration from stdin.""")
|
||||||
|
p.add_argument('--filename', help="""JSON Configuration file.""")
|
||||||
|
p.set_defaults(func=load_subsystem_config)
|
||||||
|
|
||||||
# app
|
# app
|
||||||
@call_cmd
|
@call_cmd
|
||||||
def kill_instance(args):
|
def kill_instance(args):
|
||||||
|
@ -90,3 +90,16 @@ def load_config(client, args):
|
|||||||
|
|
||||||
if subsystems and not allowed_found:
|
if subsystems and not allowed_found:
|
||||||
raise JSONRPCException("Some config left but did not found any allowed method to execute")
|
raise JSONRPCException("Some config left but did not found any allowed method to execute")
|
||||||
|
|
||||||
|
|
||||||
|
def load_subsystem_config(client, args):
|
||||||
|
if not args.filename or args.filename == '-':
|
||||||
|
config = json.load(sys.stdin)
|
||||||
|
else:
|
||||||
|
with open(args.filename, 'r') as file:
|
||||||
|
config = json.load(file)
|
||||||
|
|
||||||
|
for elem in config['config']:
|
||||||
|
if not elem or 'method' not in elem:
|
||||||
|
continue
|
||||||
|
client.call(elem['method'], elem['params'])
|
||||||
|
@ -121,6 +121,7 @@ function spdk_vhost_run()
|
|||||||
assert_number "$vhost_num"
|
assert_number "$vhost_num"
|
||||||
;;
|
;;
|
||||||
--conf-path=*) local vhost_conf_path="${param#*=}" ;;
|
--conf-path=*) local vhost_conf_path="${param#*=}" ;;
|
||||||
|
--json-path=*) local vhost_json_path="${param#*=}" ;;
|
||||||
--memory=*) local memory=${param#*=} ;;
|
--memory=*) local memory=${param#*=} ;;
|
||||||
*)
|
*)
|
||||||
error "Invalid parameter '$param'"
|
error "Invalid parameter '$param'"
|
||||||
@ -130,10 +131,6 @@ function spdk_vhost_run()
|
|||||||
done
|
done
|
||||||
|
|
||||||
local vhost_dir="$(get_vhost_dir $vhost_num)"
|
local vhost_dir="$(get_vhost_dir $vhost_num)"
|
||||||
if [[ -z "$vhost_conf_path" ]]; then
|
|
||||||
error "Missing mandatory parameter '--conf-path'"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
local vhost_app="$SPDK_BUILD_DIR/app/vhost/vhost"
|
local vhost_app="$SPDK_BUILD_DIR/app/vhost/vhost"
|
||||||
local vhost_log_file="$vhost_dir/vhost.log"
|
local vhost_log_file="$vhost_dir/vhost.log"
|
||||||
local vhost_pid_file="$vhost_dir/vhost.pid"
|
local vhost_pid_file="$vhost_dir/vhost.pid"
|
||||||
@ -161,13 +158,14 @@ function spdk_vhost_run()
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local cmd="$vhost_app -m $reactor_mask -p $master_core -s $memory -r $vhost_dir/rpc.sock"
|
||||||
|
if [[ -n "$vhost_conf_path" ]]; then
|
||||||
cp $vhost_conf_template $vhost_conf_file
|
cp $vhost_conf_template $vhost_conf_file
|
||||||
$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file
|
$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file
|
||||||
|
cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
|
||||||
local cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
|
fi
|
||||||
|
|
||||||
notice "Loging to: $vhost_log_file"
|
notice "Loging to: $vhost_log_file"
|
||||||
notice "Config file: $vhost_conf_file"
|
|
||||||
notice "Socket: $vhost_socket"
|
notice "Socket: $vhost_socket"
|
||||||
notice "Command: $cmd"
|
notice "Command: $cmd"
|
||||||
|
|
||||||
@ -178,10 +176,20 @@ function spdk_vhost_run()
|
|||||||
|
|
||||||
notice "waiting for app to run..."
|
notice "waiting for app to run..."
|
||||||
waitforlisten "$vhost_pid" "$vhost_dir/rpc.sock"
|
waitforlisten "$vhost_pid" "$vhost_dir/rpc.sock"
|
||||||
|
if [[ -z "$vhost_conf_path" ]]; then
|
||||||
|
$SPDK_BUILD_DIR/scripts/gen_nvme.sh "--json" | $SPDK_BUILD_DIR/scripts/rpc.py\
|
||||||
|
-s $vhost_dir/rpc.sock load_subsystem_config
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$vhost_json_path" ]]; then
|
||||||
|
$SPDK_BUILD_DIR/scripts/rpc.py -s $vhost_dir/rpc.sock load_config\
|
||||||
|
--filename "$vhost_json_path/conf.json"
|
||||||
|
fi
|
||||||
|
|
||||||
notice "vhost started - pid=$vhost_pid"
|
notice "vhost started - pid=$vhost_pid"
|
||||||
timing_exit vhost_start
|
timing_exit vhost_start
|
||||||
|
|
||||||
rm $vhost_conf_file
|
rm -f $vhost_conf_file
|
||||||
}
|
}
|
||||||
|
|
||||||
function spdk_vhost_kill()
|
function spdk_vhost_kill()
|
||||||
|
Loading…
Reference in New Issue
Block a user