* Alexander Graf <ag...@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'.

Thanks,

        Ingo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to