lkml.org 
[lkml]   [2011]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH 1/7] zram/vmalloc: Correct tunings to enable use with 64K pages
    From
    On Wed, Jan 26, 2011 at 7:22 PM, Robert Jennings <rcj@linux.vnet.ibm.com> wrote:
    > xvmalloc will not currently function with 64K pages.  Newly allocated
    > pages will be inserted at an offset beyond the end of the first-level
    > index.  This tuning is needed to properly size the allocator for 64K
    > pages.
    >
    > The default 3 byte shift results in a second level list size which can not
    > be indexed using the 64 bits of the flbitmap in the xv_pool structure.
    > The shift must increase to 4 bytes between second level list entries to
    > fit the size of the first level bitmap.
    >
    > Here are a few statistics for structure sizes on 32- and 64-bit CPUs
    > with 4KB and 64KB page sizes.
    >
    > bits_per_long              32        64        64
    > page_size               4,096     4,096    65,535
    > xv_align                    4         8         8
    > fl_delta                    3         3         4
    > num_free_lists            508       508     4,094
    > xv_pool size            4,144b    8,216b   66,040b
    > per object overhead        32        64        64
    > zram struct 0.5GB disk    512KB    1024KB      64KB
    >
    > This patch maintains the current tunings for 4K pages, adds an optimal
    > sizing for 64K pages and adds a safe tuning for any other page sizes.
    >
    > Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com>
    > ---
    >  drivers/staging/zram/xvmalloc_int.h |   18 ++++++++++++++++--
    >  1 files changed, 16 insertions(+), 2 deletions(-)
    >
    > diff --git a/drivers/staging/zram/xvmalloc_int.h b/drivers/staging/zram/xvmalloc_int.h
    > index e23ed5c..051a49b 100644
    > --- a/drivers/staging/zram/xvmalloc_int.h
    > +++ b/drivers/staging/zram/xvmalloc_int.h
    > @@ -19,7 +19,11 @@
    >  /* User configurable params */
    >
    >  /* Must be power of two */
    > +#ifdef CONFIG_64BIT
    > +#define XV_ALIGN_SHIFT 3
    > +#else
    >  #define XV_ALIGN_SHIFT 2
    > +#endif
    >  #define XV_ALIGN       (1 << XV_ALIGN_SHIFT)
    >  #define XV_ALIGN_MASK  (XV_ALIGN - 1)
    >
    > @@ -27,8 +31,18 @@
    >  #define XV_MIN_ALLOC_SIZE      32
    >  #define XV_MAX_ALLOC_SIZE      (PAGE_SIZE - XV_ALIGN)
    >
    > -/* Free lists are separated by FL_DELTA bytes */
    > -#define FL_DELTA_SHIFT 3
    > +/*
    > + * Free lists are separated by FL_DELTA bytes
    > + * This value is 3 for 4k pages and 4 for 64k pages, for any
    > + * other page size, a conservative (PAGE_SHIFT - 9) is used.
    > + */
    > +#if PAGE_SHIFT == 12
    > +#define FL_DELTA_SHIFT 3

    This is handled by the else branch already, no?

    > +#elif PAGE_SHIFT == 16
    > +#define FL_DELTA_SHIFT 4
    > +#else
    > +#define FL_DELTA_SHIFT (PAGE_SHIFT - 9)
    > +#endif
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-01-26 18:51    [W:0.025 / U:62.104 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site