summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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");