doc: show how to include code in guides
[dpdk.git] / doc / guides / faq / faq.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2010-2014 Intel Corporation.
3
4 What does "EAL: map_all_hugepages(): open failed: Permission denied Cannot init memory" mean?
5 ---------------------------------------------------------------------------------------------
6
7 This is most likely due to the test application not being run with sudo to promote the user to a superuser.
8 Alternatively, applications can also be run as regular user.
9 For more information, please refer to :ref:`DPDK Getting Started Guide <linux_gsg>`.
10
11
12 If I want to change the number of hugepages allocated, how do I remove the original pages allocated?
13 ----------------------------------------------------------------------------------------------------
14
15 The number of pages allocated can be seen by executing the following command::
16
17    grep Huge /proc/meminfo
18
19 Once all the pages are mmapped by an application, they stay that way.
20 If you start a test application with less than the maximum, then you have free pages.
21 When you stop and restart the test application, it looks to see if the pages are available in the ``/dev/hugepages`` directory and mmaps them.
22 If you look in the directory, you will see ``n`` number of 2M pages files. If you specified 1024, you will see 1024 page files.
23 These are then placed in memory segments to get contiguous memory.
24
25 If you need to change the number of pages, it is easier to first remove the pages.
26
27
28 If I execute "l2fwd -l 0-3 -m 64 -n 3 -- -p 3", I get the following output, indicating that there are no socket 0 hugepages to allocate the mbuf and ring structures to?
29 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30
31 I have set up a total of 1024 Hugepages (that is, allocated 512 2M pages to each NUMA node).
32
33 The -m command line parameter does not guarantee that huge pages will be reserved on specific sockets. Therefore, allocated huge pages may not be on socket 0.
34 To request memory to be reserved on a specific socket, please use the --socket-mem command-line parameter instead of -m.
35
36
37 I am running a 32-bit DPDK application on a NUMA system, and sometimes the application initializes fine but cannot allocate memory. Why is that happening?
38 ----------------------------------------------------------------------------------------------------------------------------------------------------------
39
40 32-bit applications have limitations in terms of how much virtual memory is available, hence the number of hugepages they are able to allocate is also limited (1 GB size).
41 If your system has a lot (>1 GB size) of hugepage memory, not all of it will be allocated.
42 Due to hugepages typically being allocated on a local NUMA node, the hugepages allocation the application gets during the initialization depends on which
43 NUMA node it is running on (the EAL does not affinitize cores until much later in the initialization process).
44 Sometimes, the Linux OS runs the DPDK application on a core that is located on a different NUMA node from DPDK main core and
45 therefore all the hugepages are allocated on the wrong socket.
46
47 To avoid this scenario, either lower the amount of hugepage memory available to 1 GB size (or less), or run the application with taskset
48 affinitizing the application to a would-be main core.
49
50 For example, if your EAL coremask is 0xff0, the main core will usually be the first core in the coremask (0x10); this is what you have to supply to taskset::
51
52    taskset 0x10 ./l2fwd -l 4-11 -n 2
53
54 .. Note: Instead of '-c 0xff0' use the '-l 4-11' as a cleaner way to define lcores.
55
56 In this way, the hugepages have a greater chance of being allocated to the correct socket.
57 Additionally, a ``--socket-mem`` option could be used to ensure the availability of memory for each socket, so that if hugepages were allocated on
58 the wrong socket, the application simply will not start.
59
60
61 On application startup, there is a lot of EAL information printed. Is there any way to reduce this?
62 ---------------------------------------------------------------------------------------------------
63
64 Yes, the option ``--log-level=`` accepts either symbolic names (or numbers):
65
66 1. emergency
67 2. alert
68 3. critical
69 4. error
70 5. warning
71 6. notice
72 7. info
73 8. debug
74
75 How can I tune my network application to achieve lower latency?
76 ---------------------------------------------------------------
77
78 Traditionally, there is a trade-off between throughput and latency. An application can be tuned to achieve a high throughput,
79 but the end-to-end latency of an average packet typically increases as a result.
80 Similarly, the application can be tuned to have, on average, a low end-to-end latency at the cost of lower throughput.
81
82 To achieve higher throughput, the DPDK attempts to aggregate the cost of processing each packet individually by processing packets in bursts.
83 Using the testpmd application as an example, the "burst" size can be set on the command line to a value of 32 (also the default value).
84 This allows the application to request 32 packets at a time from the PMD.
85 The testpmd application then immediately attempts to transmit all the packets that were received, in this case, all 32 packets.
86 The packets are not transmitted until the tail pointer is updated on the corresponding TX queue of the network port.
87 This behavior is desirable when tuning for high throughput because the cost of tail pointer updates to both the RX and TX queues
88 can be spread across 32 packets, effectively hiding the relatively slow MMIO cost of writing to the PCIe* device.
89
90 However, this is not very desirable when tuning for low latency, because the first packet that was received must also wait for the other 31 packets to be received.
91 It cannot be transmitted until the other 31 packets have also been processed because the NIC will not know to transmit the packets until the TX tail pointer has been updated,
92 which is not done until all 32 packets have been processed for transmission.
93
94 To consistently achieve low latency even under heavy system load, the application developer should avoid processing packets in bunches.
95 The testpmd application can be configured from the command line to use a burst value of 1.
96 This allows a single packet to be processed at a time, providing lower latency, but with the added cost of lower throughput.
97
98
99 Without NUMA enabled, my network throughput is low, why?
100 --------------------------------------------------------
101
102 I have a dual Intel® Xeon® E5645 processors 2.40 GHz with four Intel® 82599 10 Gigabit Ethernet NICs.
103 Using eight logical cores on each processor with RSS set to distribute network load from two 10 GbE interfaces to the cores on each processor.
104
105 Without NUMA enabled, memory is allocated from both sockets, since memory is interleaved.
106 Therefore, each 64B chunk is interleaved across both memory domains.
107
108 The first 64B chunk is mapped to node 0, the second 64B chunk is mapped to node 1, the third to node 0, the fourth to node 1.
109 If you allocated 256B, you would get memory that looks like this:
110
111 .. code-block:: console
112
113     256B buffer
114     Offset 0x00 - Node 0
115     Offset 0x40 - Node 1
116     Offset 0x80 - Node 0
117     Offset 0xc0 - Node 1
118
119 Therefore, packet buffers and descriptor rings are allocated from both memory domains, thus incurring QPI bandwidth accessing the other memory and much higher latency.
120 For best performance with NUMA disabled, only one socket should be populated.
121
122
123 I am getting errors about not being able to open files. Why?
124 ------------------------------------------------------------
125
126 As the DPDK operates, it opens a lot of files, which can result in reaching the open files limits, which is set using the ulimit command or in the limits.conf file.
127 This is especially true when using a large number (>512) of 2 MB huge pages. Please increase the open file limit if your application is not able to open files.
128 This can be done either by issuing a ulimit command or editing the limits.conf file. Please consult Linux manpages for usage information.
129
130
131 VF driver for IXGBE devices cannot be initialized
132 -------------------------------------------------
133
134 Some versions of Linux IXGBE driver do not assign a random MAC address to VF devices at initialization.
135 In this case, this has to be done manually on the VM host, using the following command:
136
137 .. code-block:: console
138
139     ip link set <interface> vf <VF function> mac <MAC address>
140
141 where <interface> being the interface providing the virtual functions for example, eth0, <VF function> being the virtual function number, for example 0,
142 and <MAC address> being the desired MAC address.
143
144
145 Is it safe to add an entry to the hash table while running?
146 ------------------------------------------------------------
147 Currently the table implementation is not a thread safe implementation and assumes that locking between threads and processes is handled by the user's application.
148 This is likely to be supported in future releases.
149
150
151 What is the purpose of setting iommu=pt?
152 ----------------------------------------
153 DPDK uses a 1:1 mapping and does not support IOMMU. IOMMU allows for simpler VM physical address translation.
154 The second role of IOMMU is to allow protection from unwanted memory access by an unsafe device that has DMA privileges.
155 Unfortunately, the protection comes with an extremely high performance cost for high speed NICs.
156
157 Setting ``iommu=pt`` disables IOMMU support for the hypervisor.
158
159
160 When trying to send packets from an application to itself, meaning smac==dmac, using Intel(R) 82599 VF packets are lost.
161 ------------------------------------------------------------------------------------------------------------------------
162
163 Check on register ``LLE(PFVMTXSSW[n])``, which allows an individual pool to send traffic and have it looped back to itself.
164
165
166 Can I split packet RX to use DPDK and have an application's higher order functions continue using Linux pthread?
167 ----------------------------------------------------------------------------------------------------------------
168
169 The DPDK's lcore threads are Linux pthreads bound onto specific cores. Configure the DPDK to do work on the same
170 cores and run the application's other work on other cores using the DPDK's "coremask" setting to specify which
171 cores it should launch itself on.
172
173
174 Is it possible to exchange data between DPDK processes and regular userspace processes via some shared memory or IPC mechanism?
175 -------------------------------------------------------------------------------------------------------------------------------
176
177 Yes - DPDK processes are regular Linux/BSD processes, and can use all OS provided IPC mechanisms.
178
179
180 Can the multiple queues in Intel(R) I350 be used with DPDK?
181 -----------------------------------------------------------
182
183 I350 has RSS support and 8 queue pairs can be used in RSS mode. It should work with multi-queue DPDK applications using RSS.
184
185
186 How can hugepage-backed memory be shared among multiple processes?
187 ------------------------------------------------------------------
188
189 See the Primary and Secondary examples in the :ref:`multi-process sample application <multi_process_app>`.
190
191
192 Why can't my application receive packets on my system with UEFI Secure Boot enabled?
193 ------------------------------------------------------------------------------------
194
195 If UEFI secure boot is enabled, the Linux kernel may disallow the use of UIO on the system.
196 Therefore, devices for use by DPDK should be bound to the ``vfio-pci`` kernel module rather than ``igb_uio`` or ``uio_pci_generic``.