[ovs-dev] dpdkvhostuser fail to alloc memory when receive packet from other host

gowrishankar gowrishankar.m at linux.vnet.ibm.com
Wed Jun 17 11:54:10 UTC 2015


On Wednesday 17 June 2015 03:19 PM, Du, Fan wrote:
> Hi,
>
> I'm playing dpdkvhostuser ports with latest DPDK and ovs master tree with iperf benchmarking.
> When kvm guest1(backed up dpdkvhostuser port)siting on HOST1 is receiving packets from either other physical HOST2,
> or similar kvm guest2 with dpdkvhostuser port siting on HOST2. The connectivity will break, iperf show no bandwidth and stall finally.

In my setup where kvm guest1 receives packets from phy host through ovs 
switch (vhost-user),
I do not find this problem. I am on top of below commit fyi.

commit 7d1ced01772de541d6692c7d5604210e274bcd37 (ovs)

Btw, I checked tx case for guest as well. qemu I am using is of version 
2.3.0. Is your qemu of version above 2.2
if allotting more than 1GB guest memory.

Could you also share hugepages params passed to kernel.

Regards,
Gowri Shankar

>
> Other test scenario like, two kvm guest sitting on one host, or a single kvm guest send packets to a physical host works like a charm.
>
> Swiitch debug option on, dpdk lib spit as below:
> VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
> VHOST_CONFIG: vring call idx:0 file:62
> VHOST_CONFIG: read message VHOST_USER_SET_VRING_CALL
> VHOST_CONFIG: vring call idx:0 file:58
>
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
> VHOST_DATA: F0 Failed to allocate memory for mbuf. mbuf_pool:0x7fc7411ab5c0
>
> After some tweaks of logging code, and looks like bad things happens within below code snippet:
> In lib/librte_vhost/vhost_rxtx.c function: rte_vhost_dequeue_burst
>
> 612                 vb_offset = 0;
> 613                 vb_avail = desc->len;
> 614                 /* Allocate an mbuf and populate the structure. */
> 615                 m = rte_pktmbuf_alloc(mbuf_pool);
> 616                 if (unlikely(m == NULL)) {
> 617                         RTE_LOG(ERR, VHOST_DATA,
> 618                                 "F0 Failed to allocate memory for mbuf. mbuf_pool:%p\n", mbuf_pool);
> 619                         break;
> 620                 }
> 621                 seg_offset = 0;
> 622                 seg_avail = m->buf_len - RTE_PKTMBUF_HEADROOM;
> 623                 cpy_len = RTE_MIN(vb_avail, seg_avail);
>
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev





More information about the dev mailing list