On 20/05/2016 11:59, Liang Li wrote: > + > + sg_init_table(sg, 5); > + sg_set_buf(&sg[0], &flags, sizeof(flags)); > + sg_set_buf(&sg[1], &start_pfn, sizeof(start_pfn)); > + sg_set_buf(&sg[2], &page_shift, sizeof(page_shift)); > + sg_set_buf(&sg[3], &bmap_len, sizeof(bmap_len)); These four should probably be placed in a single struct and therefore a single sg entry. It might even be faster to place it together with the bitmap, thus avoiding the use of indirect descriptors. You should also test ballooning of a 64GB guest after filling in the page cache, not just ballooning of a freshly booted 4GB guest. This will give you a much more sparse bitmap. Still, the improvement in sending PFNs to the host are impressive. Thanks, Paolo > + sg_set_buf(&sg[4], vb->page_bitmap + > + (start_pfn / BITS_PER_LONG), bmap_len); > + virtqueue_add_outbuf(vq, sg, 5, vb, GFP_KERNEL); -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html