• Mike Kravetz's avatar
    hugetlbfs: add minimum size tracking fields to subpool structure · c6a91820
    Mike Kravetz authored
    hugetlbfs allocates huge pages from the global pool as needed.  Even if
    the global pool contains a sufficient number pages for the filesystem size
    at mount time, those global pages could be grabbed for some other use.  As
    a result, filesystem huge page allocations may fail due to lack of pages.
    Applications such as a database want to use huge pages for performance
    reasons.  hugetlbfs filesystem semantics with ownership and modes work
    well to manage access to a pool of huge pages.  However, the application
    would like some reasonable assurance that allocations will not fail due to
    a lack of huge pages.  At application startup time, the application would
    like to configure itself to use a specific number of huge pages.  Before
    starting, the application can check to make sure that enough huge pages
    exist in the system global pools.  However, there are no guarantees that
    those pages will be available when needed by the application.  What the
    application wants is exclusive use of a subset of huge pages.
    Add a new hugetlbfs mount option 'min_size=<value>' to indicate that the
    specified number of pages will be available for use by the filesystem.  At
    mount time, this number of huge pages will be reserved for exclusive use
    of the filesystem.  If there is not a sufficient number of free pages, the
    mount will fail.  As pages are allocated to and freeed from the
    filesystem, the number of reserved pages is adjusted so that the specified
    minimum is maintained.
    This patch (of 4):
    Add a field to the subpool structure to indicate the minimimum number of
    huge pages to always be used by this subpool.  This minimum count includes
    allocated pages as well as reserved pages.  If the minimum number of pages
    for the subpool have not been allocated, pages are reserved up to this
    minimum.  An additional field (rsv_hpages) is used to track the number of
    pages reserved to meet this minimum size.  The hstate pointer in the
    subpool is convenient to have when reserving and unreserving the pages.
    Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
hugetlb.h 13.9 KB