lkml.org 
[lkml]   [2011]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/7] zram: Speed insertion of new pages with cached idx
    * Pekka Enberg (penberg@cs.helsinki.fi) wrote:
    > On Wed, Jan 26, 2011 at 7:23 PM, Robert Jennings> <rcj@linux.vnet.ibm.com> wrote:
    >> Calculate the first- and second-level indices for new page when the pool
    >> is initialized rather than calculating them on each insertion.
    >>
    >> Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com>
    >> ---
    >> drivers/staging/zram/xvmalloc.c | 13 +++++++++++--
    >> drivers/staging/zram/xvmalloc_int.h | 4 ++++
    >> 2 files changed, 15 insertions(+), 2 deletions(-)
    >>
    >> diff --git a/drivers/staging/zram/xvmalloc.c b/drivers/staging/zram/xvmalloc.c
    >> index 3fdbb8a..a507f95 100644
    >> --- a/drivers/staging/zram/xvmalloc.c
    >> +++ b/drivers/staging/zram/xvmalloc.c
    >> @@ -184,8 +184,13 @@ static void insert_block(struct xv_pool *pool, struct page *page, u32 offset,
    >> u32 flindex, slindex;
    >> struct block_header *nextblock;
    >>
    >> - slindex = get_index_for_insert(block->size);
    >> - flindex = slindex / BITS_PER_LONG;
    >> + if (block->size >= (PAGE_SIZE - XV_ALIGN)) {
    >> + slindex = pagesize_slindex;
    >> + flindex = pagesize_flindex;
    >> + } else {
    >> + slindex = get_index_for_insert(block->size);
    >> + flindex = slindex / BITS_PER_LONG;
    >> + }
    >>
    >> block->link.prev_page = 0;
    >> block->link.prev_offset = 0;
    >> @@ -316,6 +321,10 @@ struct xv_pool *xv_create_pool(void)
    >> if (!pool)
    >> return NULL;
    >>
    >> + /* cache the first/second-level indices for PAGE_SIZE allocations */
    >> + pagesize_slindex = get_index_for_insert(PAGE_SIZE);
    >> + pagesize_flindex = pagesize_slindex / BITS_PER_LONG;
    >
    > Why is this in xv_create_pool(). AFAICT, it can be called multiple
    > times if there's more than one zram device. Do we really need
    > variables for these? They look like something GCC constant propagation
    > should take care of if they would be defines or static inline
    > functions.

    It should have been a define rather than in xv_create_pool but as I read
    more about GCC constant propagation and look at the get_index_for_insert
    I believe that this patch is unnecessary. For sizes near PAGE_SIZE
    (>XV_MAX_ALLOC_SIZE) I believe GCC constant propagation should do
    exactly what I though I was trying to do. I will drop this patch.
    Thank you for your reviews.


    \
     
     \ /
      Last update: 2011-01-26 20:53    [W:0.046 / U:34.072 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site