summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordormando <dormando@rydia.net>2015-10-08 00:28:27 -0700
committerdormando <dormando@rydia.net>2015-11-18 23:14:36 -0800
commit8fa54f7e43e0ff3ea0f555cb52fd2dda01db3efa (patch)
treed6d186d6d6ff5c470a0be369e36789d3bec8a8f6
parent186509c27f1fadfb1552d289eba7d574f5e33e7a (diff)
downloadmemcached-8fa54f7e43e0ff3ea0f555cb52fd2dda01db3efa.tar.gz
split rebal_evictions into _nomem and _samepage
gross oversight putting two conditions into the same variable. now can tell if we're evicting because we're hitting the bottom of the free memory pool, or if we keep trying to rescue items into the same page as the one being cleared.
-rw-r--r--doc/protocol.txt9
-rw-r--r--memcached.c3
-rw-r--r--memcached.h6
-rw-r--r--slabs.c16
-rw-r--r--t/slabs-reassign2.t2
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;
};
diff --git a/slabs.c b/slabs.c
index 83b908c..8a4f353 100644
--- a/slabs.c
+++ b/slabs.c
@@ -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");