File: run_perftest_multi_devices

package info (click to toggle)
perftest 4.4+0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, sid
  • size: 3,980 kB
  • sloc: ansic: 14,200; sh: 11,191; makefile: 57
file content (182 lines) | stat: -rwxr-xr-x 4,345 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/bin/bash
# Script to launch a multi device test on seperate processes.

GET_HELP=0
HAVE_CORES=0
HAVE_DEVICES=0
HAVE_IB_PORTS=0
HAVE_GID_INDEXES=0
HAVE_REMOTE_HOST=0
HAVE_CMD=0
BASE_TCP_PORT=15000


function force_dependencies {
	if [[ $GET_HELP -eq 1 ]]
	then
		print_usage
		exit
	fi

	#mandatory flags
	if [[ $HAVE_DEVICES -eq 0 ]]
	then
		echo "-d/--devices flag is mandatory"
		exit
	fi

	if [[ $HAVE_CMD -eq 0 ]]
	then
		echo "-C/--cmd flag is mandatory"
		exit
	fi

	#optional flags
	#check that all arguments have enough params.
	if [[ $HAVE_CORES -eq 1 ]]
	then
		if [[ ${#CORES_LIST[@]} -ne $EXPECTED_PARAMS ]]
		then
			echo "number of cores should be equal to number of devices (cores for each device)"
			exit
		fi
	fi

	if [[ $HAVE_IB_PORTS -eq 1 ]]
	then
		if [[ ${#IB_PORTS_LIST[@]} -ne $EXPECTED_PARAMS ]]
		then
			echo "number of ib ports should be equal to number of devices (ib_port for each device)"
			exit
		fi
	fi

	if [[ $HAVE_GID_INDEXES -eq 1 ]]
	then
		if [[ ${#GID_INDEXES_LIST[@]} -ne $EXPECTED_PARAMS ]]
		then
			echo "number of gid indexes should be equal to number of devices (gid_index for each device)"
			exit
		fi
	fi
}

function run_commands {
	for (( I=0 ; I < $EXPECTED_PARAMS ; I++ ))
	do
		cmd=""
		if [[ $HAVE_CORES -eq 1 ]]
		then
			cmd="taskset -c ${CORES_LIST[$I]}"
		fi

		#mandatory:
		cmd="$cmd $TEST_CMD -d ${DEVICE_LIST[$I]} -p $(($BASE_TCP_PORT+I))"

		#optional:
		if [[ $HAVE_IB_PORTS -eq 1 ]]
		then
			cmd="$cmd -i ${IB_PORTS_LIST[$I]}"
		fi

		if [[ $HAVE_GID_INDEXES -eq 1 ]]
		then
			cmd="$cmd -x ${GID_INDEXES_LIST[$I]}"
		fi

		if [[ $HAVE_REMOTE_HOST -eq 1 ]]
		then
			cmd="$cmd $REMOTE_HOST"
		fi

		if [[ $I -ne $(($EXPECTED_PARAMS-1)) ]]
		then
			cmd="$cmd &"
		fi

		eval $cmd
	done
}

function print_usage {
	echo -e "\nUsage:"
	echo "    Server side: run_perftest_multi_device --devices dev1,dev2 --cmd \"<perftest command>\" [optional_flags]"
	echo "    Client side: run_perftest_multi_device --devices dev1,dev2 --cmd \"<perftest command>\" --remote <server_name> [optional_flags]"
	echo ""
	echo "    ** Please make sure that <perftest command> does not include the <server_name> on both sides. **"
	echo "       This should be added only by --remote flag on the Client side."

	echo -e "\nMandatory flags:"
	echo "    -d, --devices       List of IB devices, seperated by comma. This will override '-d, --ib-dev' flag if existed in the perftest command."
	echo "                        i.e. --devices dev1,dev2"

	echo "    -C, --cmd           A valid perftest command."
	echo "                        i.e. --cmd \"ib_write_bw --size 64 --duration 3\""

	echo -e "\nOptional flags:"
	echo "    -c,  --cores        Pin each device to a specific core using taskset"
	echo "                        i.e. --cores 0,1  - This will pin dev1 command to core 0 and dev2 command to core 1"

	echo "    -i,  --ib_ports     Choose ib_port for each device. This will override '-i, --ib-port' flag if existed in the perftest command."
	echo "                        i.e. --ib_ports 1,2  - dev1 will work with port 1 and dev2 will work with port 2"

	echo "    -x,  --gid_indexes  Choose gid_index for each device. This will override '-x, --gid-index' flag if existed in the perftest command."
	echo "                        i.e. --gid_indexes 3,7  - dev1 will work with gid_index 3 and dev2 will work with gid_index 7"

	echo "    -r,  --remote       Sets the remote host to connect. This will set it as the client side."
	echo "                        i.e. --remote <server_host_name> , or --remote <server_ip>."
}

#parser
while [[ $# -ge 1 ]]
do
	key="$1"

	case $key in
		-h|--help)
		GET_HELP=1
		shift
		;;
		-c|--cores)
		CORES_LIST=($(echo "$2" | tr "," " "))
		HAVE_CORES=1
		shift # past argument
		;;
		-d|--devices)
		DEVICE_LIST=($(echo "$2" | tr "," " "))
		HAVE_DEVICES=1
		EXPECTED_PARAMS=${#DEVICE_LIST[@]}
		shift # past argument
		;;
		-i|--ib_ports)
		IB_PORTS_LIST=($(echo "$2" | tr "," " "))
		HAVE_IB_PORTS=1
		shift # past argument
		;;
		-x|--gid_indexes)
		GID_INDEXES_LIST=($(echo "$2" | tr "," " "))
		HAVE_GID_INDEXES=1
		shift
		;;
		-C|--cmd)
		TEST_CMD="$2"
		HAVE_CMD=1
		shift
		;;
		-r|--remote)
		REMOTE_HOST="$2"
		HAVE_REMOTE_HOST=1
		shift
		;;
		*)
		# unknown option - ignore
		;;
	esac
	shift
done

force_dependencies

run_commands

exit