doc: fix typo in i40e guide
[dpdk.git] / doc / guides / nics / i40e.rst
1 ..  BSD LICENSE
2     Copyright(c) 2016 Intel Corporation. All rights reserved.
3     All rights reserved.
4
5     Redistribution and use in source and binary forms, with or without
6     modification, are permitted provided that the following conditions
7     are met:
8
9     * Redistributions of source code must retain the above copyright
10     notice, this list of conditions and the following disclaimer.
11     * Redistributions in binary form must reproduce the above copyright
12     notice, this list of conditions and the following disclaimer in
13     the documentation and/or other materials provided with the
14     distribution.
15     * Neither the name of Intel Corporation nor the names of its
16     contributors may be used to endorse or promote products derived
17     from this software without specific prior written permission.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23     OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 I40E Poll Mode Driver
32 ======================
33
34 The I40E PMD (librte_pmd_i40e) provides poll mode driver support
35 for the Intel X710/XL710/X722 10/40 Gbps family of adapters.
36
37
38 Features
39 --------
40
41 Features of the I40E PMD are:
42
43 - Multiple queues for TX and RX
44 - Receiver Side Scaling (RSS)
45 - MAC/VLAN filtering
46 - Packet type information
47 - Flow director
48 - Cloud filter
49 - Checksum offload
50 - VLAN/QinQ stripping and inserting
51 - TSO offload
52 - Promiscuous mode
53 - Multicast mode
54 - Port hardware statistics
55 - Jumbo frames
56 - Link state information
57 - Link flow control
58 - Mirror on port, VLAN and VSI
59 - Interrupt mode for RX
60 - Scattered and gather for TX and RX
61 - Vector Poll mode driver
62 - DCB
63 - VMDQ
64 - SR-IOV VF
65 - Hot plug
66 - IEEE1588/802.1AS timestamping
67 - VF Daemon (VFD) - EXPERIMENTAL
68
69
70 Prerequisites
71 -------------
72
73 - Identifying your adapter using `Intel Support
74   <http://www.intel.com/support>`_ and get the latest NVM/FW images.
75
76 - Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` to setup the basic DPDK environment.
77
78 - To get better performance on Intel platforms, please follow the "How to get best performance with NICs on Intel platforms"
79   section of the :ref:`Getting Started Guide for Linux <linux_gsg>`.
80
81
82 Pre-Installation Configuration
83 ------------------------------
84
85 Config File Options
86 ~~~~~~~~~~~~~~~~~~~
87
88 The following options can be modified in the ``config`` file.
89 Please note that enabling debugging options may affect system performance.
90
91 - ``CONFIG_RTE_LIBRTE_I40E_PMD`` (default ``y``)
92
93   Toggle compilation of the ``librte_pmd_i40e`` driver.
94
95 - ``CONFIG_RTE_LIBRTE_I40E_DEBUG_*`` (default ``n``)
96
97   Toggle display of generic debugging messages.
98
99 - ``CONFIG_RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC`` (default ``y``)
100
101   Toggle bulk allocation for RX.
102
103 - ``CONFIG_RTE_LIBRTE_I40E_INC_VECTOR`` (default ``n``)
104
105   Toggle the use of Vector PMD instead of normal RX/TX path.
106   To enable vPMD for RX, bulk allocation for Rx must be allowed.
107
108 - ``CONFIG_RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE`` (default ``y``)
109
110   Toggle to enable RX ``olflags``.
111   This is only meaningful when Vector PMD is used.
112
113 - ``CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC`` (default ``n``)
114
115   Toggle to use a 16-byte RX descriptor, by default the RX descriptor is 32 byte.
116
117 - ``CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF`` (default ``64``)
118
119   Number of queues reserved for PF.
120
121 - ``CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VF`` (default ``4``)
122
123   Number of queues reserved for each SR-IOV VF.
124
125 - ``CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM`` (default ``4``)
126
127   Number of queues reserved for each VMDQ Pool.
128
129 - ``CONFIG_RTE_LIBRTE_I40E_ITR_INTERVAL`` (default ``-1``)
130
131   Interrupt Throttling interval.
132
133
134 Driver Compilation
135 ~~~~~~~~~~~~~~~~~~
136
137 To compile the I40E PMD see :ref:`Getting Started Guide for Linux <linux_gsg>` or
138 :ref:`Getting Started Guide for FreeBSD <freebsd_gsg>` depending on your platform.
139
140
141 Linux
142 -----
143
144
145 Running testpmd
146 ~~~~~~~~~~~~~~~
147
148 This section demonstrates how to launch ``testpmd`` with Intel XL710/X710
149 devices managed by ``librte_pmd_i40e`` in the Linux operating system.
150
151 #. Load ``igb_uio`` or ``vfio-pci`` driver:
152
153    .. code-block:: console
154
155       modprobe uio
156       insmod ./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
157
158    or
159
160    .. code-block:: console
161
162       modprobe vfio-pci
163
164 #. Bind the XL710/X710 adapters to ``igb_uio`` or ``vfio-pci`` loaded in the previous step:
165
166    .. code-block:: console
167
168       ./usertools/dpdk-devbind.py --bind igb_uio 0000:83:00.0
169
170    Or setup VFIO permissions for regular users and then bind to ``vfio-pci``:
171
172    .. code-block:: console
173
174       ./usertools/dpdk-devbind.py --bind vfio-pci 0000:83:00.0
175
176 #. Start ``testpmd`` with basic parameters:
177
178    .. code-block:: console
179
180       ./x86_64-native-linuxapp-gcc/app/testpmd -l 0-3 -n 4 -w 83:00.0 -- -i
181
182    Example output:
183
184    .. code-block:: console
185
186       ...
187       EAL: PCI device 0000:83:00.0 on NUMA socket 1
188       EAL: probe driver: 8086:1572 rte_i40e_pmd
189       EAL: PCI memory mapped at 0x7f7f80000000
190       EAL: PCI memory mapped at 0x7f7f80800000
191       PMD: eth_i40e_dev_init(): FW 5.0 API 1.5 NVM 05.00.02 eetrack 8000208a
192       Interactive-mode selected
193       Configuring Port 0 (socket 0)
194       ...
195
196       PMD: i40e_dev_rx_queue_setup(): Rx Burst Bulk Alloc Preconditions are
197       satisfied.Rx Burst Bulk Alloc function will be used on port=0, queue=0.
198
199       ...
200       Port 0: 68:05:CA:26:85:84
201       Checking link statuses...
202       Port 0 Link Up - speed 10000 Mbps - full-duplex
203       Done
204
205       testpmd>
206
207
208 SR-IOV: Prerequisites and sample Application Notes
209 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
210
211 #. Load the kernel module:
212
213    .. code-block:: console
214
215       modprobe i40e
216
217    Check the output in dmesg:
218
219    .. code-block:: console
220
221       i40e 0000:83:00.1 ens802f0: renamed from eth0
222
223 #. Bring up the PF ports:
224
225    .. code-block:: console
226
227       ifconfig ens802f0 up
228
229 #. Create VF device(s):
230
231    Echo the number of VFs to be created into the ``sriov_numvfs`` sysfs entry
232    of the parent PF.
233
234    Example:
235
236    .. code-block:: console
237
238       echo 2 > /sys/devices/pci0000:00/0000:00:03.0/0000:81:00.0/sriov_numvfs
239
240
241 #. Assign VF MAC address:
242
243    Assign MAC address to the VF using iproute2 utility. The syntax is:
244
245    .. code-block:: console
246
247       ip link set <PF netdev id> vf <VF id> mac <macaddr>
248
249    Example:
250
251    .. code-block:: console
252
253       ip link set ens802f0 vf 0 mac a0:b0:c0:d0:e0:f0
254
255 #. Assign VF to VM, and bring up the VM.
256    Please see the documentation for the *I40E/IXGBE/IGB Virtual Function Driver*.
257
258
259 Sample Application Notes
260 ------------------------
261
262 Vlan filter
263 ~~~~~~~~~~~
264
265 Vlan filter only works when Promiscuous mode is off.
266
267 To start ``testpmd``, and add vlan 10 to port 0:
268
269 .. code-block:: console
270
271     ./app/testpmd -l 0-15 -n 4 -- -i --forward-mode=mac
272     ...
273
274     testpmd> set promisc 0 off
275     testpmd> rx_vlan add 10 0
276
277
278 Flow Director
279 ~~~~~~~~~~~~~
280
281 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
282 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set per flow type and the flexible payload.
283
284 The default input set of each flow type is::
285
286    ipv4-other : src_ip_address, dst_ip_address
287    ipv4-frag  : src_ip_address, dst_ip_address
288    ipv4-tcp   : src_ip_address, dst_ip_address, src_port, dst_port
289    ipv4-udp   : src_ip_address, dst_ip_address, src_port, dst_port
290    ipv4-sctp  : src_ip_address, dst_ip_address, src_port, dst_port,
291                 verification_tag
292    ipv6-other : src_ip_address, dst_ip_address
293    ipv6-frag  : src_ip_address, dst_ip_address
294    ipv6-tcp   : src_ip_address, dst_ip_address, src_port, dst_port
295    ipv6-udp   : src_ip_address, dst_ip_address, src_port, dst_port
296    ipv6-sctp  : src_ip_address, dst_ip_address, src_port, dst_port,
297                 verification_tag
298    l2_payload : ether_type
299
300 The flex payload is selected from offset 0 to 15 of packet's payload by default, while it is masked out from matching.
301
302 Start ``testpmd`` with ``--disable-rss`` and ``--pkt-filter-mode=perfect``:
303
304 .. code-block:: console
305
306    ./app/testpmd -l 0-15 -n 4 -- -i --disable-rss --pkt-filter-mode=perfect \
307                  --rxq=8 --txq=8 --nb-cores=8 --nb-ports=1
308
309 Add a rule to direct ``ipv4-udp`` packet whose ``dst_ip=2.2.2.5, src_ip=2.2.2.3, src_port=32, dst_port=32`` to queue 1:
310
311 .. code-block:: console
312
313    testpmd> flow_director_filter 0 mode IP add flow ipv4-udp  \
314             src 2.2.2.3 32 dst 2.2.2.5 32 vlan 0 flexbytes () \
315             fwd pf queue 1 fd_id 1
316
317 Check the flow director status:
318
319 .. code-block:: console
320
321    testpmd> show port fdir 0
322
323    ######################## FDIR infos for port 0      ####################
324      MODE:   PERFECT
325      SUPPORTED FLOW TYPE:  ipv4-frag ipv4-tcp ipv4-udp ipv4-sctp ipv4-other
326                            ipv6-frag ipv6-tcp ipv6-udp ipv6-sctp ipv6-other
327                            l2_payload
328      FLEX PAYLOAD INFO:
329      max_len:       16          payload_limit: 480
330      payload_unit:  2           payload_seg:   3
331      bitmask_unit:  2           bitmask_num:   2
332      MASK:
333        vlan_tci: 0x0000,
334        src_ipv4: 0x00000000,
335        dst_ipv4: 0x00000000,
336        src_port: 0x0000,
337        dst_port: 0x0000
338        src_ipv6: 0x00000000,0x00000000,0x00000000,0x00000000,
339        dst_ipv6: 0x00000000,0x00000000,0x00000000,0x00000000
340      FLEX PAYLOAD SRC OFFSET:
341        L2_PAYLOAD:    0      1      2      3      4      5      6  ...
342        L3_PAYLOAD:    0      1      2      3      4      5      6  ...
343        L4_PAYLOAD:    0      1      2      3      4      5      6  ...
344      FLEX MASK CFG:
345        ipv4-udp:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346        ipv4-tcp:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
347        ipv4-sctp:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
348        ipv4-other:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
349        ipv4-frag:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350        ipv6-udp:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
351        ipv6-tcp:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
352        ipv6-sctp:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
353        ipv6-other:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
354        ipv6-frag:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
355        l2_payload:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
356      guarant_count: 1           best_count:    0
357      guarant_space: 512         best_space:    7168
358      collision:     0           free:          0
359      maxhash:       0           maxlen:        0
360      add:           0           remove:        0
361      f_add:         0           f_remove:      0
362
363
364 Delete all flow director rules on a port:
365
366 .. code-block:: console
367
368    testpmd> flush_flow_director 0
369
370 Floating VEB
371 ~~~~~~~~~~~~~
372
373 The IntelĀ® Ethernet Controller X710 and XL710 Family support a feature called
374 "Floating VEB".
375
376 A Virtual Ethernet Bridge (VEB) is an IEEE Edge Virtual Bridging (EVB) term
377 for functionality that allows local switching between virtual endpoints within
378 a physical endpoint and also with an external bridge/network.
379
380 A "Floating" VEB doesn't have an uplink connection to the outside world so all
381 switching is done internally and remains within the host. As such, this
382 feature provides security benefits.
383
384 In addition, a Floating VEB overcomes a limitation of normal VEBs where they
385 cannot forward packets when the physical link is down. Floating VEBs don't need
386 to connect to the NIC port so they can still forward traffic from VF to VF
387 even when the physical link is down.
388
389 Therefore, with this feature enabled VFs can be limited to communicating with
390 each other but not an outside network, and they can do so even when there is
391 no physical uplink on the associated NIC port.
392
393 To enable this feature, the user should pass a ``devargs`` parameter to the
394 EAL, for example::
395
396     -w 84:00.0,enable_floating_veb=1
397
398 In this configuration the PMD will use the floating VEB feature for all the
399 VFs created by this PF device.
400
401 Alternatively, the user can specify which VFs need to connect to this floating
402 VEB using the ``floating_veb_list`` argument::
403
404     -w 84:00.0,enable_floating_veb=1,floating_veb_list=1;3-4
405
406 In this example ``VF1``, ``VF3`` and ``VF4`` connect to the floating VEB,
407 while other VFs connect to the normal VEB.
408
409 The current implementation only supports one floating VEB and one regular
410 VEB. VFs can connect to a floating VEB or a regular VEB according to the
411 configuration passed on the EAL command line.
412
413 The floating VEB functionality requires a NIC firmware version of 5.0
414 or greater.
415
416
417 Limitations or Known issues
418 ---------------------------
419
420 MPLS packet classification on X710/XL710
421 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
422
423 For firmware versions prior to 5.0, MPLS packets are not recognized by the NIC.
424 The L2 Payload flow type in flow director can be used to classify MPLS packet
425 by using a command in testpmd like:
426
427    testpmd> flow_director_filter 0 mode IP add flow l2_payload ether \
428             0x8847 flexbytes () fwd pf queue <N> fd_id <M>
429
430 With the NIC firmware version 5.0 or greater, some limited MPLS support
431 is added: Native MPLS (MPLS in Ethernet) skip is implemented, while no
432 new packet type, no classification or offload are possible. With this change,
433 L2 Payload flow type in flow director cannot be used to classify MPLS packet
434 as with previous firmware versions. Meanwhile, the Ethertype filter can be
435 used to classify MPLS packet by using a command in testpmd like:
436
437    testpmd> ethertype_filter 0 add mac_ignr 00:00:00:00:00:00 ethertype \
438             0x8847 fwd queue <M>
439
440 16 Byte Descriptor cannot be used on DPDK VF
441 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
442
443 If the Linux i40e kernel driver is used as host driver, while DPDK i40e PMD
444 is used as the VF driver, DPDK cannot choose 16 byte receive descriptor. That
445 is to say, user should keep ``CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n`` in
446 config file.
447
448 Link down with i40e kernel driver after DPDK application exit
449 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
450
451 After DPDK application quit, and the device is bound back to Linux i40e
452 kernel driver, the link cannot be up after ``ifconfig <dev> up``.
453 To work around this issue, ``ethtool -s <dev> autoneg on`` should be
454 set first and then the link can be brought up through ``ifconfig <dev> up``.
455
456 NOTE: requires Linux kernel i40e driver version >= 1.4.X
457
458 Receive packets with Ethertype 0x88A8
459 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
460
461 Due to the FW limitation, PF can receive packets with Ethertype 0x88A8
462 only when floating VEB is disabled.
463
464 Incorrect Rx statistics when packet is oversize
465 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
466
467 When a packet is over maximum frame size, the packet is dropped.
468 However the Rx statistics, when calling `rte_eth_stats_get` incorrectly
469 shows it as received.
470
471 VF & TC max bandwidth setting
472 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
473
474 The per VF max bandwidth and per TC max bandwidth cannot be enabled in parallel.
475 The dehavior is different when handling per VF and per TC max bandwidth setting.
476 When enabling per VF max bandwidth, SW will check if per TC max bandwidth is
477 enabled. If so, return failure.
478 When enabling per TC max bandwidth, SW will check if per VF max bandwidth
479 is enabled. If so, disable per VF max bandwidth and continue with per TC max
480 bandwidth setting.
481
482 TC TX scheduling mode setting
483 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
484
485 There're 2 TX scheduling modes for TCs, round robin and strict priority mode.
486 If a TC is set to strict priority mode, it can consume unlimited bandwidth.
487 It means if APP has set the max bandwidth for that TC, it comes to no
488 effect.
489 It's suggested to set the strict priority mode for a TC that is latency
490 sensitive but no consuming much bandwidth.