> -----Original Message----- > From: Stefan Hajnoczi [mailto:stefa...@gmail.com] > Sent: Tuesday, July 15, 2014 11:00 PM > To: Wangkai (Kevin,C) > Cc: Stefan Hajnoczi; Lee yang; qemu-devel@nongnu.org; > aligu...@amazon.com > Subject: Re: [Qemu-devel] [PATCH] Tap: fix vcpu long time io blocking > on tap > > On Mon, Jul 14, 2014 at 10:44:58AM +0000, Wangkai (Kevin,C) wrote: > > Here the detail network: > > > > +--------------------------------------------+ > > | The host add tap1 and eth10 to bridge 'br1'| +- > -------+ > > | +------------+ | | > send | > > | | VM eth1-+-tap1 --- bridge --- eth10 --+---------------------+ > > | | packets| > > | +------------+ | | > | > > +--------------------------------------------+ > > +--------------------------------------------+ +--------+ > > > > Qemu start vm by virtio, use tap interface, option is: > > -net nic,vlan=101, model=virtio -net > > tap,vlan=101,ifname=tap1,script=no,downscript=no > > Use the newer -netdev/-device syntax to get offload support and > slightly better performance: > > -netdev tap,id=tap0,ifname=tap1,script=no,downscript=no \ -device > virtio-net-pci,netdev=tap0 > > > And add tap1 and eth10 to bridge br1 in the host: > > Brctl addif br1 tap1 > > Brctl addif br1 eth10 > > > > total recv 505387 time 2000925 us: > > means call tap_send once dealing 505387 packets, the packet payload > > was 300 bytes, and time use for tap_send() was 2,000,925 > > micro-seconds, time was measured by record time stamp at function > tap_send() start and end. > > > > We just test the performance of VM. > > That is 150 MB of incoming packets in a single tap_send(). Network rx > queues are maybe a few 1000 packets so I wonder what is going on here. > > Maybe more packets are arriving while QEMU is reading them and we keep > looping. That's strange though because the virtio-net rx virtqueue > should fill up (it only has 256 entries). > > Can you investigate more and find out exactly what is going on? It's > not clear yet that adding a budget is the solution or just hiding a > deeper problem. > > Stefan [Wangkai (Kevin,C)]
Hi Stefan, Yes, I have one machine keep sending packets 300M/second, about 1M packets per second, I am checking the code, you mean virtqueue has only 256 entries, is this member keep the value? vq->vring.num I will check and add some debug info to check this problem. I have got the most time taking by the virtio_net_receive() virtio_net_receive qemu_deliver_packet qemu_net_queue_send net_hub_port_receive qemu_deliver_packet qemu_net_queue_send tap_send qemu_iohandler_poll main_loop_wait main_loop main regards Wangkai