public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Alexander Graf <agraf@suse.de>
Cc: Asias He <asias.hejun@gmail.com>,
	Anthony Liguori <anthony@codemonkey.ws>,
	Stefan Hajnoczi <stefanha@gmail.com>,
	Pekka Enberg <penberg@kernel.org>,
	Cyrill Gorcunov <gorcunov@gmail.com>,
	Sasha Levin <levinsasha928@gmail.com>,
	Prasad Joshi <prasadjoshi124@gmail.com>,
	kvm@vger.kernel.org
Subject: Re: [PATCH v2 00/31] Implement user mode network for kvm tools
Date: Mon, 4 Jul 2011 11:43:15 +0200	[thread overview]
Message-ID: <20110704094315.GA24439@elte.hu> (raw)
In-Reply-To: <8F1C9683-1EA9-4DC0-AF2B-5749B5E2FD09@suse.de>


* Alexander Graf <agraf@suse.de> wrote:

> 
> On 04.07.2011, at 11:11, Ingo Molnar wrote:
> 
> > 
> > * Alexander Graf <agraf@suse.de> wrote:
> > 
> >>>> I don't see how it would. Once you overrun device buffers, you 
> >>>> have to do something. Either you drop packets or you stall the 
> >>>> guest. I'd usually prefer the former :).
> >>> 
> >>> What scenario do you see where we'd have to drop packets?
> >>> 
> >>> When the guest sends packets, we send them over to the host TCP 
> >>> socket - no blocking.
> >> 
> >> When the guest sends packets, I'd hope you have 2 threads:
> >> 
> >> * vcpu
> >> * virtio network queue process
> >> 
> >> So those two run in parallel now, with the network queue processing 
> >> packets while the vcpu pushes packets into the ring. What if the 
> >> network thread is slower than the vcpu fills the ring? You only 
> >> have so many entries in a vring.
> >> 
> >>> When the host receives packets it should only read data out of 
> >>> the host socket(s) if the vring buffer suggests that there's 
> >>> space available.
> >> 
> >> I agree :).
> >> 
> >>> So i don't see we'd need to drop packets or block things - we 
> >>> just have to react to packets and to vring space availability in 
> >>> a straightforward way.
> >> 
> >> Well, the only way for the sending path is to stall the vcpu, 
> >> otherwise the guest figures "oh, I can't push packets into the 
> >> vring, let's just drop it", no?
> > 
> > No, that's not how the Linux TCP/IP implementation works.
> > 
> > Filled up TX rings are pretty normal on physical hardware: we do not 
> > drop packets but the TCP state machine keeps buffering and filling 
> > the device as it can.
> > 
> > The same will happen with virtual guests as well - there's no packet 
> > dropping nor 'blocking of the whole guest'.
> 
> I see. Can you guarantee that other guests (in case that ever gets 
> implemented) behave the same?

Do you mean can i remove 100% of fear, uncertainty and doubt about an 
unknown 'black box' guest OS? No.

But the queueing logic of TCP/IP stacks is pretty similar in practice 
so i'd be very surprised if Windows (which i guess you must be 
referring to) dropped packets due to TX overflow. It would be very 
stupid to drop packets on TX: the sending stack has to buffer the TCP 
stream *anyway* (and has no choice about that, the app cannot resend 
the socket data), so it achieves nothing from dropping the packet and 
adding resend complexity to itself.

Thanks,

	Ingo

  reply	other threads:[~2011-07-04  9:43 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-30  8:40 [PATCH v2 00/31] Implement user mode network for kvm tools Asias He
2011-06-30  8:40 ` [PATCH v2 01/31] kvm tools: Introduce ethernet frame buffer system for uip Asias He
2011-06-30  8:40 ` [PATCH v2 02/31] kvm tools: Add ARP support " Asias He
2011-06-30  8:40 ` [PATCH v2 03/31] kvm tools: Add IPV4 " Asias He
2011-06-30  8:40 ` [PATCH v2 04/31] kvm tools: Implement IP checksum " Asias He
2011-06-30  8:40 ` [PATCH v2 05/31] kvm tools: Add ICMP support " Asias He
2011-06-30  8:40 ` [PATCH v2 06/31] kvm tools: Introduce struct uip_udp to present UDP package Asias He
2011-06-30  8:40 ` [PATCH v2 07/31] kvm tools: Introduce struct uip_pseudo_hdr to present UDP pseudo header Asias He
2011-06-30  8:40 ` [PATCH v2 08/31] kvm tools: Introduce struct uip_udp_socket Asias He
2011-06-30  8:40 ` [PATCH v2 09/31] kvm tools: Add two helpers to return UDP {header, total} length Asias He
2011-06-30  8:40 ` [PATCH v2 10/31] kvm tools: Add helper to return ethernet header length Asias He
2011-06-30  8:40 ` [PATCH v2 11/31] kvm tools: Implement uip_csum_udp() to calculate UDP checksum Asias He
2011-06-30  8:41 ` [PATCH v2 12/31] kvm tools: Add UDP support for uip Asias He
2011-07-01 11:46   ` Ingo Molnar
2011-07-01 15:24     ` Asias He
2011-06-30  8:41 ` [PATCH v2 13/31] kvm tools: Introduce struct uip_tcp to present TCP package Asias He
2011-06-30  8:41 ` [PATCH v2 14/31] kvm tools: Introduce struct uip_tcp_socket Asias He
2011-06-30  8:41 ` [PATCH v2 15/31] kvm tools: Add helpers to return TCP {header, total, payload} length Asias He
2011-06-30  8:41 ` [PATCH v2 16/31] kvm tools: Add helper to return start address of TCP payload Asias He
2011-06-30  8:41 ` [PATCH v2 17/31] kvm tools: Add helpers to test whether SYN or FIN bit is set Asias He
2011-06-30  8:41 ` [PATCH v2 18/31] kvm tools: Add helper to allocate and get TCP initial sequence number Asias He
2011-06-30  8:41 ` [PATCH v2 19/31] kvm tools: Implement uip_csum_tcp() to calculate TCP checksum Asias He
2011-06-30  8:41 ` [PATCH v2 20/31] kvm tools: Add TCP support for uip Asias He
2011-06-30  8:41 ` [PATCH v2 21/31] kvm tools: Introduce uip_init() " Asias He
2011-06-30  8:41 ` [PATCH v2 22/31] kvm tools: Introduce uip_tx() " Asias He
2011-06-30  8:41 ` [PATCH v2 23/31] kvm tools: Introduce uip_rx() " Asias He
2011-06-30  8:41 ` [PATCH v2 24/31] kvm tools: Add MACRO for user and tap mode for virtio net Asias He
2011-06-30  8:41 ` [PATCH v2 25/31] kvm tools: Reanme net_device to net_dev Asias He
2011-06-30  8:41 ` [PATCH v2 26/31] kvm tools: Introduce -net {user, tap, none} options for virtio net Asias He
2011-06-30  8:41 ` [PATCH v2 27/31] kvm tools: Change default guest MAC address to 00:15:15:15:15:15 Asias He
2011-06-30  8:41 ` [PATCH v2 28/31] kvm tools: Make virtio net work with user mode network Asias He
2011-06-30  8:41 ` [PATCH v2 29/31] kvm tools: Make default network mode to user mode Asias He
2011-06-30  8:41 ` [PATCH v2 30/31] kvm tools: Make default host ip address to 192.168.33.1 Asias He
2011-06-30  8:41 ` [PATCH v2 31/31] kvm tools: Introduce struct net_dev_operations Asias He
2011-06-30  8:56 ` [PATCH v2 00/31] Implement user mode network for kvm tools Stefan Hajnoczi
2011-06-30 15:32   ` Anthony Liguori
2011-07-01  0:18     ` Asias He
2011-07-01 11:53       ` Ingo Molnar
2011-07-01 13:46         ` Alexander Graf
2011-07-02  9:45           ` Pekka Enberg
2011-07-02 10:30             ` Ingo Molnar
2011-07-02 11:19             ` Alexander Graf
2011-07-02 11:27               ` Pekka Enberg
2011-07-02 12:31                 ` Alexander Graf
2011-07-03 19:42           ` Ingo Molnar
2011-07-03 22:15             ` Alexander Graf
2011-07-04  9:11               ` Ingo Molnar
2011-07-04  9:30                 ` Alexander Graf
2011-07-04  9:43                   ` Ingo Molnar [this message]
2011-07-02  9:42         ` Pekka Enberg
2011-06-30 23:38   ` Asias He
2011-07-01 16:50     ` Stefan Hajnoczi
2011-07-01 20:36       ` Pekka Enberg
2011-07-02  3:49         ` Asias He
2011-07-02  9:02           ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110704094315.GA24439@elte.hu \
    --to=mingo@elte.hu \
    --cc=agraf@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=asias.hejun@gmail.com \
    --cc=gorcunov@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=levinsasha928@gmail.com \
    --cc=penberg@kernel.org \
    --cc=prasadjoshi124@gmail.com \
    --cc=stefanha@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox