dpif-netlink: add GENEVE creation support
[cascardo/ovs.git] / tests / pmd.at
1 AT_BANNER([PMD])
2
3 dnl CHECK_CPU_DISCOVERED([n_cpu])
4 dnl
5 dnl Waits until CPUs discovered and checks if number of discovered CPUs
6 dnl is greater or equal to 'n_cpu'. Without parameters checks that at
7 dnl least one CPU discovered.
8 m4_define([CHECK_CPU_DISCOVERED], [
9     PATTERN="Discovered [[0-9]]* NUMA nodes and [[0-9]]* CPU cores"
10     OVS_WAIT_UNTIL([grep "$PATTERN" stderr])
11     N_CPU=$(grep "$PATTERN" stderr | sed -e 's/.* \([[0-9]]*\) CPU cores/\1/')
12     if [[ -z "$1" ]]
13         then AT_CHECK([test "$N_CPU" -gt "0"])
14         else AT_SKIP_IF([test "$N_CPU" -lt "$1"])
15     fi
16 ])
17
18 dnl CHECK_PMD_THREADS_CREATED([n_threads], [numa_id], [+line])
19 dnl
20 dnl Whaits for creation of 'n_threads' or at least 1 thread if $1 not
21 dnl passed. Checking starts from line number 'line' in ovs-vswithd.log .
22 m4_define([CHECK_PMD_THREADS_CREATED], [
23     PATTERN="Created [[0-9]]* pmd threads on numa node $2"
24     line_st=$3
25     if [[ -z "$line_st" ]]
26     then
27         line_st="+0"
28     fi
29     OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"])
30     N_THREADS=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | sed -e 's/.* \([[0-9]]*\) pmd .*/\1/')
31     if [[ -z "$1" ]]
32         then AT_CHECK([test "$N_THREADS" -gt 0])
33         else AT_CHECK([test "$N_THREADS" -eq "$1"])
34     fi
35 ])
36
37 m4_define([SED_NUMA_CORE_PATTERN], ["s/\(numa_id \)[[0-9]]*\( core_id \)[[0-9]]*:/\1<cleared>\2<cleared>:/"])
38 m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0,1,1,1,1"])
39
40 AT_SETUP([PMD - creating a thread/add-port])
41 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
42
43 CHECK_CPU_DISCOVERED()
44 CHECK_PMD_THREADS_CREATED()
45
46 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
47 pmd thread numa_id <cleared> core_id <cleared>:
48         port: p0        queue-id: 0
49 ])
50
51 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
52 dummy@ovs-dummy: hit:0 missed:0
53         br0:
54                 br0 65534/100: (dummy)
55                 p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>)
56 ])
57
58 OVS_VSWITCHD_STOP
59 AT_CLEANUP
60
61 AT_SETUP([PMD - multiqueue support])
62 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
63
64 CHECK_CPU_DISCOVERED()
65 CHECK_PMD_THREADS_CREATED()
66
67 AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8])
68
69 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
70 dummy@ovs-dummy: hit:0 missed:0
71         br0:
72                 br0 65534/100: (dummy)
73                 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
74 ])
75
76 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
77 pmd thread numa_id <cleared> core_id <cleared>:
78         port: p0        queue-id: 0 1 2 3 4 5 6 7
79 ])
80
81 OVS_VSWITCHD_STOP
82 AT_CLEANUP
83
84
85 AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues])
86 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8],
87                    [], [], [DUMMY_NUMA])
88
89 CHECK_CPU_DISCOVERED(2)
90 CHECK_PMD_THREADS_CREATED()
91
92 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
93 dummy@ovs-dummy: hit:0 missed:0
94         br0:
95                 br0 65534/100: (dummy)
96                 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
97 ])
98
99 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
100 pmd thread numa_id <cleared> core_id <cleared>:
101         port: p0        queue-id: 0 1 2 3 4 5 6 7
102 ])
103
104 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
105 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=3])
106 CHECK_PMD_THREADS_CREATED([2], [], [+$TMP])
107
108 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
109 pmd thread numa_id <cleared> core_id <cleared>:
110         port: p0        queue-id: 0 2 4 6
111 pmd thread numa_id <cleared> core_id <cleared>:
112         port: p0        queue-id: 1 3 5 7
113 ])
114
115 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
116 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1])
117 CHECK_PMD_THREADS_CREATED([1], [], [+$TMP])
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>:
121         port: p0        queue-id: 0 1 2 3 4 5 6 7
122 ])
123
124 OVS_VSWITCHD_STOP
125 AT_CLEANUP
126
127
128 AT_SETUP([PMD - stats])
129 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4],
130                    [], [], [DUMMY_NUMA])
131
132 CHECK_CPU_DISCOVERED()
133 CHECK_PMD_THREADS_CREATED()
134
135 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg])
136 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
137
138 sleep 1
139
140 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
141 dummy@ovs-dummy: hit:0 missed:0
142         br0:
143                 br0 65534/100: (dummy)
144                 p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>)
145 ])
146
147 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
148 pmd thread numa_id <cleared> core_id <cleared>:
149         emc hits:0
150         megaflow hits:0
151         miss:0
152         lost:0
153 ])
154
155 ovs-appctl time/stop
156 ovs-appctl time/warp 100
157 (
158 for i in `seq 0 19`;
159     do
160     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)"
161     AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt])
162     done
163 )
164 ovs-appctl time/warp 100
165
166 AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
167 skb_priority(0),skb_mark(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)
168 ])
169 AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
170 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>
171 ])
172
173 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
174 pmd thread numa_id <cleared> core_id <cleared>:
175         emc hits:19
176         megaflow hits:0
177         miss:1
178         lost:0
179 ])
180
181 OVS_VSWITCHD_STOP
182 AT_CLEANUP