ARION provides a specific JSON schemed config file which consists of TARGETs, INITIATORs, and SCENARIOs.
User can set up multiple target nodes within TARGETs' value as a list.
{
"TARGETs": [
{
"NAME": "Target01",
"ID": "user account",
"PW": "user password",
"NIC": {
"SSH": "SSH IP addresss",
"IP1": "Test IP1 address",
"IP2": "Test IP2 address",
},
"PREREQUISITE": {
"CPU": {
"RUN": true,
"SCALING": "max"
}
},
"POS": {
"DIR": "pos root directory",
"BIN": "pos binary name",
"CLI": "pos CLI name",
"CFG": "pos.conf",
"LOG": "pos.log",
"TELEMETRY": false,
"LOGGER_LEVEL": "info",
"TRANSPORT": {
"TYPE": "tcp",
"NUM_SHARED_BUFFER": 4096
},
"SUBSYSTEMs": [
{
"NUM_SUBSYSTEMS": 3,
"NQN_PREFIX": "nqn.2022-04.pos:subsystem",
"NQN_INDEX": 1,
"SN_PREFIX": "POS00000000000",
"SN_INDEX": 1,
"IP": "IP1",
"PORT": 1158
}
],
"DEVICEs": [
{
"NAME": "uram0",
"TYPE": "uram",
"NUM_BLOCKS": 2097152,
"BLOCK_SIZE": 512,
"NUMA": 0
}
],
"ARRAYs": [
{
"NAME": "ARR0",
"RAID_OR_MEDIA": "RAID5",
"WRITE_THROUGH": false,
"USER_DEVICE_LIST": "unvme-ns-0,unvme-ns-1,unvme-ns-2",
"SPARE_DEVICE_LIST": "unvme-ns-3",
"BUFFER_DEV": "uram0",
"VOLUMEs": [
{
"NUM_VOLUMES": 3,
"NAME_PREFIX": "VOL",
"NAME_INDEX": 1,
"SIZE_MiB": 2048,
"USE_SUBSYSTEMS": 3,
"NQN_PREFIX": "nqn.2022-04.pos:subsystem",
"NQN_INDEX": 1
}
]
}
]
}
}
]
}
Each object in the list is constructed as shown in the table below.
Key | Value | Option | Description |
---|---|---|---|
NAME | string | Mandatory | Target node name User can take target object using this value from the code |
ID | string | Mandatory | Target node account (linux account) |
PW | string | Mandatory | Target node password (linux password) |
NIC | object | Mandatory | Network IP addresses to access and to test |
PREREQUISITE | object | Optional | Default value: None Prerequisite setting before test |
POS | object | Mandatory | POS setting |
Key | Value | Option | Description |
---|---|---|---|
SSH | string | Mandatory | IP address to use sshpass |
TestIP | string | Mandatory | IP address to test This key name can be any value Targets>POS>SUBSYSTEMs>IP uses this key nameInitiators>Targets>IP uses this key name |
Key | Value | Option | Description |
---|---|---|---|
CPU | object | Optional | CPU setting |
SSD | object | Optional | SSD setting |
MEMORY | object | Optional | Memory setting |
NETWORK | object | Optional | Network setting |
MODPROBE | object | Optional | Modprobe setting |
SPDK | object | Optional | SPDK setting |
DEBUG | object | Optional | DEBUG setting |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the CPU setting below |
SCALING | string | Optional | CPU frequency & governor setting Valid value: min , max |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the SSD setting below |
FORMAT | boolean | Optional | If true , format all NVMe SSD except booting disk |
UDEV_FILE | string | Optional | unvme custom(POS) setting, don't touch |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the MEMORY setting below |
MAX_MAP_COUNT | int | Optional | Set vm.max_map_count |
DROP_CACHES | int | Optional | Valid value: 1 , 2 , 3 1 : Clear PageCache only2 : Clear dentries & inodes3 : Clear all |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the NETWORK setting below |
IRQ_BALANCE | string | Optional | Valid value: start , stop |
TCP_TUNE | string | Optional | Valid value: min , max core_mem, tcp_wmem, tcp_rmem, mtu_probing, window_scaling, slow_start setting |
IRQ_AFFINITYs | list | Optional | IRQ affinity setting for each NIC note: using ./test/script/set_irq_affinity_cpulist.sh |
NICs | list | Optional | Network interface setting |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the MODPROBE setting below |
MODs | list | Optional | modules to load |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the SPDK setting below |
HUGE_EVEN_ALLOC | string | Optional | Valid value:yes , no SPDK hugepage alloc option note: using ./lib/spdk/scripts/setup.sh |
NRHUGE | int | Optional | Number of hugepage note: using ./lib/spdk/scripts/setup.sh |
Key | Value | Option | Description |
---|---|---|---|
RUN | boolean | Mandatory | If true , set all the DEBUG setting below |
ULIMIT | string | Optional | Valid value: soft , hard , unlimited |
APPORT | string | Optional | Valid value: enable , disable |
DUMP_DIR | string | Optional | POS dump directory |
CORE_PATTERN | string | Optional | POS core pattern |
Key | Value | Option | Description |
---|---|---|---|
ASAN_OPTIONS | string | Optional | POS run with ASAN_OPTIONS (POS has to be built with ASAN) |
DIR | string | Mandatory | POS root directory |
BIN | string | Mandatory | POS binary name |
CLI | string | Mandatory | POS CLI name |
CLI_LOCAL_RUN | boolean | Optional | Default value: false If true, bypass sshpass to compose POS It executes more faster than using sshpass Caution: ARION must be executed in the target node |
CFG | string | Mandatory | POS config name |
WAIT_AFTER_EXE | int | Optional | Default value: 15 (s)After POS running, sleep for a while until POS ready to handle CLI |
LOG | string | Optional | Default value: None If set log filename, append log to pos/script/log_filename |
TELEMETRY | boolean | Optional | Default value: true |
LOGGER_LEVEL | string | Optional | Default value: info Valid value: info , debug , warning , error , critical |
DIRTY_BRINGUP | boolean | Optional | Default value: false |
TRANSPORT | object | Mandatory | Valid value: tcp , rdma |
SUBSYSTEMs | list | Mandatory | POS subsystems information |
DEVICEs | list | Mandatory | POS devices information |
ARRAYs | list | Mandatory | POS arrays information |
Key | Value | Option | Description |
---|---|---|---|
TYPE | string | Mandatory | Valid value: tcp , rdma |
NUM_SHARED_BUFFER | int | Mandatory | Number of shared buffer |
Key | Value | Option | Description |
---|---|---|---|
NUM_SUBSYSTEMS | int | Mandatory | Number of subsystems to create Each subsystem will follow NQN & SN rules below |
NQN_PREFIX | string | Mandatory | Prefix of NQN |
NQN_INDEX | int | Mandatory | Start index of NQN This value will be suffix of NQN with :03d format This value increases one by one until it reaches the NUM_SUBSYSTEMS |
SN_PREFIX | string | Mandatory | Prefix of serial number |
SN_INDEX | int | Mandatory | Start index of serial number This value will be suffix of SN with :03d format This value increases one by one until it reaches the NUM_SUBSYSTEMS |
IP | string | Mandatory | IP address to add listener for these subsystems |
PORT | int | Mandatory | PORT number to add listener for these subsystems |
Key | Value | Option | Description |
---|---|---|---|
NAME | string | Mandatory | Device name |
TYPE | string | Mandatory | Device type |
NUM_BLOCKS | int | Mandatory | Number of blocks |
BLOCK_SIZE | int | Mandatory | Block size |
NUMA | int | Mandatory | Numa node |
Key | Value | Option | Description |
---|---|---|---|
NAME | string | Mandatory | Array name |
RAID_OR_MEDIA | string | Mandatory | Array Raid or Media type Valid value: RAID5 , RAID0 , ZNS , TLC , NVRAM , ... |
WRITE_THROUGH | boolean | Optional | Default value: false Host write mode |
USER_DEVICE_LIST | string | Mandatory | user nvme devices |
SPARE_DEVICE_LIST | string | Mandatory | spare nvme devices |
BUFFER_DEV | string | Mandatory | buffer device name |
VOLUMEs | list | Mandatory | volume information |
Key | Value | Option | Description |
---|---|---|---|
NUM_VOLUMES | int | Mandatory | Number of volumes to create & mount Each volume will follow NAME rules below |
NAME_PREFIX | string | Mandatory | Prefix of name |
NAME_INDEX | int | Mandatory | Start index of name This value will be suffix of name with :03d format This value increases one by one until it reaches the NUM_VOLUMES |
SIZE_MiB | int | Mandatory | Volume size |
USE_SUBSYSTEMS | int | Mandatory | Number of subsystems to mount these volumes |
NQN_PREFIX | string | Mandatory | Prefix of NQN to mount |
NQN_INDEX | int | Mandatory | Start index of NQN to mount This value will be suffix of name with :03d format This value increases one by one until it reaches the USE_SUBSYSTEMS If NUM_VOLUMES > USE_SUBSYSTEMS, NQN_INDEX follows round-robin policy |
MAX_IOPS | int | Optional | Default value: 0 Maximum IOPS per volume in Kilo |
MAX_BW | int | Optional | Default value: 0 Maximum bandwidth per volume in MB/s |
User can set up multiple initiator nodes within INITIATORs' value as a list.
{
"INITIATORs": [
{
"NAME": "Initiator01",
"ID": "user account",
"PW": "user password",
"NIC": {
"SSH": "SSH IP addresss"
},
"PREREQUISITE": {
"CPU": {
"RUN": true,
"SCALING": "max"
},
"MEMORY": {
"RUN": true,
"MAX_MAP_COUNT": 65535,
"DROP_CACHES": 3
}
},
"SPDK": {
"DIR": "spdk root directory",
"TRANSPORT": "tcp"
},
"TARGETs": [
{
"NAME": "Target01",
"TRANSPORT": "tcp",
"IP": "IP1",
"PORT": 1158,
"KDD_MODE": true,
"SUBSYSTEMs": [
{
"NUM_SUBSYSTEMS": 3,
"NQN_PREFIX": "nqn.2022-04.pos\\:subsystem",
"NQN_INDEX": 1,
"SN_PREFIX": "POS00000000000",
"SN_INDEX": 1,
"NUM_NS": 1,
"NS_INDEX": 1
}
]
}
]
}
]
}
Each object in the list is constructed as shown in the table below.
Key | Value | Option | Description |
---|---|---|---|
NAME | string | Mandatory | Initiator node name |
ID | string | Mandatory | Initiator node account |
PW | string | Mandatory | Initiator node password |
NIC | object | Mandatory | Network card IP |
PREREQUISITE | object | Optional | Default value: None Prerequisite setting |
SPDK | object | Mandatory | SPDK setting (if use user-space NVMe-oF) |
TARGETs | list | Mandatory | Back-end storage which connect with NVMe-oF |
Key | Value | Option | Description |
---|---|---|---|
SSH | string | Mandatory | IP address to use sshpass |
Same as TARGETs>PREREQUISITE
option
Key | Value | Option | Description |
---|---|---|---|
DIR | string | Mandatory | SPDK root directory |
TRANSPORT | string | Mandatory | Valid value: tcp , rdma |
An initiator object can have multiple targets which consist of POS storage will be connected via NVMe-oF.
Key | Value | Option | Description |
---|---|---|---|
NAME | string | Mandatory | Target node name to connect |
TRANSPORT | string | Mandatory | Valid value: tcp , rdma |
IP | string | Mandatory | Target node's NIC>Key name to connect |
PORT | int | Mandatory | Port to connect |
KDD_MODE | boolean | Optional | Default value: false Connection option (Kernel Device Driver) |
SUBSYSTEMs | list | Mandatory | Target node's subsystem to connect |
Through bring-up sequence, those subsystems will be automatically connected.
Key | Value | Option | Description |
---|---|---|---|
NUM_SUBSYSTEMS | int | Mandatory | Number of subsystems to connect Each subsystem will follow NQN rules below |
NQN_PREFIX | string | Mandatory | Prefix of NQN |
NQN_INDEX | int | Mandatory | Start index of NQN This value will be suffix of NQN with :03d format |
SN_PREFIX | string | Optional | Prefix of serial number This value will be used at KDD_MODE |
SN_INDEX | int | Optional | Start index of serial number This value will be suffix of SN with :03d format This value will be used at KDD_MODE |
NUM_NS | int | Mandatory | Number of namespace to connect each subsystem |
NS_INDEX | int | Mandatory | Start index of namespace |
User can set up multiple test scenarios within SCENARIOs' value as a list.
{
"SCENARIOs": [
{
"PATH": "./relative_scenario_path/scenario_01.py",
"NAME": "scenario_01",
"OUTPUT_DIR": "./output_01",
"RESULT_FORMAT": "junit_xml",
"SUBPROC_LOG": true
},
{
"PATH": "/absolute_scenario_path/scenario_02.py",
"NAME": "scenario_02",
"OUTPUT_DIR": "./output_02",
"TARGETs": [
{
"POS": {
"CFG": "pos_custom.conf"
}
}
]
}
]
}
Each object in the list is constructed as shown in the table below.
Key | Value | Option | Description |
---|---|---|---|
PATH | string | Mandatory | Test scenario file path |
NAME | string | Mandatory | Test scenario file name |
OUTPUT_DIR | string | Mandatory | Directory where all output will be stored |
RESULT_FORMAT | string | Optional | Default value: junit_xml Valid value: junit_xml |
SUBPROC_LOG | boolean | Optional | Default value: false If true , print subprocess message |
TARGETs | list | Optional | TARGETs info to overwrite for this and after scenarios |
INITIATORs | list | Optional | INITIATORs info to overwrite for this and after scenarios |