From 0fb5c4ebd8f0b9532b02e33666007b4f824d436c Mon Sep 17 00:00:00 2001 From: oranagra Date: Mon, 30 Jan 2017 12:53:13 -0800 Subject: [PATCH] add test for active defrag --- tests/unit/memefficiency.tcl | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/unit/memefficiency.tcl b/tests/unit/memefficiency.tcl index 7ca9a705..12cb8458 100644 --- a/tests/unit/memefficiency.tcl +++ b/tests/unit/memefficiency.tcl @@ -35,3 +35,48 @@ start_server {tags {"memefficiency"}} { } } } + +start_server {tags {"defrag"}} { + if {[string match {*jemalloc*} [s mem_allocator]]} { + test "Actove defrag" { + r config set activedefrag no + r config set active-defrag-threshold-lower 5 + r config set active-defrag-ignore-bytes 2mb + r config set maxmemory 100mb + r config set maxmemory-policy allkeys-lru + r debug populate 700000 asdf 150 + r debug populate 170000 asdf 300 + set frag [s mem_fragmentation_ratio] + assert {$frag >= 1.7} + r config set activedefrag yes + after 1500 ;# active defrag tests the status once a second. + set hits [s active_defrag_hits] + + # wait for the active defrag to stop working + set tries 0 + while { True } { + incr tries + after 500 + set prev_hits $hits + set hits [s active_defrag_hits] + if {$hits == $prev_hits} { + break + } + assert {$tries < 100} + } + + # TODO: we need to expose more accurate fragmentation info + # i.e. the allocator used and active pages + # instead we currently look at RSS so we need to ask for purge + r memory purge + + # test the the fragmentation is lower and that the defragger stopped working + set frag [s mem_fragmentation_ratio] + assert {$frag < 1.4} + set misses [s active_defrag_misses] + after 500 + set misses2 [s active_defrag_misses] + assert {$misses2 == $misses} + } + } +}