This patch works on Intel X540-AT2 NICs too. P Gyanesh Kumar Patra
On Wed, Feb 7, 2018 at 11:28 AM, Bill Fischofer <bill.fischo...@linaro.org> wrote: > Thanks, Matias. Please open a bug for this and reference it in the fix. > > On Wed, Feb 7, 2018 at 6:36 AM, Elo, Matias (Nokia - FI/Espoo) < > matias....@nokia.com> wrote: > >> Hi, >> >> I actually just figured out the problem. For e.g. Niantic NICs the >> rte_eth_rxconf.rx_drop_en has to be enabled for the NIC to continue working >> properly when all RX queues are not emptied. The following patch fixes the >> problem for me: >> >> diff --git a/platform/linux-generic/pktio/dpdk.c >> b/platform/linux-generic/pktio/dpdk.c >> index bd6920e..fc535e3 100644 >> --- a/platform/linux-generic/pktio/dpdk.c >> +++ b/platform/linux-generic/pktio/dpdk.c >> @@ -1402,6 +1402,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, >> >> static int dpdk_start(pktio_entry_t *pktio_entry) >> { >> + struct rte_eth_dev_info dev_info; >> pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk; >> uint8_t port_id = pkt_dpdk->port_id; >> int ret; >> @@ -1420,7 +1421,6 @@ static int dpdk_start(pktio_entry_t *pktio_entry) >> } >> /* Init TX queues */ >> for (i = 0; i < pktio_entry->s.num_out_queue; i++) { >> - struct rte_eth_dev_info dev_info; >> const struct rte_eth_txconf *txconf = NULL; >> int ip_ena = pktio_entry->s.config.pktout.b >> it.ipv4_chksum_ena; >> int udp_ena = pktio_entry->s.config.pktout.b >> it.udp_chksum_ena; >> @@ -1470,9 +1470,14 @@ static int dpdk_start(pktio_entry_t *pktio_entry) >> } >> /* Init RX queues */ >> for (i = 0; i < pktio_entry->s.num_in_queue; i++) { >> + struct rte_eth_rxconf *rxconf = NULL; >> + >> + rte_eth_dev_info_get(port_id, &dev_info); >> + rxconf = &dev_info.default_rxconf; >> + rxconf->rx_drop_en = 1; >> ret = rte_eth_rx_queue_setup(port_id, i, DPDK_NM_RX_DESC, >> rte_eth_dev_socket_id(port_ >> id), >> - NULL, pkt_dpdk->pkt_pool); >> + rxconf, pkt_dpdk->pkt_pool); >> if (ret < 0) { >> ODP_ERR("Queue setup failed: err=%d, port=%" >> PRIu8 "\n", >> ret, port_id); >> >> I'll test it a bit more for performance effects and then send a fix PR. >> >> -Matias >> >> >> >> > On 7 Feb 2018, at 14:18, gyanesh patra <pgyanesh.pa...@gmail.com> >> wrote: >> > >> > Thank you. >> > I am curious what might be the reason. >> > >> > P Gyanesh Kumar Patra >> > >> > On Wed, Feb 7, 2018 at 9:51 AM, Elo, Matias (Nokia - FI/Espoo) < >> matias....@nokia.com> wrote: >> > I'm currently trying to figure out what's happening. I'll report back >> when I find out something. >> > >> > -Matias >> > >> > >> > > On 7 Feb 2018, at 13:44, gyanesh patra <pgyanesh.pa...@gmail.com> >> wrote: >> > > >> > > Do you have any theory for the issue in 82599 (Niantic) NIC and why >> it might be working in Intel XL710 (Fortville)? Can i identify a new >> hardware without this issue by looking at their datasheet/specs? >> > > Thanks for the insight. >> > > >> > > P Gyanesh Kumar Patra >> > > >> > > On Wed, Feb 7, 2018 at 9:12 AM, Elo, Matias (Nokia - FI/Espoo) < >> matias....@nokia.com> wrote: >> > > I was unable to reproduce this with Intel XL710 (Fortville) but with >> 82599 (Niantic) l2fwd operates as you have described. This may be a NIC HW >> limitation since the same issue is also observed with netmap pktio. >> > > >> > > -Matias >> > > >> > > >> > > > On 7 Feb 2018, at 11:14, gyanesh patra <pgyanesh.pa...@gmail.com> >> wrote: >> > > > >> > > > Thanks for the info. I verified this with both odp 1.16 and odp >> 1.17 with same behavior. >> > > > The traffic consists of diff Mac and ip addresses. >> > > > Without the busy loop, I could see that all the threads were >> receiving packets. So i think packet distribution is not an issue. In our >> case, we are sending packet at line rate of 10G interface. That might be >> causing this behaviour. >> > > > If I can provide any other info, let me know. >> > > > >> > > > Thanks >> > > > >> > > > Gyanesh >> > > > >> > > > On Wed, Feb 7, 2018, 05:15 Elo, Matias (Nokia - FI/Espoo) < >> matias....@nokia.com> wrote: >> > > > Hi Gyanesh, >> > > > >> > > > I tested the patch on my system and everything seems to work as >> expected. Based on the log you're not running the latest code (v1.17.0) but >> I doubt that is the issue here. >> > > > >> > > > What kind of test traffic are you using? The l2fwd example uses >> IPv4 addresses and UDP ports to do the input hashing. If test packets are >> identical they will all end up in the same input queue, which would explain >> what you are seeing. >> > > > >> > > > -Matias >> > > > >> > > > >> > > > > On 6 Feb 2018, at 19:00, gyanesh patra <pgyanesh.pa...@gmail.com> >> wrote: >> > > > > >> > > > > Hi, >> > > > > I tried with netmap, dpdk and dpdk with zero-copy enabled. All of >> them have the same behaviour. I also tried with (200*2048) as packet pool >> size without any success. >> > > > > I am attaching the patch for test/performance/odp_l2fwd example >> here to demonstrate the behaviour. Also find the output of the example >> below: >> > > > > >> > > > > root@india:~/pktio/odp_ipv6/test/performance# ./odp_l2fwd -i 0,1 >> > > > > HW time counter freq: 2094954892 hz >> > > > > >> > > > > PKTIO: initialized loop interface. >> > > > > PKTIO: initialized dpdk pktio, use export >> ODP_PKTIO_DISABLE_DPDK=1 to disable. >> > > > > PKTIO: initialized pcap interface. >> > > > > PKTIO: initialized ipc interface. >> > > > > PKTIO: initialized socket mmap, use export >> ODP_PKTIO_DISABLE_SOCKET_MMAP=1 to disable. >> > > > > PKTIO: initialized socket mmsg,use export >> ODP_PKTIO_DISABLE_SOCKET_MMSG=1 to disable. >> > > > > >> > > > > ODP system info >> > > > > --------------- >> > > > > ODP API version: 1.16.0 >> > > > > ODP impl name: "odp-linux" >> > > > > CPU model: Intel(R) Xeon(R) CPU E5-2620 v2 >> > > > > CPU freq (hz): 2600000000 >> > > > > Cache line size: 64 >> > > > > CPU count: 12 >> > > > > >> > > > > >> > > > > CPU features supported: >> > > > > SSE3 PCLMULQDQ DTES64 MONITOR DS_CPL VMX SMX EIST TM2 SSSE3 >> CMPXCHG16B XTPR PDCM PCID DCA SSE4_1 SSE4_2 X2APIC POPCNT TSC_DEADLINE AES >> XSAVE OSXSAVE AVX F16C RDRAND FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP >> MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE >> DIGTEMP ARAT PLN ECMD PTM MPERF_APERF_MSR ENERGY_EFF FSGSBASE BMI2 >> LAHF_SAHF SYSCALL XD 1GB_PG RDTSCP EM64T INVTSC >> > > > > >> > > > > CPU features NOT supported: >> > > > > CNXT_ID FMA MOVBE PSN TRBOBST ACNT2 BMI1 HLE AVX2 SMEP ERMS >> INVPCID RTM AVX512F LZCNT >> > > > > >> > > > > Running ODP appl: "odp_l2fwd" >> > > > > ----------------- >> > > > > IF-count: 2 >> > > > > Using IFs: 0 1 >> > > > > Mode: PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > >> > > > > num worker threads: 10 >> > > > > first CPU: 2 >> > > > > cpu mask: 0xFFC >> > > > > >> > > > > >> > > > > Pool info >> > > > > --------- >> > > > > pool 0 >> > > > > name packet pool >> > > > > pool type packet >> > > > > pool shm 11 >> > > > > user area shm 0 >> > > > > num 8192 >> > > > > align 64 >> > > > > headroom 128 >> > > > > seg len 8064 >> > > > > max data len 65536 >> > > > > tailroom 0 >> > > > > block size 8896 >> > > > > uarea size 0 >> > > > > shm size 73196288 >> > > > > base addr 0x7f5669400000 >> > > > > uarea shm size 0 >> > > > > uarea base addr (nil) >> > > > > >> > > > > EAL: Detected 12 lcore(s) >> > > > > EAL: No free hugepages reported in hugepages-1048576kB >> > > > > EAL: Probing VFIO support... >> > > > > EAL: PCI device 0000:03:00.0 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:10fb net_ixgbe >> > > > > EAL: PCI device 0000:03:00.1 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:10fb net_ixgbe >> > > > > EAL: PCI device 0000:05:00.0 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:1528 net_ixgbe >> > > > > EAL: PCI device 0000:05:00.1 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:1528 net_ixgbe >> > > > > EAL: PCI device 0000:0a:00.0 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:1521 net_e1000_igb >> > > > > EAL: PCI device 0000:0a:00.1 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:1521 net_e1000_igb >> > > > > EAL: PCI device 0000:0c:00.0 on NUMA socket 0 >> > > > > EAL: probe driver: 8086:10d3 net_e1000_em >> > > > > created pktio 1, dev: 0, drv: dpdk >> > > > > created 5 input and 5 output queues on (0) >> > > > > created pktio 2, dev: 1, drv: dpdk >> > > > > created 5 input and 5 output queues on (1) >> > > > > >> > > > > Queue binding (indexes) >> > > > > ----------------------- >> > > > > worker 0 >> > > > > rx: pktio 0, queue 0 >> > > > > tx: pktio 1, queue 0 >> > > > > worker 1 >> > > > > rx: pktio 1, queue 0 >> > > > > tx: pktio 0, queue 0 >> > > > > worker 2 >> > > > > rx: pktio 0, queue 1 >> > > > > tx: pktio 1, queue 1 >> > > > > worker 3 >> > > > > rx: pktio 1, queue 1 >> > > > > tx: pktio 0, queue 1 >> > > > > worker 4 >> > > > > rx: pktio 0, queue 2 >> > > > > tx: pktio 1, queue 2 >> > > > > worker 5 >> > > > > rx: pktio 1, queue 2 >> > > > > tx: pktio 0, queue 2 >> > > > > worker 6 >> > > > > rx: pktio 0, queue 3 >> > > > > tx: pktio 1, queue 3 >> > > > > worker 7 >> > > > > rx: pktio 1, queue 3 >> > > > > tx: pktio 0, queue 3 >> > > > > worker 8 >> > > > > rx: pktio 0, queue 4 >> > > > > tx: pktio 1, queue 4 >> > > > > worker 9 >> > > > > rx: pktio 1, queue 4 >> > > > > tx: pktio 0, queue 4 >> > > > > >> > > > > >> > > > > Port config >> > > > > -------------------- >> > > > > Port 0 (0) >> > > > > rx workers 5 >> > > > > tx workers 5 >> > > > > rx queues 5 >> > > > > tx queues 5 >> > > > > Port 1 (1) >> > > > > rx workers 5 >> > > > > tx workers 5 >> > > > > rx queues 5 >> > > > > tx queues 5 >> > > > > >> > > > > [01] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [02] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [03] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [04] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [05] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [06] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [07] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [08] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [09] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > [10] num pktios 1, PKTIN_DIRECT, PKTOUT_DIRECT >> > > > > 0 pps, 0 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 0 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 0 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 0 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 0 max pps, 0 rx drops, 0 tx drops >> > > > > 1396 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > 0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > ^C0 pps, 1396 max pps, 0 rx drops, 0 tx drops >> > > > > TEST RESULT: 1396 maximum packets per second. >> > > > > >> > > > > >> > > > > >> > > > > P Gyanesh Kumar Patra >> > > > > >> > > > > On Tue, Feb 6, 2018 at 9:55 AM, Elo, Matias (Nokia - FI/Espoo) < >> matias....@nokia.com> wrote: >> > > > > >> > > > > >> > > > > > On 5 Feb 2018, at 19:42, Bill Fischofer < >> bill.fischo...@linaro.org> wrote: >> > > > > > >> > > > > > Thanks, Gyanesh, that does sound like a bug. +cc Matias: Can >> you comment on this? >> > > > > > >> > > > > > On Mon, Feb 5, 2018 at 5:09 AM, gyanesh patra < >> pgyanesh.pa...@gmail.com> wrote: >> > > > > > I am testing an l2fwd use-case. I am executing the use-case >> with two >> > > > > > CPUs & two interfaces. >> > > > > > One interface with 2 Rx queues receives pkts using 2 threads >> with 2 >> > > > > > associated CPUs. Both the >> > > > > > threads can forward the packet over the 2nd interface which >> also has 2 Tx >> > > > > > queues mapped to >> > > > > > 2 CPUs. I am sending packets from an external packet generator >> and >> > > > > > confirmed that both >> > > > > > queues are receiving packets. >> > > > > > *When I run odp_pktin_recv() on both the queues, the packet* >> > > > > > * forwarding works fine. But if I put a sleep() or add a busy >> loop instead >> > > > > > of odp_pktin_recv() * >> > > > > > *on one thread, then the other thread stops receiving >> packets. If I >> > > > > > replace the sleep with odp_pktin_recv(), both the queues start >> receiving >> > > > > > packets again. *I encountered this problem on the DPDK pktio >> support on >> > > > > > ODP 1.16 and ODP 1.17. >> > > > > > On socket-mmap it works fine. Is it expected behavior or a >> potential bug? >> > > > > > >> > > > > >> > > > > >> > > > > Hi Gyanesh, >> > > > > >> > > > > Could you please share an example code which produces this issue? >> Does this happen also if you enable zero-copy dpdk pktio >> (--enable-dpdk-zero-copy)? >> > > > > >> > > > > Socket-mmap pktio doesn't support MQ, so comparison to that >> doesn't make much sense. Netmap pktio supports MQ. >> > > > > >> > > > > Regards, >> > > > > Matias >> > > > > >> > > > > >> > > > > <odp_l2fwd_patch> >> > > > >> > > >> > > >> > >> > >> >> >