]>
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 () { | |
9 | awk '/pmd/ {numa=$4; core=substr($6, 1, length($6) - 1)} /\t/{for (i=4; i<=NF; i++) print $2, $i, numa, core}' | sort | |
10 | } | |
11 | ||
12 | # Given the output of `ovs-appctl dpctl/dump-flows`, prints a list of flows | |
13 | # (one per line), with the pmd_id at the beginning of the line | |
14 | # | |
15 | flow_dump_prepend_pmd () { | |
16 | awk '/flow-dump from non-dpdk/ {pmd_id=-1; next} /flow-dump from pmd/ {pmd_id=$7; next} {print pmd_id, $0}' | sort | |
17 | } | |
18 | ||
19 | m4_divert_pop([PREPARE_TESTS]) | |
20 | ||
589dd1d5 IM |
21 | dnl CHECK_CPU_DISCOVERED([n_cpu]) |
22 | dnl | |
23 | dnl Waits until CPUs discovered and checks if number of discovered CPUs | |
24 | dnl is greater or equal to 'n_cpu'. Without parameters checks that at | |
25 | dnl least one CPU discovered. | |
26 | m4_define([CHECK_CPU_DISCOVERED], [ | |
27 | PATTERN="Discovered [[0-9]]* NUMA nodes and [[0-9]]* CPU cores" | |
3a21992e PB |
28 | OVS_WAIT_UNTIL([grep "$PATTERN" ovs-vswitchd.log]) |
29 | N_CPU=$(grep "$PATTERN" ovs-vswitchd.log | sed -e 's/.* \([[0-9]]*\) CPU cores/\1/') | |
589dd1d5 IM |
30 | if [[ -z "$1" ]] |
31 | then AT_CHECK([test "$N_CPU" -gt "0"]) | |
32 | else AT_SKIP_IF([test "$N_CPU" -lt "$1"]) | |
33 | fi | |
34 | ]) | |
35 | ||
36 | dnl CHECK_PMD_THREADS_CREATED([n_threads], [numa_id], [+line]) | |
37 | dnl | |
38 | dnl Whaits for creation of 'n_threads' or at least 1 thread if $1 not | |
39 | dnl passed. Checking starts from line number 'line' in ovs-vswithd.log . | |
40 | m4_define([CHECK_PMD_THREADS_CREATED], [ | |
41 | PATTERN="Created [[0-9]]* pmd threads on numa node $2" | |
42 | line_st=$3 | |
43 | if [[ -z "$line_st" ]] | |
44 | then | |
45 | line_st="+0" | |
46 | fi | |
47 | OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"]) | |
48 | N_THREADS=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | sed -e 's/.* \([[0-9]]*\) pmd .*/\1/') | |
49 | if [[ -z "$1" ]] | |
50 | then AT_CHECK([test "$N_THREADS" -gt 0]) | |
51 | else AT_CHECK([test "$N_THREADS" -eq "$1"]) | |
52 | fi | |
53 | ]) | |
54 | ||
55 | m4_define([SED_NUMA_CORE_PATTERN], ["s/\(numa_id \)[[0-9]]*\( core_id \)[[0-9]]*:/\1<cleared>\2<cleared>:/"]) | |
56 | m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0,1,1,1,1"]) | |
57 | ||
58 | AT_SETUP([PMD - creating a thread/add-port]) | |
59 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA]) | |
60 | ||
61 | CHECK_CPU_DISCOVERED() | |
62 | CHECK_PMD_THREADS_CREATED() | |
63 | ||
64 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
65 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 66 | isolated : false |
589dd1d5 IM |
67 | port: p0 queue-id: 0 |
68 | ]) | |
69 | ||
70 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
71 | dummy@ovs-dummy: hit:0 missed:0 | |
72 | br0: | |
73 | br0 65534/100: (dummy) | |
74 | p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>) | |
75 | ]) | |
76 | ||
77 | OVS_VSWITCHD_STOP | |
78 | AT_CLEANUP | |
79 | ||
80 | AT_SETUP([PMD - multiqueue support]) | |
81 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA]) | |
82 | ||
83 | CHECK_CPU_DISCOVERED() | |
84 | CHECK_PMD_THREADS_CREATED() | |
85 | ||
86 | AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8]) | |
87 | ||
88 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
89 | dummy@ovs-dummy: hit:0 missed:0 | |
90 | br0: | |
91 | br0 65534/100: (dummy) | |
92 | p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>) | |
93 | ]) | |
94 | ||
95 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
96 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 97 | isolated : false |
589dd1d5 IM |
98 | port: p0 queue-id: 0 1 2 3 4 5 6 7 |
99 | ]) | |
100 | ||
101 | OVS_VSWITCHD_STOP | |
102 | AT_CLEANUP | |
103 | ||
104 | ||
105 | AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues]) | |
106 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8], | |
107 | [], [], [DUMMY_NUMA]) | |
108 | ||
109 | CHECK_CPU_DISCOVERED(2) | |
110 | CHECK_PMD_THREADS_CREATED() | |
111 | ||
112 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
113 | dummy@ovs-dummy: hit:0 missed:0 | |
114 | br0: | |
115 | br0 65534/100: (dummy) | |
116 | p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>) | |
117 | ]) | |
118 | ||
119 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
120 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 121 | isolated : false |
589dd1d5 IM |
122 | port: p0 queue-id: 0 1 2 3 4 5 6 7 |
123 | ]) | |
124 | ||
125 | TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) | |
126 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=3]) | |
127 | CHECK_PMD_THREADS_CREATED([2], [], [+$TMP]) | |
128 | ||
129 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
130 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 131 | isolated : false |
589dd1d5 IM |
132 | port: p0 queue-id: 0 2 4 6 |
133 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 134 | isolated : false |
589dd1d5 IM |
135 | port: p0 queue-id: 1 3 5 7 |
136 | ]) | |
137 | ||
138 | TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) | |
139 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1]) | |
140 | CHECK_PMD_THREADS_CREATED([1], [], [+$TMP]) | |
141 | ||
142 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl | |
143 | pmd thread numa_id <cleared> core_id <cleared>: | |
3eb67853 | 144 | isolated : false |
589dd1d5 IM |
145 | port: p0 queue-id: 0 1 2 3 4 5 6 7 |
146 | ]) | |
147 | ||
148 | OVS_VSWITCHD_STOP | |
149 | AT_CLEANUP | |
150 | ||
151 | ||
152 | AT_SETUP([PMD - stats]) | |
153 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4], | |
154 | [], [], [DUMMY_NUMA]) | |
155 | ||
156 | CHECK_CPU_DISCOVERED() | |
157 | CHECK_PMD_THREADS_CREATED() | |
158 | ||
159 | AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg]) | |
160 | AT_CHECK([ovs-ofctl add-flow br0 action=normal]) | |
161 | ||
162 | sleep 1 | |
163 | ||
164 | AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl | |
165 | dummy@ovs-dummy: hit:0 missed:0 | |
166 | br0: | |
167 | br0 65534/100: (dummy) | |
168 | p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>) | |
169 | ]) | |
170 | ||
171 | AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl | |
172 | pmd thread numa_id <cleared> core_id <cleared>: | |
173 | emc hits:0 | |
174 | megaflow hits:0 | |
175 | miss:0 | |
176 | lost:0 | |
177 | ]) | |
178 | ||
179 | ovs-appctl time/stop | |
180 | ovs-appctl time/warp 100 | |
181 | ( | |
182 | for i in `seq 0 19`; | |
183 | do | |
184 | 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)" | |
185 | AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt]) | |
186 | done | |
187 | ) | |
188 | ovs-appctl time/warp 100 | |
189 | ||
190 | AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl | |
5cf3edb3 | 191 | 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),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 |
192 | ]) |
193 | AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl | |
9044f2c1 | 194 | recirc_id(0),in_port(1),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 |
195 | ]) |
196 | ||
197 | AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl | |
198 | pmd thread numa_id <cleared> core_id <cleared>: | |
199 | emc hits:19 | |
200 | megaflow hits:0 | |
201 | miss:1 | |
202 | lost:0 | |
203 | ]) | |
204 | ||
205 | OVS_VSWITCHD_STOP | |
206 | AT_CLEANUP | |
a12e2a88 DDP |
207 | |
208 | dnl Reconfigure the number of rx queues of a port, make sure that all the | |
209 | dnl queues are polled by the datapath and try to send a couple of packets. | |
210 | AT_SETUP([PMD - reconfigure n_rxq]) | |
211 | OVS_VSWITCHD_START( | |
212 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
213 | add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 | |
214 | ], [], [], [--dummy-numa 0]) | |
215 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
216 | ||
217 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
218 | ||
219 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
220 | p1 0 0 0 | |
221 | p1 1 0 0 | |
222 | p2 0 0 0 | |
223 | ]) | |
224 | ||
225 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
226 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
227 | ||
228 | 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)']) | |
229 | ||
230 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
231 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
232 | ||
233 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 234 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
235 | 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:f7ff |
236 | ]) | |
237 | ||
238 | AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4]) | |
239 | ||
240 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
241 | p1 0 0 0 | |
242 | p1 1 0 0 | |
243 | p1 2 0 0 | |
244 | p1 3 0 0 | |
245 | p2 0 0 0 | |
246 | ]) | |
247 | ||
248 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
249 | ||
250 | 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)']) | |
251 | ||
252 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
253 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
254 | ||
255 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 256 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
257 | 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:f7ff |
258 | ]) | |
259 | ||
260 | OVS_VSWITCHD_STOP | |
261 | AT_CLEANUP | |
262 | ||
263 | dnl There was a bug where OVS failed to create a ukey and install a megaflow | |
264 | dnl if a packet with the exact same flow was received by two different pmd | |
265 | dnl threads. This is a regression test for that bug. | |
266 | AT_SETUP([PMD - same flow multiple threads]) | |
267 | OVS_VSWITCHD_START( | |
268 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
269 | set Open_vSwitch . other_config:pmd-cpu-mask=3 | |
270 | ], [], [], [--dummy-numa 0,0]) | |
271 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
272 | ||
273 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
274 | ||
275 | dnl Make sure that the queues are on different cores. There's no way to | |
276 | dnl control which queue is on which thread, we just need to make sure that | |
277 | dnl two threads (core_id) show up in pmd-rxq-show | |
278 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 4 -d ' ' | sort], [0], [dnl | |
279 | 0 | |
280 | 1 | |
281 | ]) | |
282 | ||
283 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
284 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
285 | ||
286 | 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)']) | |
287 | ||
288 | 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)']) | |
289 | ||
290 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4]) | |
291 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
292 | ||
293 | dnl Make sure that both flows have been installed | |
294 | AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl | |
295 | 0 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller)) | |
296 | 1 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller)) | |
297 | ]) | |
298 | ||
299 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 300 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 | 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:f7ff |
efe179e0 | 302 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
303 | 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:f7ff |
304 | ]) | |
305 | ||
306 | OVS_VSWITCHD_STOP | |
307 | AT_CLEANUP | |
308 | ||
309 | AT_SETUP([PMD - change numa node]) | |
310 | OVS_VSWITCHD_START( | |
311 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \ | |
312 | add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=2 -- \ | |
313 | set Open_vSwitch . other_config:pmd-cpu-mask=3 | |
314 | ], [], [], [--dummy-numa 0,1]) | |
315 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
316 | ||
317 | AT_CHECK([ovs-ofctl add-flow br0 action=controller]) | |
318 | ||
319 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
320 | p1 0 0 0 | |
321 | p1 1 0 0 | |
322 | p2 0 0 0 | |
323 | p2 1 0 0 | |
324 | ]) | |
325 | ||
326 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
327 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
328 | ||
329 | 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)']) | |
330 | ||
331 | 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)']) | |
332 | ||
333 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4]) | |
334 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
335 | ||
336 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 337 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 | 338 | 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:f7ff |
efe179e0 | 339 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
340 | 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:f7ff |
341 | ]) | |
342 | ||
343 | AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1]) | |
344 | ||
345 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
346 | p1 0 0 0 | |
347 | p1 1 0 0 | |
348 | p2 0 1 1 | |
349 | p2 1 1 1 | |
350 | ]) | |
351 | ||
352 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
353 | ||
354 | 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)']) | |
355 | ||
356 | 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)']) | |
357 | ||
358 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4]) | |
359 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
360 | ||
361 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 362 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 | 363 | 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:f7ff |
efe179e0 | 364 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
365 | 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:f7ff |
366 | ]) | |
367 | ||
368 | OVS_VSWITCHD_STOP | |
369 | AT_CLEANUP | |
370 | ||
371 | AT_SETUP([PMD - non pmd device]) | |
372 | OVS_VSWITCHD_START( | |
373 | [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 -- \ | |
374 | add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \ | |
375 | set Interface br0 options:tx_pcap=br0.pcap -- \ | |
376 | set Open_vSwitch . other_config:pmd-cpu-mask=1 | |
377 | ], [], [], [--dummy-numa 0,0]) | |
378 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
379 | ||
380 | AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL]) | |
381 | ||
382 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
383 | p1 0 0 0 | |
384 | ]) | |
385 | ||
386 | 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)']) | |
387 | ||
388 | 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)']) | |
389 | ||
390 | OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2]) | |
391 | ||
392 | AT_CHECK([ovs-pcap br0.pcap], [0], [dnl | |
efe179e0 DDP |
393 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 |
394 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 | |
a12e2a88 DDP |
395 | ]) |
396 | ||
397 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2]) | |
398 | ||
399 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
400 | p1 0 0 1 | |
401 | ]) | |
402 | ||
403 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
404 | ||
405 | 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)']) | |
406 | ||
407 | 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)']) | |
408 | ||
409 | OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4]) | |
410 | ||
411 | AT_CHECK([ovs-pcap br0.pcap], [0], [dnl | |
efe179e0 DDP |
412 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 |
413 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 | |
414 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 | |
415 | 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000 | |
a12e2a88 DDP |
416 | ]) |
417 | ||
418 | OVS_VSWITCHD_STOP | |
419 | AT_CLEANUP | |
420 | ||
421 | AT_SETUP([PMD - add remove ports]) | |
422 | OVS_VSWITCHD_START( | |
423 | [], [], [], [--dummy-numa 0,0]) | |
424 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
425 | ||
426 | AT_CHECK([ovs-ofctl add-flow br0 actions=controller]) | |
427 | ||
428 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1]) | |
429 | ||
430 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
431 | p1 0 0 0 | |
432 | ]) | |
433 | ||
434 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
435 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
436 | ||
437 | 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)']) | |
438 | ||
439 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
440 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
441 | ||
442 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 443 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
444 | 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:f7ff |
445 | ]) | |
446 | ||
447 | AT_CHECK([ovs-vsctl del-port br0 p1]) | |
448 | AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1]) | |
449 | ||
450 | AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
451 | ||
452 | 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)']) | |
453 | ||
454 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
455 | OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) | |
456 | ||
457 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
efe179e0 | 458 | NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered) |
a12e2a88 DDP |
459 | 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:f7ff |
460 | ]) | |
461 | ||
462 | OVS_VSWITCHD_STOP | |
463 | AT_CLEANUP | |
5e512845 DDP |
464 | |
465 | AT_SETUP([PMD - rxq affinity]) | |
466 | OVS_VSWITCHD_START( | |
467 | [], [], [], [--dummy-numa 0,0,0,0,0,0,0,0,0]) | |
468 | AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) | |
469 | ||
470 | AT_CHECK([ovs-ofctl add-flow br0 actions=controller]) | |
471 | ||
472 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1fe]) | |
473 | ||
474 | 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"]) | |
475 | ||
476 | dnl The rxqs should be on the requested cores. | |
477 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
478 | p1 0 0 3 | |
479 | p1 1 0 7 | |
480 | p1 2 0 2 | |
481 | p1 3 0 8 | |
482 | ]) | |
483 | ||
484 | AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6]) | |
485 | ||
486 | dnl We removed the cores requested by some queues from pmd-cpu-mask. | |
487 | dnl Those queues will not be polled. | |
488 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
489 | p1 2 0 2 | |
490 | ]) | |
491 | ||
492 | AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity]) | |
493 | ||
494 | dnl We removed the rxq-affinity request. dpif-netdev should assign queues | |
495 | dnl in a round robin fashion. We just make sure that every rxq is being | |
496 | dnl polled again. | |
497 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl | |
498 | p1 0 | |
499 | p1 1 | |
500 | p1 2 | |
501 | p1 3 | |
502 | ]) | |
503 | ||
504 | AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:1']) | |
505 | ||
506 | dnl We explicitly requested core 1 for queue 0. Core 1 becomes isolated and | |
507 | dnl every other queue goes to core 2. | |
508 | AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl | |
509 | p1 0 0 1 | |
510 | p1 1 0 2 | |
511 | p1 2 0 2 | |
512 | p1 3 0 2 | |
513 | ]) | |
514 | ||
515 | OVS_VSWITCHD_STOP(["/dpif_netdev|WARN|There is no PMD thread on core/d"]) | |
516 | AT_CLEANUP |