Dave Hansen
2016-Jul-27 16:03 UTC
[PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
On 07/26/2016 06:23 PM, Liang Li wrote:> + vb->pfn_limit = VIRTIO_BALLOON_PFNS_LIMIT; > + vb->pfn_limit = min(vb->pfn_limit, get_max_pfn()); > + vb->bmap_len = ALIGN(vb->pfn_limit, BITS_PER_LONG) / > + BITS_PER_BYTE + 2 * sizeof(unsigned long); > + hdr_len = sizeof(struct balloon_bmap_hdr); > + vb->bmap_hdr = kzalloc(hdr_len + vb->bmap_len, GFP_KERNEL);This ends up doing a 1MB kmalloc() right? That seems a _bit_ big. How big was the pfn buffer before?
Michael S. Tsirkin
2016-Jul-27 21:39 UTC
[PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
On Wed, Jul 27, 2016 at 09:03:21AM -0700, Dave Hansen wrote:> On 07/26/2016 06:23 PM, Liang Li wrote: > > + vb->pfn_limit = VIRTIO_BALLOON_PFNS_LIMIT; > > + vb->pfn_limit = min(vb->pfn_limit, get_max_pfn()); > > + vb->bmap_len = ALIGN(vb->pfn_limit, BITS_PER_LONG) / > > + BITS_PER_BYTE + 2 * sizeof(unsigned long); > > + hdr_len = sizeof(struct balloon_bmap_hdr); > > + vb->bmap_hdr = kzalloc(hdr_len + vb->bmap_len, GFP_KERNEL); > > This ends up doing a 1MB kmalloc() right? That seems a _bit_ big. How > big was the pfn buffer before?Yes I would limit this to 1G memory in a go, will result in a 32KByte bitmap. -- MST
Li, Liang Z
2016-Jul-28 01:13 UTC
[PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
> Subject: Re: [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate > process > > On 07/26/2016 06:23 PM, Liang Li wrote: > > + vb->pfn_limit = VIRTIO_BALLOON_PFNS_LIMIT; > > + vb->pfn_limit = min(vb->pfn_limit, get_max_pfn()); > > + vb->bmap_len = ALIGN(vb->pfn_limit, BITS_PER_LONG) / > > + BITS_PER_BYTE + 2 * sizeof(unsigned long); > > + hdr_len = sizeof(struct balloon_bmap_hdr); > > + vb->bmap_hdr = kzalloc(hdr_len + vb->bmap_len, GFP_KERNEL); > > This ends up doing a 1MB kmalloc() right? That seems a _bit_ big. How big > was the pfn buffer before?Yes, it is if the max pfn is more than 32GB. The size of the pfn buffer use before is 256*4 = 1024 Bytes, it's too small, and it's the main reason for bad performance. Use the max 1MB kmalloc is a balance between performance and flexibility, a large page bitmap covers the range of all the memory is no good for a system with huge amount of memory. If the bitmap is too small, it means we have to traverse a long list for many times, and it's bad for performance. Thanks! Liang
Michael S. Tsirkin
2016-Jul-28 01:45 UTC
[PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
On Thu, Jul 28, 2016 at 01:13:35AM +0000, Li, Liang Z wrote:> > Subject: Re: [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate > > process > > > > On 07/26/2016 06:23 PM, Liang Li wrote: > > > + vb->pfn_limit = VIRTIO_BALLOON_PFNS_LIMIT; > > > + vb->pfn_limit = min(vb->pfn_limit, get_max_pfn()); > > > + vb->bmap_len = ALIGN(vb->pfn_limit, BITS_PER_LONG) / > > > + BITS_PER_BYTE + 2 * sizeof(unsigned long); > > > + hdr_len = sizeof(struct balloon_bmap_hdr); > > > + vb->bmap_hdr = kzalloc(hdr_len + vb->bmap_len, GFP_KERNEL); > > > > This ends up doing a 1MB kmalloc() right? That seems a _bit_ big. How big > > was the pfn buffer before? > > Yes, it is if the max pfn is more than 32GB. > The size of the pfn buffer use before is 256*4 = 1024 Bytes, it's too small, > and it's the main reason for bad performance. > Use the max 1MB kmalloc is a balance between performance and flexibility, > a large page bitmap covers the range of all the memory is no good for a system > with huge amount of memory. If the bitmap is too small, it means we have > to traverse a long list for many times, and it's bad for performance. > > Thanks! > LiangThere are all your implementation decisions though. If guest memory is so fragmented that you only have order 0 4k pages, then allocating a huge 1M contigious chunk is very problematic in and of itself. Most people rarely migrate and do not care how fast that happens. Wasting a large chunk of memory (and it's zeroed for no good reason, so you actually request host memory for it) for everyone to speed it up when it does happen is not really an option. -- MST
Li, Liang Z
2016-Jul-28 03:30 UTC
[PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
> Subject: Re: [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate > process > > On Wed, Jul 27, 2016 at 09:03:21AM -0700, Dave Hansen wrote: > > On 07/26/2016 06:23 PM, Liang Li wrote: > > > + vb->pfn_limit = VIRTIO_BALLOON_PFNS_LIMIT; > > > + vb->pfn_limit = min(vb->pfn_limit, get_max_pfn()); > > > + vb->bmap_len = ALIGN(vb->pfn_limit, BITS_PER_LONG) / > > > + BITS_PER_BYTE + 2 * sizeof(unsigned long); > > > + hdr_len = sizeof(struct balloon_bmap_hdr); > > > + vb->bmap_hdr = kzalloc(hdr_len + vb->bmap_len, GFP_KERNEL); > > > > This ends up doing a 1MB kmalloc() right? That seems a _bit_ big. > > How big was the pfn buffer before? > > > Yes I would limit this to 1G memory in a go, will result in a 32KByte bitmap. > > -- > MSTLimit to 1G is bad for the performance, I sent you the test result several weeks ago. Paste it bellow: ------------------------------------------------------------------------------------------------------------------------ About the size of page bitmap, I have test the performance of filling the balloon to 15GB with a 16GB RAM VM. ==============================32K Byte (cover 1GB of RAM) Time spends on inflating: 2031ms --------------------------------------------- 64K Byte (cover 2GB of RAM) Time spends on inflating: 1507ms -------------------------------------------- 512K Byte (cover 16GB of RAM) Time spends on inflating: 1237ms =============================== If possible, a big bitmap is better for performance. Liang
Maybe Matching Threads
- [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
- [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
- [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
- [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process
- [PATCH v2 repost 4/7] virtio-balloon: speed up inflate/deflate process