]>
Commit | Line | Data |
---|---|---|
589dd1d5 IM |
1 | AT_BANNER([PMD]) |
2 | ||
a12e2a88 DDP |
3 | m4_divert_push([PREPARE_TESTS]) |
4 | ||
5 | # Given the output of `ovs-appctl dpif-netdev/pmd-rxq-show`, prints a list | |
6 | # of every rxq (one per line) in the form: | |
7 | # port_name rxq_id numa_id core_id | |
8 | parse_pmd_rxq_show () { | |
5a0e4aec | 9 | awk '/pmd thread/ {numa=$4; core=substr($6, 1, length($6) - 1)} /^ port:/ {print $2, $4, numa, core}' | sort |
2a2c67b4 KT |
10 | } |
11 | ||
12 | # Given the output of `ovs-appctl dpif-netdev/pmd-rxq-show`, | |
13 | # and with queues for each core on one line, prints the rxqs | |
14 | # of the core on one line | |
15 | # 'port:' port_name 'queue_id:' rxq_id rxq_id rxq_id rxq_id | |
16 | parse_pmd_rxq_show_group () { | |
35c91567 | 17 | awk '/port:/ {print $1, $2, $3, $4, $13, $22, $31}' |
a12e2a88 DDP |
18 | } |
19 | ||
20 | # Given the output of `ovs-appctl dpctl/dump-flows`, prints a list of flows | |
21 | # (one per line), with the pmd_id at the beginning of the line | |
22 | # | |
23 | flow_dump_prepend_pmd () { | |
138d30a9 | 24 | awk '/flow-dump from the main/ {pmd_id=-1; next} /flow-dump from pmd/ {pmd_id=$7; next} {print pmd_id, $0}' | sort |
a12e2a88 DDP |
25 | } |
26 | ||
27 | m4_divert_pop([PREPARE_TESTS]) | |
28 | ||
589dd1d5 IM |
29 | dnl CHECK_CPU_DISCOVERED([n_cpu]) |
30 | dnl | |
31 | dnl Waits until CPUs discovered and checks if number of discovered CPUs | |
32 | dnl is greater or equal to 'n_cpu'. Without parameters checks that at | |
33 | dnl least one CPU discovered. | |
34 | m4_define([CHECK_CPU_DISCOVERED], [ | |
35 | PATTERN="Discovered [[0-9]]* NUMA nodes and [[0-9]]* CPU cores" | |
3a21992e PB |
36 | OVS_WAIT_UNTIL([grep "$PATTERN" ovs-vswitchd.log]) |
37 | N_CPU=$(grep "$PATTERN" ovs-vswitchd.log | sed -e 's/.* \([[0-9]]*\) CPU cores/\1/') | |
589dd1d5 IM |
38 | if [[ -z "$1" ]] |
39 | then AT_CHECK([test "$N_CPU" -gt "0"]) | |
40 | else AT_SKIP_IF([test "$N_CPU" -lt "$1"]) | |
41 | fi | |
42 | ]) | |
43 | ||
44 | dnl CHECK_PMD_THREADS_CREATED([n_threads], [numa_id], [+line]) | |
45 | dnl | |
46 | dnl Whaits for creation of 'n_threads' or at least 1 thread if $1 not | |
47 | dnl passed. Checking starts from line number 'line' in ovs-vswithd.log . | |
48 | m4_define([CHECK_PMD_THREADS_CREATED], [ | |
140dd699 | 49 | PATTERN="There are [[0-9]]* pmd threads on numa node $2" |
589dd1d5 IM |
50 | line_st=$3 |
51 | if [[ -z "$line_st" ]] | |
52 | then | |
53 | line_st="+0" | |
54 | fi | |
55 | OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"]) | |
56 | N_THREADS=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | sed -e 's/.* \([[0-9]]*\) pmd .*/\1/') | |
57 | if [[ -z "$1" ]] | |
58 | then AT_CHECK([test "$N_THREADS" -gt 0]) | |
59 | else AT_CHECK([test "$N_THREADS" -eq "$1"]) | |
60 | fi | |
61 | ]) | |
62 | ||
63 | m4_define([SED_NUMA_CORE_PATTERN], ["s/\(numa_id \)[[0-9]]*\( core_id \)[[0-9]]*:/\1<cleared>\2<cleared>:/"]) | |
b9584f21 | 64 | m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0"]) |
589dd1d5 IM |
65 | |
66 | AT_SETUP([PMD - creating a thread/add-port]) | |
67 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA]) | |
68 | ||
69 | CHECK_CPU_DISCOVERED() | |
70 | CHECK_PMD_THREADS_CREATED() | |
71 | ||
72 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
73 | pmd thread numa_id <cleared> core_id <cleared>: | |
5a0e4aec | 74 | isolated : false |
35c91567 | 75 | port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL |
589dd1d5 IM |
76 | ]) |
77 | ||
78 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
79 | dummy@ovs-dummy: hit:0 missed:0 | |
7be29a47 BP |
80 | br0: |
81 | br0 65534/100: (dummy-internal) | |
82 | p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>) | |
589dd1d5 IM |
83 | ]) |
84 | ||
85 | OVS_VSWITCHD_STOP | |
86 | AT_CLEANUP | |
87 | ||
88 | AT_SETUP([PMD - multiqueue support]) | |
89 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA]) | |
90 | ||
91 | CHECK_CPU_DISCOVERED() | |
92 | CHECK_PMD_THREADS_CREATED() | |
93 | ||
94 | AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8]) | |
95 | ||
96 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
97 | dummy@ovs-dummy: hit:0 missed:0 | |
7be29a47 BP |
98 | br0: |
99 | br0 65534/100: (dummy-internal) | |
100 | p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>) | |
589dd1d5 IM |
101 | ]) |
102 | ||
103 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
104 | pmd thread numa_id <cleared> core_id <cleared>: | |
5a0e4aec | 105 | isolated : false |
35c91567 DM |
106 | port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL |
107 | port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL | |
108 | port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL | |
109 | port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL | |
110 | port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL | |
111 | port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL | |
112 | port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL | |
113 | port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL | |
589dd1d5 IM |
114 | ]) |
115 | ||
116 | OVS_VSWITCHD_STOP | |
117 | AT_CLEANUP | |
118 | ||
119 | ||
120 | AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues]) | |
121 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8], | |
122 | [], [], [DUMMY_NUMA]) | |
123 | ||
124 | CHECK_CPU_DISCOVERED(2) | |
125 | CHECK_PMD_THREADS_CREATED() | |
126 | ||
127 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
128 | dummy@ovs-dummy: hit:0 missed:0 | |
7be29a47 BP |
129 | br0: |
130 | br0 65534/100: (dummy-internal) | |
131 | p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>) | |
589dd1d5 IM |
132 | ]) |
133 | ||
134 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
135 | pmd thread numa_id <cleared> core_id <cleared>: | |
5a0e4aec | 136 | isolated : false |
35c91567 DM |
137 | port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL |
138 | port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL | |
139 | port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL | |
140 | port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL | |
141 | port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL | |
142 | port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL | |
143 | port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL | |
144 | port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL | |
589dd1d5 IM |
145 | ]) |
146 | ||
e77c97b9 | 147 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) |
589dd1d5 | 148 | TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) |
3fa215b1 | 149 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) |
589dd1d5 IM |
150 | CHECK_PMD_THREADS_CREATED([2], [], [+$TMP]) |
151 | ||
47b5fd98 IM |
152 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl |
153 | port: p0 queue-id: 0 3 4 7 | |
154 | port: p0 queue-id: 1 2 5 6 | |
e77c97b9 KT |
155 | ]) |
156 | ||
157 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) | |
47b5fd98 IM |
158 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl |
159 | port: p0 queue-id: 0 2 4 6 | |
160 | port: p0 queue-id: 1 3 5 7 | |
589dd1d5 IM |
161 | ]) |
162 | ||
163 | TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) | |
3fa215b1 | 164 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) |
589dd1d5 IM |
165 | CHECK_PMD_THREADS_CREATED([1], [], [+$TMP]) |
166 | ||
167 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
168 | pmd thread numa_id <cleared> core_id <cleared>: | |
5a0e4aec | 169 | isolated : false |
35c91567 DM |
170 | port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL |
171 | port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL | |
172 | port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL | |
173 | port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL | |
174 | port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL | |
175 | port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL | |
176 | port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL | |
177 | port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL | |
589dd1d5 IM |
178 | ]) |
179 | ||
180 | OVS_VSWITCHD_STOP | |
181 | AT_CLEANUP | |
182 | ||
183 | ||
184 | AT_SETUP([PMD - stats]) | |
185 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4], | |
186 | [], [], [DUMMY_NUMA]) | |
187 | ||
188 | CHECK_CPU_DISCOVERED() | |
189 | CHECK_PMD_THREADS_CREATED() | |
190 | ||
191 | AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg]) | |
192 | AT_CHECK([ovs-ofctl add-flow br0 action=normal]) | |
4c30b246 | 193 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:emc-insert-inv-prob=1]) |
60d8ccae | 194 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:smc-enable=true]) |
589dd1d5 IM |
195 | |
196 | sleep 1 | |
197 | ||
198 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
199 | dummy@ovs-dummy: hit:0 missed:0 | |
7be29a47 BP |
200 | br0: |
201 | br0 65534/100: (dummy-internal) | |
202 | p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>) | |
589dd1d5 IM |
203 | ]) |
204 | ||
60d8ccae | 205 | AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 9], [0], [dnl |
589dd1d5 | 206 | pmd thread numa_id <cleared> core_id <cleared>: |
5a0e4aec BP |
207 | packets received: 0 |
208 | packet recirculations: 0 | |
209 | avg. datapath passes per packet: 0.00 | |
210 | emc hits: 0 | |
60d8ccae | 211 | smc hits: 0 |
5a0e4aec BP |
212 | megaflow hits: 0 |
213 | avg. subtable lookups per megaflow hit: 0.00 | |
214 | miss with success upcall: 0 | |
215 | miss with failed upcall: 0 | |
589dd1d5 IM |
216 | ]) |
217 | ||
218 | ovs-appctl time/stop | |
219 | ovs-appctl time/warp 100 | |
220 | ( | |
221 | for i in `seq 0 19`; | |
222 | do | |
223 | pkt="in_port(7),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)" | |
224 | AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt]) | |
225 | done | |
226 | ) | |
227 | ovs-appctl time/warp 100 | |
228 | ||
229 | AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl | |
3d4b2e6e | 230 | skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0) |
589dd1d5 IM |
231 | ]) |
232 | AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl | |
3d4b2e6e | 233 | recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(frag=no), actions: <del> |
589dd1d5 IM |
234 | ]) |
235 | ||
60d8ccae | 236 | AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 9], [0], [dnl |
589dd1d5 | 237 | pmd thread numa_id <cleared> core_id <cleared>: |
5a0e4aec BP |
238 | packets received: 20 |
239 | packet recirculations: 0 | |
240 | avg. datapath passes per packet: 1.00 | |
241 | emc hits: 19 | |
60d8ccae | 242 | smc hits: 0 |
5a0e4aec BP |
243 | megaflow hits: 0 |
244 | avg. subtable lookups per megaflow hit: 0.00 | |
245 | miss with success upcall: 1 | |
246 | miss with failed upcall: 0 | |
589dd1d5 IM |
247 | ]) |
248 | ||
249 | OVS_VSWITCHD_STOP | |
250 | AT_CLEANUP | |
a12e2a88 DDP |
251 | |
252 | dnl Reconfigure the number of rx queues of a port, make sure that all the | |
253 | dnl queues are polled by the datapath and try to send a couple of packets. | |
254 | AT_SETUP([PMD - reconfigure n_rxq]) | |
255 | OVS_VSWITCHD_START( | |
256 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
257 | add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 | |
258 | ], [], [], [--dummy-numa 0]) | |
259 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
260 | ||
261 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
262 | ||
263 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
264 | p1 0 0 0 | |
265 | p1 1 0 0 | |
266 | p2 0 0 0 | |
267 | ]) | |
268 | ||
269 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
270 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
271 | ||
272 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
273 | ||
274 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
275 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
276 | ||
277 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
278 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
279 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
280 | ]) |
281 | ||
282 | AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4]) | |
283 | ||
284 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
285 | p1 0 0 0 | |
286 | p1 1 0 0 | |
287 | p1 2 0 0 | |
288 | p1 3 0 0 | |
289 | p2 0 0 0 | |
290 | ]) | |
291 | ||
292 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
293 | ||
294 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 3 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
295 | ||
296 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
297 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
298 | ||
299 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
300 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
301 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
302 | ]) |
303 | ||
2a21e757 IM |
304 | dnl Check resetting to default number of rx queues after removal from the db. |
305 | AT_CHECK([ovs-vsctl remove interface p1 options n_rxq]) | |
306 | ||
307 | AT_CHECK([ovs-appctl dpif/show | grep p1 | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
7be29a47 | 308 | p1 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>) |
2a21e757 IM |
309 | ]) |
310 | ||
a12e2a88 DDP |
311 | OVS_VSWITCHD_STOP |
312 | AT_CLEANUP | |
313 | ||
314 | dnl There was a bug where OVS failed to create a ukey and install a megaflow | |
315 | dnl if a packet with the exact same flow was received by two different pmd | |
316 | dnl threads. This is a regression test for that bug. | |
317 | AT_SETUP([PMD - same flow multiple threads]) | |
318 | OVS_VSWITCHD_START( | |
319 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
320 | set Open_vSwitch . other_config:pmd-cpu-mask=3 | |
321 | ], [], [], [--dummy-numa 0,0]) | |
322 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
323 | ||
324 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
325 | ||
326 | dnl Make sure that the queues are on different cores. There's no way to | |
327 | dnl control which queue is on which thread, we just need to make sure that | |
328 | dnl two threads (core_id) show up in pmd-rxq-show | |
329 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 4 -d ' ' | sort], [0], [dnl | |
330 | 0 | |
331 | 1 | |
332 | ]) | |
333 | ||
334 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
335 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
336 | ||
337 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
338 | ||
339 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
340 | ||
341 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4]) | |
342 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
343 | ||
344 | dnl Make sure that both flows have been installed | |
345 | AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl | |
74c4530d JP |
346 | 0 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,controller(reason=1,dont_send=0,continuation=0,recirc_id=1,rule_cookie=0,controller_id=0,max_len=65535)) |
347 | 1 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,controller(reason=1,dont_send=0,continuation=0,recirc_id=1,rule_cookie=0,controller_id=0,max_len=65535)) | |
a12e2a88 DDP |
348 | ]) |
349 | ||
350 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
351 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
352 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
353 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) | |
354 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
355 | ]) |
356 | ||
357 | OVS_VSWITCHD_STOP | |
358 | AT_CLEANUP | |
359 | ||
360 | AT_SETUP([PMD - change numa node]) | |
361 | OVS_VSWITCHD_START( | |
362 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
363 | add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=2 -- \ | |
364 | set Open_vSwitch . other_config:pmd-cpu-mask=3 | |
365 | ], [], [], [--dummy-numa 0,1]) | |
366 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
367 | ||
368 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
369 | ||
370 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
371 | p1 0 0 0 | |
372 | p1 1 0 0 | |
373 | p2 0 0 0 | |
374 | p2 1 0 0 | |
375 | ]) | |
376 | ||
377 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
378 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
379 | ||
380 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
381 | ||
ad73c142 | 382 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) |
a12e2a88 DDP |
383 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) |
384 | ||
385 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
386 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
387 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
ad73c142 TR |
388 | ]) |
389 | ||
390 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
391 | ||
392 | AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
393 | ||
394 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
395 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
396 | ||
397 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
398 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered) |
399 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
400 | ]) |
401 | ||
402 | AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1]) | |
403 | ||
404 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
405 | p1 0 0 0 | |
406 | p1 1 0 0 | |
407 | p2 0 1 1 | |
408 | p2 1 1 1 | |
409 | ]) | |
410 | ||
411 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
412 | ||
413 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
414 | ||
ad73c142 | 415 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) |
a12e2a88 DDP |
416 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) |
417 | ||
418 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
419 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
420 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
ad73c142 TR |
421 | ]) |
422 | ||
423 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
424 | ||
425 | AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
426 | ||
427 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
428 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
429 | ||
430 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
431 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered) |
432 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
433 | ]) |
434 | ||
435 | OVS_VSWITCHD_STOP | |
436 | AT_CLEANUP | |
437 | ||
438 | AT_SETUP([PMD - non pmd device]) | |
439 | OVS_VSWITCHD_START( | |
440 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 -- \ | |
441 | add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \ | |
442 | set Interface br0 options:tx_pcap=br0.pcap -- \ | |
443 | set Open_vSwitch . other_config:pmd-cpu-mask=1 | |
444 | ], [], [], [--dummy-numa 0,0]) | |
445 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
446 | ||
447 | AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL]) | |
448 | ||
449 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
450 | p1 0 0 0 | |
451 | ]) | |
452 | ||
453 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
454 | ||
455 | AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
456 | ||
457 | OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2]) | |
458 | ||
459 | AT_CHECK([ovs-pcap br0.pcap], [0], [dnl | |
6f068379 BP |
460 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f |
461 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f | |
a12e2a88 DDP |
462 | ]) |
463 | ||
464 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2]) | |
465 | ||
466 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
467 | p1 0 0 1 | |
468 | ]) | |
469 | ||
470 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
471 | ||
472 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
473 | ||
474 | AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
475 | ||
476 | OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4]) | |
477 | ||
478 | AT_CHECK([ovs-pcap br0.pcap], [0], [dnl | |
6f068379 BP |
479 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f |
480 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f | |
481 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f | |
482 | 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f | |
a12e2a88 DDP |
483 | ]) |
484 | ||
485 | OVS_VSWITCHD_STOP | |
486 | AT_CLEANUP | |
487 | ||
488 | AT_SETUP([PMD - add remove ports]) | |
489 | OVS_VSWITCHD_START( | |
490 | [], [], [], [--dummy-numa 0,0]) | |
491 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
492 | ||
493 | AT_CHECK([ovs-ofctl add-flow br0 actions=controller]) | |
494 | ||
495 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1]) | |
496 | ||
497 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
498 | p1 0 0 0 | |
499 | ]) | |
500 | ||
501 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
502 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
503 | ||
504 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
505 | ||
506 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
507 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
508 | ||
509 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
510 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
511 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
512 | ]) |
513 | ||
514 | AT_CHECK([ovs-vsctl del-port br0 p1]) | |
515 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1]) | |
516 | ||
517 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
518 | ||
519 | AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) | |
520 | ||
521 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
522 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
523 | ||
524 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
6f068379 BP |
525 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) |
526 | icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc | |
a12e2a88 DDP |
527 | ]) |
528 | ||
529 | OVS_VSWITCHD_STOP | |
530 | AT_CLEANUP | |
5e512845 DDP |
531 | |
532 | AT_SETUP([PMD - rxq affinity]) | |
533 | OVS_VSWITCHD_START( | |
534 | [], [], [], [--dummy-numa 0,0,0,0,0,0,0,0,0]) | |
535 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
536 | ||
537 | AT_CHECK([ovs-ofctl add-flow br0 actions=controller]) | |
538 | ||
3fa215b1 | 539 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1fe]) |
5e512845 DDP |
540 | |
541 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=4 other_config:pmd-rxq-affinity="0:3,1:7,2:2,3:8"]) | |
542 | ||
543 | dnl The rxqs should be on the requested cores. | |
544 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
545 | p1 0 0 3 | |
546 | p1 1 0 7 | |
547 | p1 2 0 2 | |
548 | p1 3 0 8 | |
549 | ]) | |
550 | ||
551 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6]) | |
552 | ||
553 | dnl We removed the cores requested by some queues from pmd-cpu-mask. | |
554 | dnl Those queues will not be polled. | |
555 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
556 | p1 2 0 2 | |
557 | ]) | |
558 | ||
559 | AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity]) | |
560 | ||
561 | dnl We removed the rxq-affinity request. dpif-netdev should assign queues | |
562 | dnl in a round robin fashion. We just make sure that every rxq is being | |
563 | dnl polled again. | |
564 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl | |
565 | p1 0 | |
566 | p1 1 | |
567 | p1 2 | |
568 | p1 3 | |
569 | ]) | |
570 | ||
571 | AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:1']) | |
572 | ||
573 | dnl We explicitly requested core 1 for queue 0. Core 1 becomes isolated and | |
574 | dnl every other queue goes to core 2. | |
575 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
576 | p1 0 0 1 | |
577 | p1 1 0 2 | |
578 | p1 2 0 2 | |
579 | p1 3 0 2 | |
580 | ]) | |
581 | ||
582 | OVS_VSWITCHD_STOP(["/dpif_netdev|WARN|There is no PMD thread on core/d"]) | |
583 | AT_CLEANUP | |
546e57d4 | 584 | |
5dd57e80 IM |
585 | AT_SETUP([PMD - rxq affinity - NUMA]) |
586 | OVS_VSWITCHD_START( | |
587 | [], [], [], [--dummy-numa 0,0,0,1,1]) | |
588 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
589 | ||
590 | AT_CHECK([ovs-ofctl add-flow br0 actions=controller]) | |
591 | ||
592 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=7e]) | |
593 | ||
594 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 options:numa_id=0 other_config:pmd-rxq-affinity="0:1,1:2"]) | |
595 | ||
596 | dnl The rxqs should be on the requested cores. | |
597 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
598 | p1 0 0 1 | |
599 | p1 1 0 2 | |
600 | ]) | |
601 | ||
602 | AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity="0:3,1:4"]) | |
603 | ||
604 | dnl We moved the queues to different numa node. Expecting threads on | |
605 | dnl NUMA node 1 to be created. | |
606 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
607 | p1 0 1 3 | |
608 | p1 1 1 4 | |
609 | ]) | |
610 | ||
611 | AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity="0:3,1:1"]) | |
612 | ||
613 | dnl Queues splitted between NUMA nodes. | |
614 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
615 | p1 0 1 3 | |
616 | p1 1 0 1 | |
617 | ]) | |
618 | ||
619 | AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity]) | |
620 | ||
621 | dnl We removed the rxq-affinity request. dpif-netdev should assign queues | |
622 | dnl in a round robin fashion. We just make sure that every rxq is being | |
623 | dnl polled again. | |
624 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl | |
625 | p1 0 | |
626 | p1 1 | |
627 | ]) | |
628 | ||
629 | AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:3']) | |
630 | ||
631 | dnl We explicitly requesting NUMA node 1 for queue 0. | |
632 | dnl Queue 1 should be polled by thread from NUMA node 0. | |
633 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2,3 -d ' '], [0], [dnl | |
634 | p1 0 1 | |
635 | p1 1 0 | |
636 | ]) | |
637 | ||
638 | OVS_VSWITCHD_STOP | |
639 | AT_CLEANUP | |
640 | ||
546e57d4 DDP |
641 | AT_SETUP([PMD - monitor threads]) |
642 | OVS_VSWITCHD_START( | |
643 | [], [], [], [--dummy-numa 0,0]) | |
644 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
645 | ||
646 | dnl The two devices are connected together externally using net.sock | |
647 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 options:pstream=punix:$OVS_RUNDIR/net.sock]) | |
648 | AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=1 options:stream=unix:$OVS_RUNDIR/net.sock]) | |
649 | ||
650 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
651 | p1 0 0 0 | |
652 | p2 0 0 0 | |
653 | ]) | |
654 | ||
655 | dnl Enable bfd with a very aggressive interval. This will make the monitor very | |
656 | dnl busy, and uncover race conditions with the main thread. | |
657 | AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true bfd:min_rx=1 bfd:min_tx=1]) | |
658 | AT_CHECK([ovs-vsctl set Interface p2 bfd:enable=true bfd:min_rx=1 bfd:min_tx=1]) | |
659 | ||
15394e0f IM |
660 | AT_CHECK([ovs-vsctl wait-until Interface p1 bfd_status:forwarding=true \ |
661 | -- wait-until Interface p2 bfd_status:forwarding=true]) | |
546e57d4 DDP |
662 | |
663 | dnl Trigger reconfiguration of the datapath | |
664 | AT_CHECK([ovs-vsctl set Interface p1 options:n_rxq=2]) | |
665 | AT_CHECK([ovs-vsctl set Interface p2 options:n_rxq=2]) | |
666 | ||
667 | dnl Make sure that reconfiguration succeded | |
668 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
669 | p1 0 0 0 | |
670 | p1 1 0 0 | |
671 | p2 0 0 0 | |
672 | p2 1 0 0 | |
673 | ]) | |
674 | ||
e32971b8 | 675 | OVS_VSWITCHD_STOP |
546e57d4 | 676 | AT_CLEANUP |
f5d317a1 DDP |
677 | |
678 | AT_SETUP([PMD - dpctl]) | |
679 | OVS_VSWITCHD_START( | |
680 | [del-br br0], [], [], [--dummy-numa 0,0]) | |
681 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
682 | ||
683 | AT_CHECK([ovs-appctl dpctl/add-dp dummy@dp0]) | |
684 | AT_CHECK([ovs-appctl dpctl/add-if dummy@dp0 p1,type=dummy-pmd]) | |
685 | AT_CHECK([ovs-appctl dpctl/add-if dummy@dp0 p2,type=dummy]) | |
686 | ||
687 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show dp0 | parse_pmd_rxq_show], [0], [dnl | |
688 | p1 0 0 0 | |
689 | ]) | |
690 | ||
691 | AT_CHECK([ovs-appctl dpctl/show dummy@dp0], [0], [dnl | |
692 | dummy@dp0: | |
d14a36f4 BP |
693 | lookups: hit:0 missed:0 lost:0 |
694 | flows: 0 | |
695 | port 0: dp0 (dummy-internal) | |
696 | port 1: p1 (dummy-pmd: configured_rx_queues=1, configured_tx_queues=1, requested_rx_queues=1, requested_tx_queues=1) | |
697 | port 2: p2 (dummy) | |
f5d317a1 DDP |
698 | ]) |
699 | ||
700 | AT_CHECK([ovs-appctl dpctl/add-flow dummy@dp0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234)' 2], [0], [dnl | |
701 | ]) | |
702 | ||
703 | AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 | sort], [0], [dnl | |
f5d317a1 | 704 | flow-dump from pmd on cpu core: 0 |
138d30a9 | 705 | flow-dump from the main thread: |
f5d317a1 DDP |
706 | recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2 |
707 | recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2 | |
708 | ]) | |
709 | ||
2fe34c03 TZ |
710 | dnl Check pmd filtering option. |
711 | AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 pmd=0], [0], [dnl | |
712 | recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2 | |
713 | ]) | |
714 | ||
715 | AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 pmd=-1], [0], [dnl | |
716 | recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2 | |
717 | ]) | |
718 | ||
f5d317a1 DDP |
719 | AT_CHECK([ovs-appctl dpctl/del-flow dummy@dp0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234)'], [0], [dnl |
720 | ]) | |
721 | ||
722 | AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0], [0], [dnl | |
723 | ]) | |
724 | ||
725 | AT_CHECK([ovs-appctl dpctl/del-dp dummy@dp0], [0], [dnl | |
726 | ]) | |
727 | ||
728 | OVS_VSWITCHD_STOP | |
729 | AT_CLEANUP |