From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rusty Russell Subject: Re: Make virtio vq size configurable by a guest. Date: Tue, 21 Jun 2011 11:32:04 +0930 Message-ID: <878vswhrhf.fsf@rustcorp.com.au> References: <20110620131624.GZ491@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20110620131624.GZ491@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Gleb Natapov , virtualization@lists.linux-foundation.org Cc: mst@redhat.com List-Id: virtualization@lists.linuxfoundation.org On Mon, 20 Jun 2011 16:16:24 +0300, Gleb Natapov wrote: > Hi, > > Currently in virtio host dictates the size and layout of vq that should > be used. To talk to a device that has one vq with 128 elements guest > needs to allocate at least 2 pages. Usually this is not a problem, but > sometimes guest runs in a resource restricted environment and then it may > not have enough memory to initialize all virtio devices present in the > system. One such environment is a BIOS. Seabios currently has virtio block > support. Since the BIOS should be able to access the disk even after OS > is launched vq should be allocated from a special memory region that will > be marked as unavailable to an OS, but such memory is scarce. Because vq > is so huge only a couple of virtio disks can be initialized by the BIOS. > > It would be nice if a guest will be able to tell to a host what vq size > should be used instead. BIOS issues only one request at a time anyway, > so it needs only one element in vq. It does not care about performance > to much either, so it can tell to a host to not align used index to a > page boundary. This way vq of one element shouldn't take more then a couple > hundreds of bytes. Unfortunately, a virtqueue *always* takes at least 2 pages. That's because we split the host/guest part on page boundaries. (2 pages per disk is "huge"? Really?) So really, you want to negotiate the ring size and the 'align' parameter. A new feature could allow this, but there may be valid reasons for a host to want to place an upper limit, too. Thanks, Rusty.