* Unable to create more than 1 guest virtio-net device using vhost-net backend @ 2010-03-19 22:19 Sridhar Samudrala 2010-03-21 9:55 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Sridhar Samudrala @ 2010-03-19 22:19 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: netdev, kvm@vger.kernel.org When creating a guest with 2 virtio-net interfaces, i am running into a issue causing the 2nd i/f falling back to userpace virtio even when vhost is enabled. After some debugging, it turned out that KVM_IOEVENTFD ioctl() call in qemu is failing with ENOSPC. This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() routine in the host kernel. I think we need to increase this limit if we want to support multiple network interfaces using vhost-net. Is there an alternate solution? Thanks Sridhar ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-19 22:19 Unable to create more than 1 guest virtio-net device using vhost-net backend Sridhar Samudrala @ 2010-03-21 9:55 ` Michael S. Tsirkin 2010-03-21 10:11 ` Avi Kivity 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2010-03-21 9:55 UTC (permalink / raw) To: Sridhar Samudrala; +Cc: netdev, kvm@vger.kernel.org, avi, gleb On Fri, Mar 19, 2010 at 03:19:27PM -0700, Sridhar Samudrala wrote: > When creating a guest with 2 virtio-net interfaces, i am running > into a issue causing the 2nd i/f falling back to userpace virtio > even when vhost is enabled. > > After some debugging, it turned out that KVM_IOEVENTFD ioctl() > call in qemu is failing with ENOSPC. > This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() > routine in the host kernel. > > I think we need to increase this limit if we want to support multiple > network interfaces using vhost-net. > Is there an alternate solution? > > Thanks > Sridhar Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, any objections to increasing the limit to say 16? That would give us 5 more devices to the limit of 6 per guest. -- MST ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 9:55 ` Michael S. Tsirkin @ 2010-03-21 10:11 ` Avi Kivity 2010-03-21 10:15 ` Michael S. Tsirkin 2010-03-21 10:21 ` Gleb Natapov 0 siblings, 2 replies; 11+ messages in thread From: Avi Kivity @ 2010-03-21 10:11 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On 03/21/2010 11:55 AM, Michael S. Tsirkin wrote: > On Fri, Mar 19, 2010 at 03:19:27PM -0700, Sridhar Samudrala wrote: > >> When creating a guest with 2 virtio-net interfaces, i am running >> into a issue causing the 2nd i/f falling back to userpace virtio >> even when vhost is enabled. >> >> After some debugging, it turned out that KVM_IOEVENTFD ioctl() >> call in qemu is failing with ENOSPC. >> This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() >> routine in the host kernel. >> >> I think we need to increase this limit if we want to support multiple >> network interfaces using vhost-net. >> Is there an alternate solution? >> >> Thanks >> Sridhar >> > Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, > any objections to increasing the limit to say 16? That would give us > 5 more devices to the limit of 6 per guest. > Increase it to 200, then. Is the limit visible to userspace? If not, we need to expose it. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 10:11 ` Avi Kivity @ 2010-03-21 10:15 ` Michael S. Tsirkin 2010-03-21 10:29 ` Avi Kivity 2010-03-21 10:21 ` Gleb Natapov 1 sibling, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2010-03-21 10:15 UTC (permalink / raw) To: Avi Kivity; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On Sun, Mar 21, 2010 at 12:11:33PM +0200, Avi Kivity wrote: > On 03/21/2010 11:55 AM, Michael S. Tsirkin wrote: >> On Fri, Mar 19, 2010 at 03:19:27PM -0700, Sridhar Samudrala wrote: >> >>> When creating a guest with 2 virtio-net interfaces, i am running >>> into a issue causing the 2nd i/f falling back to userpace virtio >>> even when vhost is enabled. >>> >>> After some debugging, it turned out that KVM_IOEVENTFD ioctl() >>> call in qemu is failing with ENOSPC. >>> This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() >>> routine in the host kernel. >>> >>> I think we need to increase this limit if we want to support multiple >>> network interfaces using vhost-net. >>> Is there an alternate solution? >>> >>> Thanks >>> Sridhar >>> >> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >> any objections to increasing the limit to say 16? That would give us >> 5 more devices to the limit of 6 per guest. >> > > Increase it to 200, then. OK. I think we'll also need a smarter allocator than bus->dev_count++ than we now have. Right? > Is the limit visible to userspace? If not, we need to expose it. I don't think it's visible: it seems to be used in a single place in kvm. Let's add an ioctl? Note that qemu doesn't need it now ... > -- > error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 10:15 ` Michael S. Tsirkin @ 2010-03-21 10:29 ` Avi Kivity 2010-03-21 11:34 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Avi Kivity @ 2010-03-21 10:29 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On 03/21/2010 12:15 PM, Michael S. Tsirkin wrote: >>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >>> any objections to increasing the limit to say 16? That would give us >>> 5 more devices to the limit of 6 per guest. >>> >>> >> Increase it to 200, then. >> > OK. I think we'll also need a smarter allocator > than bus->dev_count++ than we now have. Right? > No, why? Eventually we'll want faster scanning than the linear search we employ now, though. >> Is the limit visible to userspace? If not, we need to expose it. >> > I don't think it's visible: it seems to be used in a single > place in kvm. Let's add an ioctl? Note that qemu doesn't > need it now ... > We usually expose limits via KVM_CHECK_EXTENSION(KVM_CAP_BLAH). We can expose it via KVM_CAP_IOEVENTFD (and need to reserve iodev entries for those). -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 10:29 ` Avi Kivity @ 2010-03-21 11:34 ` Michael S. Tsirkin 2010-03-21 11:58 ` Avi Kivity 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2010-03-21 11:34 UTC (permalink / raw) To: Avi Kivity; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On Sun, Mar 21, 2010 at 12:29:31PM +0200, Avi Kivity wrote: > On 03/21/2010 12:15 PM, Michael S. Tsirkin wrote: >>>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >>>> any objections to increasing the limit to say 16? That would give us >>>> 5 more devices to the limit of 6 per guest. >>>> >>>> >>> Increase it to 200, then. >>> >> OK. I think we'll also need a smarter allocator >> than bus->dev_count++ than we now have. Right? >> > > No, why? We'll run into problems if devices are created/removed in random order, won't we? > Eventually we'll want faster scanning than the linear search we employ > now, though. Yes I suspect with 200 entries we will :). Let's just make it 16 for now? >>> Is the limit visible to userspace? If not, we need to expose it. >>> >> I don't think it's visible: it seems to be used in a single >> place in kvm. Let's add an ioctl? Note that qemu doesn't >> need it now ... >> > > We usually expose limits via KVM_CHECK_EXTENSION(KVM_CAP_BLAH). We can > expose it via KVM_CAP_IOEVENTFD (and need to reserve iodev entries for > those). > > -- > error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 11:34 ` Michael S. Tsirkin @ 2010-03-21 11:58 ` Avi Kivity 2010-03-22 18:16 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Avi Kivity @ 2010-03-21 11:58 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On 03/21/2010 01:34 PM, Michael S. Tsirkin wrote: > On Sun, Mar 21, 2010 at 12:29:31PM +0200, Avi Kivity wrote: > >> On 03/21/2010 12:15 PM, Michael S. Tsirkin wrote: >> >>>>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >>>>> any objections to increasing the limit to say 16? That would give us >>>>> 5 more devices to the limit of 6 per guest. >>>>> >>>>> >>>>> >>>> Increase it to 200, then. >>>> >>>> >>> OK. I think we'll also need a smarter allocator >>> than bus->dev_count++ than we now have. Right? >>> >>> >> No, why? >> > We'll run into problems if devices are created/removed in random order, > won't we? > unregister_dev() takes care of it. >> Eventually we'll want faster scanning than the linear search we employ >> now, though. >> > Yes I suspect with 200 entries we will :). Let's just make it 16 for > now? > Let's make it 200 and fix the performance problems later. Making it 16 is just asking for trouble. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 11:58 ` Avi Kivity @ 2010-03-22 18:16 ` Michael S. Tsirkin 2010-03-22 23:41 ` Sridhar Samudrala 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2010-03-22 18:16 UTC (permalink / raw) To: Avi Kivity; +Cc: Sridhar Samudrala, netdev, kvm@vger.kernel.org, gleb On Sun, Mar 21, 2010 at 01:58:29PM +0200, Avi Kivity wrote: > On 03/21/2010 01:34 PM, Michael S. Tsirkin wrote: >> On Sun, Mar 21, 2010 at 12:29:31PM +0200, Avi Kivity wrote: >> >>> On 03/21/2010 12:15 PM, Michael S. Tsirkin wrote: >>> >>>>>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >>>>>> any objections to increasing the limit to say 16? That would give us >>>>>> 5 more devices to the limit of 6 per guest. >>>>>> >>>>>> >>>>>> >>>>> Increase it to 200, then. >>>>> >>>>> >>>> OK. I think we'll also need a smarter allocator >>>> than bus->dev_count++ than we now have. Right? >>>> >>>> >>> No, why? >>> >> We'll run into problems if devices are created/removed in random order, >> won't we? >> > > unregister_dev() takes care of it. > >>> Eventually we'll want faster scanning than the linear search we employ >>> now, though. >>> >> Yes I suspect with 200 entries we will :). Let's just make it 16 for >> now? >> > > Let's make it 200 and fix the performance problems later. Making it 16 > is just asking for trouble. I did this and performance with vhost seems to become much more noisy, and drop by about 10% on average, even though in practice only a single device is created. Still trying to figure it out ... Any idea? > -- > error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-22 18:16 ` Michael S. Tsirkin @ 2010-03-22 23:41 ` Sridhar Samudrala 0 siblings, 0 replies; 11+ messages in thread From: Sridhar Samudrala @ 2010-03-22 23:41 UTC (permalink / raw) To: Michael S. Tsirkin Cc: Avi Kivity, netdev, kvm@vger.kernel.org, gleb, David Stevens On Mon, 2010-03-22 at 20:16 +0200, Michael S. Tsirkin wrote: > On Sun, Mar 21, 2010 at 01:58:29PM +0200, Avi Kivity wrote: > > On 03/21/2010 01:34 PM, Michael S. Tsirkin wrote: > >> On Sun, Mar 21, 2010 at 12:29:31PM +0200, Avi Kivity wrote: > >> > >>> On 03/21/2010 12:15 PM, Michael S. Tsirkin wrote: > >>> > >>>>>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, > >>>>>> any objections to increasing the limit to say 16? That would give us > >>>>>> 5 more devices to the limit of 6 per guest. > >>>>>> > >>>>>> > >>>>>> > >>>>> Increase it to 200, then. > >>>>> > >>>>> > >>>> OK. I think we'll also need a smarter allocator > >>>> than bus->dev_count++ than we now have. Right? > >>>> > >>>> > >>> No, why? > >>> > >> We'll run into problems if devices are created/removed in random order, > >> won't we? > >> > > > > unregister_dev() takes care of it. > > > >>> Eventually we'll want faster scanning than the linear search we employ > >>> now, though. > >>> > >> Yes I suspect with 200 entries we will :). Let's just make it 16 for > >> now? > >> > > > > Let's make it 200 and fix the performance problems later. Making it 16 > > is just asking for trouble. > > I did this and performance with vhost seems to become much more noisy, > and drop by about 10% on average, even though in practice only > a single device is created. Still trying to figure it out ... > Any idea? I am not sure if this 10% variation is due to the increase of NR_IO_BUS_DEVS. In our testing, we do see variations of 10% or higher between multiple netperf instances with the same setup/configuration when using virtio/vhost. Thanks Sridhar ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 10:11 ` Avi Kivity 2010-03-21 10:15 ` Michael S. Tsirkin @ 2010-03-21 10:21 ` Gleb Natapov 2010-03-21 10:31 ` Avi Kivity 1 sibling, 1 reply; 11+ messages in thread From: Gleb Natapov @ 2010-03-21 10:21 UTC (permalink / raw) To: Avi Kivity Cc: Michael S. Tsirkin, Sridhar Samudrala, netdev, kvm@vger.kernel.org On Sun, Mar 21, 2010 at 12:11:33PM +0200, Avi Kivity wrote: > On 03/21/2010 11:55 AM, Michael S. Tsirkin wrote: > >On Fri, Mar 19, 2010 at 03:19:27PM -0700, Sridhar Samudrala wrote: > >>When creating a guest with 2 virtio-net interfaces, i am running > >>into a issue causing the 2nd i/f falling back to userpace virtio > >>even when vhost is enabled. > >> > >>After some debugging, it turned out that KVM_IOEVENTFD ioctl() > >>call in qemu is failing with ENOSPC. > >>This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() > >>routine in the host kernel. > >> > >>I think we need to increase this limit if we want to support multiple > >>network interfaces using vhost-net. > >>Is there an alternate solution? > >> > >>Thanks > >>Sridhar > >Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, > >any objections to increasing the limit to say 16? That would give us > >5 more devices to the limit of 6 per guest. > > Increase it to 200, then. > Currently on each device read/write we iterate over all registered devices. This is not scalable. > Is the limit visible to userspace? If not, we need to expose it. > > -- > error compiling committee.c: too many arguments to function -- Gleb. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Unable to create more than 1 guest virtio-net device using vhost-net backend 2010-03-21 10:21 ` Gleb Natapov @ 2010-03-21 10:31 ` Avi Kivity 0 siblings, 0 replies; 11+ messages in thread From: Avi Kivity @ 2010-03-21 10:31 UTC (permalink / raw) To: Gleb Natapov Cc: Michael S. Tsirkin, Sridhar Samudrala, netdev, kvm@vger.kernel.org On 03/21/2010 12:21 PM, Gleb Natapov wrote: > On Sun, Mar 21, 2010 at 12:11:33PM +0200, Avi Kivity wrote: > >> On 03/21/2010 11:55 AM, Michael S. Tsirkin wrote: >> >>> On Fri, Mar 19, 2010 at 03:19:27PM -0700, Sridhar Samudrala wrote: >>> >>>> When creating a guest with 2 virtio-net interfaces, i am running >>>> into a issue causing the 2nd i/f falling back to userpace virtio >>>> even when vhost is enabled. >>>> >>>> After some debugging, it turned out that KVM_IOEVENTFD ioctl() >>>> call in qemu is failing with ENOSPC. >>>> This is because of the NR_IOBUS_DEVS(6) limit in kvm_io_bus_register_dev() >>>> routine in the host kernel. >>>> >>>> I think we need to increase this limit if we want to support multiple >>>> network interfaces using vhost-net. >>>> Is there an alternate solution? >>>> >>>> Thanks >>>> Sridhar >>>> >>> Nothing easy that I can see. Each device needs 2 of these. Avi, Gleb, >>> any objections to increasing the limit to say 16? That would give us >>> 5 more devices to the limit of 6 per guest. >>> >> Increase it to 200, then. >> >> > Currently on each device read/write we iterate over all registered > devices. This is not scalable. > Yeah. We need first to drop the callback based matching and replace it with explicit ranges, then to replace the search with a hash table for small ranges (keeping a linear search for large ranges, can happen for coalesced mmio). -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-03-22 23:41 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-03-19 22:19 Unable to create more than 1 guest virtio-net device using vhost-net backend Sridhar Samudrala 2010-03-21 9:55 ` Michael S. Tsirkin 2010-03-21 10:11 ` Avi Kivity 2010-03-21 10:15 ` Michael S. Tsirkin 2010-03-21 10:29 ` Avi Kivity 2010-03-21 11:34 ` Michael S. Tsirkin 2010-03-21 11:58 ` Avi Kivity 2010-03-22 18:16 ` Michael S. Tsirkin 2010-03-22 23:41 ` Sridhar Samudrala 2010-03-21 10:21 ` Gleb Natapov 2010-03-21 10:31 ` Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).