]> git.saurik.com Git - redis.git/commitdiff
better swapout policy while loading RDB file
authorantirez <antirez@gmail.com>
Wed, 2 Jun 2010 13:13:53 +0000 (15:13 +0200)
committerantirez <antirez@gmail.com>
Wed, 2 Jun 2010 13:13:53 +0000 (15:13 +0200)
redis.c

diff --git a/redis.c b/redis.c
index 949bb58eac20d52c96a953747abdcd5855e05921..9352356d2904a78368bf44dd1ada6b7787f58dcb 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -4120,6 +4120,7 @@ static int rdbLoad(char *filename) {
     }
     while(1) {
         robj *key, *val;
     }
     while(1) {
         robj *key, *val;
+        int force_swapout;
 
         expiretime = -1;
         /* Read type. */
 
         expiretime = -1;
         /* Read type. */
@@ -4184,9 +4185,13 @@ static int rdbLoad(char *filename) {
             continue;
         }
 
             continue;
         }
 
+        force_swapout = 0;
+        if ((zmalloc_used_memory() - server.vm_max_memory) > 1024*1024*32)
+            force_swapout = 1;
+
         /* If we have still some hope of having some value fitting memory
          * then we try random sampling. */
         /* If we have still some hope of having some value fitting memory
          * then we try random sampling. */
-        if (!swap_all_values && server.vm_enabled && (loadedkeys % 5000) == 0) {
+        if (!swap_all_values && server.vm_enabled && force_swapout) {
             while (zmalloc_used_memory() > server.vm_max_memory) {
                 if (vmSwapOneObjectBlocking() == REDIS_ERR) break;
             }
             while (zmalloc_used_memory() > server.vm_max_memory) {
                 if (vmSwapOneObjectBlocking() == REDIS_ERR) break;
             }