diff options
-rw-r--r-- | doc/protocol.txt | 9 | ||||
-rw-r--r-- | memcached.c | 3 | ||||
-rw-r--r-- | memcached.h | 6 | ||||
-rw-r--r-- | slabs.c | 16 | ||||
-rw-r--r-- | t/slabs-reassign2.t | 2 |
5 files changed, 24 insertions, 12 deletions
diff --git a/doc/protocol.txt b/doc/protocol.txt index 34a4e48..7ebfec6 100644 --- a/doc/protocol.txt +++ b/doc/protocol.txt @@ -604,8 +604,13 @@ integers separated by a colon (treat this as a floating point number). | slab_global_page_pool | 32u | Slab pages returned to global pool for | | | | reassignment to other slab classes. | | slab_reassign_rescues | 64u | Items rescued from eviction in page move | -| slab_reassign_evictions | -| | 64u | Valid items evicted druing a page move | +| slab_reassign_evictions_nomem | +| | 64u | Valid items evicted during a page move | +| | | (due to no free memory in slab) | +| slab_reassign_evictions_samepage | +| | 64u | Valid items evicted during a page move | +| | | (due to free memory being in the same | +| | | page as the source item) | | slab_reassign_busy_items | | | 64u | Items busy during page move, requiring a | | | | retry before page can be moved. | diff --git a/memcached.c b/memcached.c index a1de525..2f61acd 100644 --- a/memcached.c +++ b/memcached.c @@ -2632,7 +2632,8 @@ static void server_stats(ADD_STAT add_stats, conn *c) { APPEND_STAT("hash_is_expanding", "%u", stats.hash_is_expanding); if (settings.slab_reassign) { APPEND_STAT("slab_reassign_rescues", "%llu", stats.slab_reassign_rescues); - APPEND_STAT("slab_reassign_evictions", "%llu", stats.slab_reassign_evictions); + APPEND_STAT("slab_reassign_evictions_nomem", "%llu", stats.slab_reassign_evictions_nomem); + APPEND_STAT("slab_reassign_evictions_samepage", "%llu", stats.slab_reassign_evictions_samepage); APPEND_STAT("slab_reassign_busy_items", "%llu", stats.slab_reassign_busy_items); APPEND_STAT("slab_reassign_running", "%u", stats.slab_reassign_running); APPEND_STAT("slabs_moved", "%llu", stats.slabs_moved); diff --git a/memcached.h b/memcached.h index aa10d16..489b59e 100644 --- a/memcached.h +++ b/memcached.h @@ -287,7 +287,8 @@ struct stats { bool slab_reassign_running; /* slab reassign in progress */ uint64_t slabs_moved; /* times slabs were moved around */ uint64_t slab_reassign_rescues; /* items rescued during slab move */ - uint64_t slab_reassign_evictions; /* valid items lost during slab move */ + uint64_t slab_reassign_evictions_nomem; /* valid items lost during slab move */ + uint64_t slab_reassign_evictions_samepage; /* valid items lost during slab move */ uint64_t slab_reassign_busy_items; /* valid temporarily unmovable */ uint64_t lru_crawler_starts; /* Number of item crawlers kicked off */ bool lru_crawler_running; /* crawl in progress */ @@ -531,7 +532,8 @@ struct slab_rebalance { int d_clsid; uint32_t busy_items; uint32_t rescues; - uint32_t evictions; + uint32_t evictions_nomem; + uint32_t evictions_samepage; uint8_t done; }; @@ -659,7 +659,7 @@ static int slab_rebalance_move(void) { save_item = 0; } else if (s_cls->sl_curr < 1) { save_item = 0; - slab_rebal.evictions++; + slab_rebal.evictions_nomem++; } else { save_item = 1; /* BIT OF A HACK: if sl_curr is > 0 alloc won't try to @@ -675,7 +675,7 @@ static int slab_rebalance_move(void) { */ do_slabs_free(new_it, ntotal, slab_rebal.s_clsid); save_item = 0; - slab_rebal.evictions++; + slab_rebal.evictions_samepage++; } } pthread_mutex_unlock(&slabs_lock); @@ -743,7 +743,8 @@ static void slab_rebalance_finish(void) { slabclass_t *d_cls; int x; uint32_t rescues; - uint32_t evictions; + uint32_t evictions_nomem; + uint32_t evictions_samepage; pthread_mutex_lock(&slabs_lock); @@ -787,9 +788,11 @@ static void slab_rebalance_finish(void) { slab_rebal.slab_start = NULL; slab_rebal.slab_end = NULL; slab_rebal.slab_pos = NULL; - evictions = slab_rebal.evictions; + evictions_nomem = slab_rebal.evictions_nomem; + evictions_samepage = slab_rebal.evictions_samepage; rescues = slab_rebal.rescues; - slab_rebal.evictions = 0; + slab_rebal.evictions_nomem = 0; + slab_rebal.evictions_samepage = 0; slab_rebal.rescues = 0; slab_rebalance_signal = 0; @@ -800,7 +803,8 @@ static void slab_rebalance_finish(void) { stats.slab_reassign_running = false; stats.slabs_moved++; stats.slab_reassign_rescues += rescues; - stats.slab_reassign_evictions += evictions; + stats.slab_reassign_evictions_nomem += evictions_nomem; + stats.slab_reassign_evictions_samepage += evictions_samepage; STATS_UNLOCK(); if (settings.verbose > 1) { diff --git a/t/slabs-reassign2.t b/t/slabs-reassign2.t index 9135170..f072d60 100644 --- a/t/slabs-reassign2.t +++ b/t/slabs-reassign2.t @@ -61,7 +61,7 @@ for (1 .. $keycount) { cmp_ok($hits, '>', 4000, 'were able to fetch back 2/3rds of 8k keys'); my $stats_done = mem_stats($sock); cmp_ok($stats_done->{slab_reassign_rescues}, '>', 0, 'some reassign rescues happened'); -cmp_ok($stats_done->{slab_reassign_evictions}, '>', 0, 'some reassing evictions happened'); +cmp_ok($stats_done->{slab_reassign_evictions_nomem}, '>', 0, 'some reassing evictions happened'); print $sock "flush_all\r\n"; is(scalar <$sock>, "OK\r\n", "did flush_all"); |