Changeset 739

Show
Ignore:
Timestamp:
03/03/08 05:08:31 (9 months ago)
Author:
dormando
Message:

Don't re-calculate the slab class id for slabs_free() either.
This + previous patch slightly reduce user CPU time, especially during heavy evictions.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/server/items.c

    r738 r739  
    145145void item_free(item *it) { 
    146146    size_t ntotal = ITEM_ntotal(it); 
     147    unsigned int clsid; 
    147148    assert((it->it_flags & ITEM_LINKED) == 0); 
    148149    assert(it != heads[it->slabs_clsid]); 
     
    151152 
    152153    /* so slab size changer can tell later if item is already free or not */ 
     154    clsid = it->slabs_clsid; 
    153155    it->slabs_clsid = 0; 
    154156    it->it_flags |= ITEM_SLABBED; 
    155157    DEBUG_REFCNT(it, 'F'); 
    156     slabs_free(it, ntotal); 
     158    slabs_free(it, ntotal, clsid); 
    157159} 
    158160 
  • trunk/server/memcached.h

    r738 r739  
    293293void  mt_run_deferred_deletes(void); 
    294294void *mt_slabs_alloc(size_t size, unsigned int id); 
    295 void  mt_slabs_free(void *ptr, size_t size); 
     295void  mt_slabs_free(void *ptr, size_t size, unsigned int id); 
    296296int   mt_slabs_reassign(unsigned char srcid, unsigned char dstid); 
    297297char *mt_slabs_stats(int *buflen); 
     
    322322# define run_deferred_deletes()      mt_run_deferred_deletes() 
    323323# define slabs_alloc(x,y)            mt_slabs_alloc(x,y) 
    324 # define slabs_free(x,y)             mt_slabs_free(x,y
     324# define slabs_free(x,y,z)           mt_slabs_free(x,y,z
    325325# define slabs_reassign(x,y)         mt_slabs_reassign(x,y) 
    326326# define slabs_stats(x)              mt_slabs_stats(x) 
     
    355355# define run_deferred_deletes()      do_run_deferred_deletes() 
    356356# define slabs_alloc(x,y)            do_slabs_alloc(x,y) 
    357 # define slabs_free(x,y)             do_slabs_free(x,y
     357# define slabs_free(x,y,z)           do_slabs_free(x,y,z
    358358# define slabs_reassign(x,y)         do_slabs_reassign(x,y) 
    359359# define slabs_stats(x)              do_slabs_stats(x) 
  • trunk/server/slabs.c

    r738 r739  
    258258} 
    259259 
    260 void do_slabs_free(void *ptr, const size_t size) { 
    261     unsigned char id = slabs_clsid(size); 
     260void do_slabs_free(void *ptr, const size_t size, unsigned int id) { 
    262261    slabclass_t *p; 
    263262 
  • trunk/server/slabs.h

    r738 r739  
    2121 
    2222/** Free previously allocated object */ 
    23 void do_slabs_free(void *ptr, size_t size); 
     23void do_slabs_free(void *ptr, size_t size, unsigned int id); 
    2424 
    2525/** Fill buffer with stats */ /*@null@*/ 
  • trunk/server/thread.c

    r738 r739  
    581581} 
    582582 
    583 void mt_slabs_free(void *ptr, size_t size) { 
     583void mt_slabs_free(void *ptr, size_t size, unsigned int id) { 
    584584    pthread_mutex_lock(&slabs_lock); 
    585     do_slabs_free(ptr, size); 
     585    do_slabs_free(ptr, size, id); 
    586586    pthread_mutex_unlock(&slabs_lock); 
    587587}