From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Subject: Re: [PATCH] KVM: Avoid wasting pages for small lpage_info arrays Date: Tue, 15 May 2012 13:25:51 -0700 Message-ID: <20120515132551.b204110e.akpm@linux-foundation.org> References: <20120510233328.d4a2623d3f8936c1b44b1f77@gmail.com> <4FAF8AFE.4020007@redhat.com> <20120514222933.94bf2c01626e28d132cf560f@gmail.com> <4FB20D89.6060700@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: Takuya Yoshikawa , mtosatti@redhat.com, kvm@vger.kernel.org, yoshikawa.takuya@oss.ntt.co.jp To: Avi Kivity Return-path: Received: from mail.linuxfoundation.org ([140.211.169.12]:35735 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757825Ab2EOUZw (ORCPT ); Tue, 15 May 2012 16:25:52 -0400 In-Reply-To: <4FB20D89.6060700@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, 15 May 2012 11:02:17 +0300 Avi Kivity wrote: > On 05/14/2012 04:29 PM, Takuya Yoshikawa wrote: > > On Sun, 13 May 2012 13:20:46 +0300 > > Avi Kivity wrote: > > > > > I don't feel that the savings is worth the extra complication. We save > > > two pages per memslot here. > > > > Using a 4KB vmalloced page for a 16B array is ... > > > > Actually I felt like you before and did not do this, but recently there > > was a talk about creating hundreds of memslots. > > > > > What about using kvmalloc() instead of vmalloc()? It's in > > > security/apparmor now, but can be made generic. > > > > Andrew once, maybe some times, rejected making such an API generic saying > > that there should not be a generic criterion by which we can decide which > > function - vmalloc() or kmalloc() - to use. > > > > So each caller should decide by its own criteria. > > > > In this case, we need to implement kvm specific kvmalloc(). > > BTW, we are already doing this for dirty_bitmap. > > Okay, a local kvmalloc() is better than open-coding the logic. > > Andrew, prepare yourself for some code duplication. There are reasons for avoiding vmalloc(). The kernel does not run in a virtual memory environment. It is a harsh, low-level environment and kernel code should be robust. Assuming that you can allocate vast amounts of contiguous memory is not robust. Robust code will implement data structures which avoid this weakness.