Hi Raj,

The function used for receiving datagrams is limited to reading at most the 
length of a datagram from the rx fifo. UDP datagrams are mtu sized, so your 
reads are probably limited to ~1.5kB. On each epoll rx event try reading from 
the session handle in a while loop until you get an VPPCOM_EWOULDBLOCK. That 
might improve performance. 

Having said that, udp is lossy so unless you implement your own congestion/flow 
control algorithms, the data you’ll receive might be full of “holes”. What are 
the rx/tx error counters on your interfaces (check with “sh int”). 

Also, with simple tuning like this [1], you should be able to achieve much more 
than 15Gbps with tcp. 

Regards,
Florin

[1] https://wiki.fd.io/view/VPP/HostStack/LDP/iperf

> On Jan 19, 2020, at 3:25 PM, Raj Kumar <raj.gauta...@gmail.com> wrote:
> 
>   Hi Florin,
>  By using VCL library in an UDP receiver application,  I am able to receive 
> only 2 Mbps traffic. On increasing the traffic, I see Rx FIFO full error and 
> application stopped receiving the traffic from the session layer.  Whereas, 
> with TCP I can easily achieve 15Gbps throughput without tuning any DPDK 
> parameter.  UDP tx also looks fine. From an host application I can send 
> ~5Gbps without any issue. 
> 
> I am running VPP( stable/2001 code) on RHEL8 server using Mellanox 100G 
> (MLNX5) adapters.
> Please advise if I can use VCL library to receive high throughput UDP traffic 
> ( in Gbps). I would be running multiple instances of host application to 
> receive data ( ~50-60 Gbps).
> 
> I also tried by increasing the Rx FIFO size to 16MB but did not help much. 
> The host application is just throwing the received packets , it is not doing 
> any packet processing.
> 
> [root@orc01 vcl_test]# VCL_DEBUG=2 ./udp6_server_vcl
> VCL<20201>: configured VCL debug level (2) from VCL_DEBUG!
> VCL<20201>: allocated VCL heap = 0x7f39a17ab010, size 268435456 (0x10000000)
> VCL<20201>: configured rx_fifo_size 4000000 (0x3d0900)
> VCL<20201>: configured tx_fifo_size 4000000 (0x3d0900)
> VCL<20201>: configured app_scope_local (1)
> VCL<20201>: configured app_scope_global (1)
> VCL<20201>: configured api-socket-name (/tmp/vpp-api.sock)
> VCL<20201>: completed parsing vppcom config!
> vppcom_connect_to_vpp:480: vcl<20201:0>: app (udp6_server) is connected to 
> VPP!
> vppcom_app_create:1104: vcl<20201:0>: sending session enable
> vppcom_app_create:1112: vcl<20201:0>: sending app attach
> vppcom_app_create:1121: vcl<20201:0>: app_name 'udp6_server', my_client_index 
> 256 (0x100)
> vppcom_epoll_create:2439: vcl<20201:0>: Created vep_idx 0
> vppcom_session_create:1179: vcl<20201:0>: created session 1
> vppcom_session_bind:1317: vcl<20201:0>: session 1 handle 1: binding to local 
> IPv6 address fd0d:edc4:ffff:2001::203 port 8092, proto UDP
> vppcom_session_listen:1349: vcl<20201:0>: session 1: sending vpp listen 
> request...
> vcl_session_bound_handler:604: vcl<20201:0>: session 1 [0x1]: listen 
> succeeded!
> vppcom_epoll_ctl:2541: vcl<20201:0>: EPOLL_CTL_ADD: vep_sh 0, sh 1, events 
> 0x1, data 0x1!
> vppcom_session_create:1179: vcl<20201:0>: created session 2
> vppcom_session_bind:1317: vcl<20201:0>: session 2 handle 2: binding to local 
> IPv6 address fd0d:edc4:ffff:2001::203 port 8093, proto UDP
> vppcom_session_listen:1349: vcl<20201:0>: session 2: sending vpp listen 
> request...
> vcl_session_app_add_segment_handler:765: vcl<20201:0>: mapped new segment 
> '20190-2' size 134217728
> vcl_session_bound_handler:604: vcl<20201:0>: session 2 [0x2]: listen 
> succeeded!
> vppcom_epoll_ctl:2541: vcl<20201:0>: EPOLL_CTL_ADD: vep_sh 0, sh 2, events 
> 0x1, data 0x2!
> 
> 
> vpp# sh session verbose 2
> [#0][U] fd0d:edc4:ffff:2001::203:8092->:::0
> 
>  Rx fifo: cursize 3999125 nitems 3999999 has_event 1
>           head 2554045 tail 2553170 segment manager 1
>           vpp session 0 thread 0 app session 1 thread 0
>           ooo pool 0 active elts newest 4294967295
>  Tx fifo: cursize 0 nitems 3999999 has_event 0
>           head 0 tail 0 segment manager 1
>           vpp session 0 thread 0 app session 1 thread 0
>           ooo pool 0 active elts newest 0
> [#0][U] fd0d:edc4:ffff:2001::203:8093->:::0
> 
>  Rx fifo: cursize 0 nitems 3999999 has_event 0
>           head 0 tail 0 segment manager 2
>           vpp session 1 thread 0 app session 2 thread 0
>           ooo pool 0 active elts newest 0
>  Tx fifo: cursize 0 nitems 3999999 has_event 0
>           head 0 tail 0 segment manager 2
>           vpp session 1 thread 0 app session 2 thread 0
>           ooo pool 0 active elts newest 0
> Thread 0: active sessions 2
> 
> [root@orc01 vcl_test]# cat /etc/vpp/vcl.conf
> vcl {
>   rx-fifo-size 4000000
>   tx-fifo-size 4000000
>   app-scope-local
>   app-scope-global
>   api-socket-name /tmp/vpp-api.sock
> }
> [root@orc01 vcl_test]#
> 
> ------------------- Start of thread 0 vpp_main -------------------
> Packet 1
> 
> 00:09:53:445025: dpdk-input
>   HundredGigabitEthernet12/0/0 rx queue 0
>   buffer 0x88078: current data 0, length 1516, buffer-pool 0, ref-count 1, 
> totlen-nifb 0, trace handle 0x0
>                   ext-hdr-valid
>                   l4-cksum-computed l4-cksum-correct
>   PKT MBUF: port 0, nb_segs 1, pkt_len 1516
>     buf_len 2176, data_len 1516, ol_flags 0x180, data_off 128, phys_addr 
> 0x75601e80
>     packet_type 0x2e1 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
>     rss 0x0 fdir.hi 0x0 fdir.lo 0x0
>     Packet Offload Flags
>       PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid
>       PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid
>     Packet Types
>       RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet
>       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN (0x00e0) IPv6 packet with or without 
> extension headers
>       RTE_PTYPE_L4_UDP (0x0200) UDP packet
>   IP6: b8:83:03:79:9f:e4 -> b8:83:03:79:af:8c 802.1q vlan 2001
>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>   UDP: 56944 -> 8092
>     length 1458, checksum 0xb22d
> 00:09:53:445028: ethernet-input
>   frame: flags 0x3, hw-if-index 2, sw-if-index 2
>   IP6: b8:83:03:79:9f:e4 -> b8:83:03:79:af:8c 802.1q vlan 2001
> 00:09:53:445029: ip6-input
>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>   UDP: 56944 -> 8092
>     length 1458, checksum 0xb22d
> 00:09:53:445031: ip6-lookup
>   fib 0 dpo-idx 6 flow hash: 0x00000000
>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>   UDP: 56944 -> 8092
>     length 1458, checksum 0xb22d
> 00:09:53:445032: ip6-local
>     UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>       tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>     UDP: 56944 -> 8092
>       length 1458, checksum 0xb22d
> 00:09:53:445032: ip6-udp-lookup
>   UDP: src-port 56944 dst-port 8092
> 00:09:53:445033: udp6-input
>   UDP_INPUT: connection 0, disposition 5, thread 0
> 
> 
> thanks,
> -Raj
> 
>
> On Wed, Jan 15, 2020 at 4:09 PM Raj Kumar via Lists.Fd.Io 
> <http://lists.fd.io/> <raj.gautam25=gmail....@lists.fd.io 
> <mailto:gmail....@lists.fd.io>> wrote:
> Hi Florin,
> Yes,  [2] patch resolved the  IPv6/UDP receiver issue. 
> Thanks! for your help.
> 
> thanks,
> -Raj
> 
> On Tue, Jan 14, 2020 at 9:35 PM Florin Coras <fcoras.li...@gmail.com 
> <mailto:fcoras.li...@gmail.com>> wrote:
> Hi Raj, 
> 
> First of all, with this [1], the vcl test app/client can establish a udpc 
> connection. Note that udp will most probably lose packets, so large exchanges 
> with those apps may not work. 
> 
> As for the second issue, does [2] solve it?
> 
> Regards, 
> Florin
> 
> [1] https://gerrit.fd.io/r/c/vpp/+/24332 
> <https://gerrit.fd.io/r/c/vpp/+/24332>
> [2] https://gerrit.fd.io/r/c/vpp/+/24334 
> <https://gerrit.fd.io/r/c/vpp/+/24334>
> 
>> On Jan 14, 2020, at 12:59 PM, Raj Kumar <raj.gauta...@gmail.com 
>> <mailto:raj.gauta...@gmail.com>> wrote:
>> 
>> Hi Florin,
>> Thanks! for the reply. 
>> 
>> I realized the issue with the non-connected case.  For receiving datagrams, 
>> I was using recvfrom() with DONOT_WAIT flag because of that  
>> vppcom_session_recvfrom() api was failing. It expects either 0 or MSG_PEEK 
>> flag.
>>   if (flags == 0)
>>     rv = vppcom_session_read (session_handle, buffer, buflen);
>>   else if (flags & MSG_PEEK) 0x2
>>     rv = vppcom_session_peek (session_handle, buffer, buflen);
>>   else
>>     {
>>       VDBG (0, "Unsupport flags for recvfrom %d", flags);
>>       return VPPCOM_EAFNOSUPPORT;
>>     }
>> 
>>  I changed the flag to 0 in recvfrom() , after that UDP rx is working fine 
>> but only for IPv4.
>> 
>> I am facing a different issue with IPv6/UDP receiver.  I am getting "no 
>> listener for dst port" error.
>>
>> Please let me know if I am doing something wrong. 
>> Here are the traces : -
>> 
>> [root@orc01 testcode]# VCL_DEBUG=2 LDP_DEBUG=2 
>> LD_PRELOAD=/opt/vpp/build-root/install-vpp-native/vpp/lib/libvcl_ldpreload.so
>>   VCL_CONFIG=/etc/vpp/vcl.cfg ./udp6_rx
>> VCL<1164>: configured VCL debug level (2) from VCL_DEBUG!
>> VCL<1164>: allocated VCL heap = 0x7ff877439010, size 268435456 (0x10000000)
>> VCL<1164>: configured rx_fifo_size 4000000 (0x3d0900)
>> VCL<1164>: configured tx_fifo_size 4000000 (0x3d0900)
>> VCL<1164>: configured app_scope_local (1)
>> VCL<1164>: configured app_scope_global (1)
>> VCL<1164>: configured api-socket-name (/tmp/vpp-api.sock)
>> VCL<1164>: completed parsing vppcom config!
>> vppcom_connect_to_vpp:549: vcl<1164:0>: app (ldp-1164-app) is connected to 
>> VPP!
>> vppcom_app_create:1067: vcl<1164:0>: sending session enable
>> vppcom_app_create:1075: vcl<1164:0>: sending app attach
>> vppcom_app_create:1084: vcl<1164:0>: app_name 'ldp-1164-app', 
>> my_client_index 0 (0x0)
>> ldp_init:209: ldp<1164>: configured LDP debug level (2) from env var 
>> LDP_DEBUG!
>> ldp_init:282: ldp<1164>: LDP initialization: done!
>> ldp_constructor:2490: LDP<1164>: LDP constructor: done!
>> socket:974: ldp<1164>: calling vls_create: proto 1 (UDP), is_nonblocking 0
>> vppcom_session_create:1142: vcl<1164:0>: created session 0
>> bind:1086: ldp<1164>: fd 32: calling vls_bind: vlsh 0, addr 0x7fff9a93efe0, 
>> len 28
>> vppcom_session_bind:1280: vcl<1164:0>: session 0 handle 0: binding to local 
>> IPv6 address :: port 8092, proto UDP
>> vppcom_session_listen:1312: vcl<1164:0>: session 0: sending vpp listen 
>> request...
>> vcl_session_bound_handler:610: vcl<1164:0>: session 0 [0x1]: listen 
>> succeeded!
>> bind:1102: ldp<1164>: fd 32: returning 0
>> 
>> vpp# sh app server
>> Connection                              App                          Wrk
>> [0:0][CT:U] :::8092->:::0               ldp-1164-app[shm]             0
>> [#0][U] :::8092->:::0                   ldp-1164-app[shm]             0
>> 
>> vpp# sh err
>>    Count                    Node                  Reason
>>          7               dpdk-input               no error
>>       2606             ip6-udp-lookup             no listener for dst port
>>          8                arp-reply               ARP replies sent
>>          1              arp-disabled              ARP Disabled on this 
>> interface
>>         13                ip6-glean               neighbor solicitations sent
>>       2606                ip6-input               valid ip6 packets
>>          4          ip6-local-hop-by-hop          Unknown protocol ip6 local 
>> h-b-h packets dropped
>>       2606             ip6-icmp-error             destination unreachable 
>> response sent
>>         40             ip6-icmp-input             valid packets
>>          1             ip6-icmp-input             neighbor solicitations 
>> from source not on link
>>         12             ip6-icmp-input             neighbor solicitations for 
>> unknown targets
>>          1             ip6-icmp-input             neighbor advertisements 
>> sent
>>          1             ip6-icmp-input             neighbor advertisements 
>> received
>>         40             ip6-icmp-input             router advertisements sent
>>         40             ip6-icmp-input             router advertisements 
>> received
>>          1             ip4-icmp-input             echo replies sent
>>         89               lldp-input               lldp packets received on 
>> disabled interfaces
>>       1328                llc-input               unknown llc ssap/dsap
>> vpp#
>> 
>> vpp# show trace
>> ------------------- Start of thread 0 vpp_main -------------------
>> Packet 1
>> 
>> 00:23:39:401354: dpdk-input
>>   HundredGigabitEthernet12/0/0 rx queue 0
>>   buffer 0x8894e: current data 0, length 1516, buffer-pool 0, ref-count 1, 
>> totlen-nifb 0, trace handle 0x0
>>                   ext-hdr-valid
>>                   l4-cksum-computed l4-cksum-correct
>>   PKT MBUF: port 0, nb_segs 1, pkt_len 1516
>>     buf_len 2176, data_len 1516, ol_flags 0x180, data_off 128, phys_addr 
>> 0x75025400
>>     packet_type 0x2e1 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
>>     rss 0x0 fdir.hi 0x0 fdir.lo 0x0
>>     Packet Offload Flags
>>       PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid
>>       PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid
>>     Packet Types
>>       RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet
>>       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN (0x00e0) IPv6 packet with or without 
>> extension headers
>>       RTE_PTYPE_L4_UDP (0x0200) UDP packet
>>   IP6: b8:83:03:79:9f:e4 -> b8:83:03:79:af:8c 802.1q vlan 2001
>>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>>   UDP: 60593 -> 8092
>>     length 1458, checksum 0x0964
>> 00:23:39:401355: ethernet-input
>>   frame: flags 0x3, hw-if-index 2, sw-if-index 2
>>   IP6: b8:83:03:79:9f:e4 -> b8:83:03:79:af:8c 802.1q vlan 2001
>> 00:23:39:401356: ip6-input
>>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>>   UDP: 60593 -> 8092
>>     length 1458, checksum 0x0964
>> 00:23:39:401357: ip6-lookup
>>   fib 0 dpo-idx 5 flow hash: 0x00000000
>>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>>   UDP: 60593 -> 8092
>>     length 1458, checksum 0x0964
>> 00:23:39:401361: ip6-local
>>     UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>>       tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>>     UDP: 60593 -> 8092
>>       length 1458, checksum 0x0964
>> 00:23:39:401362: ip6-udp-lookup
>>   UDP: src-port 60593 dst-port 8092 (no listener)
>> 00:23:39:401362: ip6-icmp-error
>>   UDP: fd0d:edc4:ffff:2001::201 -> fd0d:edc4:ffff:2001::203
>>     tos 0x00, flow label 0x0, hop limit 64, payload length 1458
>>   UDP: 60593 -> 8092
>>     length 1458, checksum 0x0964
>> 00:23:39:401363: error-drop
>>   rx:HundredGigabitEthernet12/0/0.2001
>> 00:23:39:401364: drop
>>   ip6-input: valid ip6 packets
>> 
>> vpp#
>> 
>> 
>> Thanks,
>> -Raj
>> 
>> 
>> On Tue, Jan 14, 2020 at 1:44 PM Florin Coras <fcoras.li...@gmail.com 
>> <mailto:fcoras.li...@gmail.com>> wrote:
>> Hi Raj,
>> 
>> Session layer does support connection-less transports but udp does not raise 
>> accept notifications to vcl. UDPC might, but we haven’t tested udpc with vcl 
>> in a long time so it might not work properly. 
>> 
>> What was the problem you were hitting in the non-connected case?
>> 
>> Regards,
>> Florin
>> 
>> > On Jan 14, 2020, at 7:13 AM, raj.gauta...@gmail.com 
>> > <mailto:raj.gauta...@gmail.com> wrote:
>> > 
>> > Hi ,
>> > I am trying some host application tests ( using LD_PRELOAD) .  TCP rx and 
>> > tx both work fine. UDP tx also works fine. 
>> > The issue is only with UDP rx .  In some discussion it was mentioned that 
>> > session layer does not support connection-less transports so protocols 
>> > like udp still need to accept connections and only afterwards read from 
>> > the fifos.
>> > So, I changed the UDP receiver application to use listen() and accept() 
>> > before read() . But , I am still having issue to make it run. 
>> > After I started, udp traffic from other server it seems to accept the 
>> > connection but never returns from the vppcom_session_accept() function.
>> > VPP release is 19.08.
>> > 
>> > vpp# sh app server
>> > Connection                              App                          Wrk
>> > [0:0][CT:U] 0.0.0.0:8090->0.0.0.0:0 <http://0.0.0.0:0/>     
>> > ldp-36646-app[shm]            0
>> > [#0][U] 0.0.0.0:8090->0.0.0.0:0 <http://0.0.0.0:0/>         
>> > ldp-36646-app[shm]            0
>> > vpp#
>> >
>> >
>> > [root@orc01 testcode]#  VCL_DEBUG=2 LDP_DEBUG=2 
>> > LD_PRELOAD=/opt/vpp/build-root/install-vpp-native/vpp/lib/libvcl_ldpreload.so
>> >   VCL_CONFIG=/etc/vpp/vcl.cfg ./udp_rx
>> > VCL<36646>: configured VCL debug level (2) from VCL_DEBUG!
>> > VCL<36646>: allocated VCL heap = 0x7f77e5309010, size 268435456 
>> > (0x10000000)
>> > VCL<36646>: configured rx_fifo_size 4000000 (0x3d0900)
>> > VCL<36646>: configured tx_fifo_size 4000000 (0x3d0900)
>> > VCL<36646>: configured app_scope_local (1)
>> > VCL<36646>: configured app_scope_global (1)
>> > VCL<36646>: configured api-socket-name (/tmp/vpp-api.sock)
>> > VCL<36646>: completed parsing vppcom config!
>> > vppcom_connect_to_vpp:549: vcl<36646:0>: app (ldp-36646-app) is connected 
>> > to VPP!
>> > vppcom_app_create:1067: vcl<36646:0>: sending session enable
>> > vppcom_app_create:1075: vcl<36646:0>: sending app attach
>> > vppcom_app_create:1084: vcl<36646:0>: app_name 'ldp-36646-app', 
>> > my_client_index 0 (0x0)
>> > ldp_init:209: ldp<36646>: configured LDP debug level (2) from env var 
>> > LDP_DEBUG!
>> > ldp_init:282: ldp<36646>: LDP initialization: done!
>> > ldp_constructor:2490: LDP<36646>: LDP constructor: done!
>> > socket:974: ldp<36646>: calling vls_create: proto 1 (UDP), is_nonblocking 0
>> > vppcom_session_create:1142: vcl<36646:0>: created session 0
>> > Socket successfully created..
>> > bind:1086: ldp<36646>: fd 32: calling vls_bind: vlsh 0, addr 
>> > 0x7fff3f3c1040, len 16
>> > vppcom_session_bind:1280: vcl<36646:0>: session 0 handle 0: binding to 
>> > local IPv4 address 0.0.0.0 port 8090, proto UDP
>> > vppcom_session_listen:1312: vcl<36646:0>: session 0: sending vpp listen 
>> > request...
>> > vcl_session_bound_handler:610: vcl<36646:0>: session 0 [0x1]: listen 
>> > succeeded!
>> > bind:1102: ldp<36646>: fd 32: returning 0
>> > Socket successfully binded..
>> > listen:2005: ldp<36646>: fd 32: calling vls_listen: vlsh 0, n 5
>> > vppcom_session_listen:1308: vcl<36646:0>: session 0 [0x1]: already in 
>> > listen state!
>> > listen:2020: ldp<36646>: fd 32: returning 0
>> > Server listening..
>> > ldp_accept4:2043: ldp<36646>: listen fd 32: calling vppcom_session_accept: 
>> > listen sid 0, ep 0x0, flags 0x3f3c0fc0
>> > vppcom_session_accept:1478: vcl<36646:0>: discarded event: 0
>> >
>> > 
>> 
> 
> 

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#15200): https://lists.fd.io/g/vpp-dev/message/15200
Mute This Topic: https://lists.fd.io/mt/69694900/21656
Mute #vpp-hoststack: https://lists.fd.io/mk?hashtag=vpp-hoststack&subid=1480452
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to