diff options
author | antirez <antirez@gmail.com> | 2010-06-02 15:18:22 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2010-06-02 15:19:09 +0200 |
commit | b03dce95373fa73a31f3c7b7784eab3cf1a4830b (patch) | |
tree | dc76db00c9eb59fba56cc4979783ec7bf0532998 | |
parent | 1bc183731d2a464e9ec528506b1792aa98b1621d (diff) | |
download | redis-b03dce95373fa73a31f3c7b7784eab3cf1a4830b.tar.gz |
smarter swapout policy on AOF too
-rw-r--r-- | redis.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -4057,7 +4057,6 @@ static int rdbLoad(char *filename) { redisDb *db = server.db+0; char buf[1024]; time_t expiretime, now = time(NULL); - long long loadedkeys = 0; fp = fopen(filename,"r"); if (!fp) return REDIS_ERR; @@ -4115,7 +4114,6 @@ static int rdbLoad(char *filename) { redisLog(REDIS_WARNING,"Loading DB, duplicated key (%s) found! Unrecoverable error, exiting now.", key->ptr); exit(1); } - loadedkeys++; /* Set the expire time if needed */ if (expiretime != -1) setExpire(db,key,expiretime); @@ -4141,6 +4139,7 @@ static int rdbLoad(char *filename) { continue; } + /* Flush data on disk once 32 MB of additional RAM are used... */ force_swapout = 0; if ((zmalloc_used_memory() - server.vm_max_memory) > 1024*1024*32) force_swapout = 1; @@ -8335,7 +8334,6 @@ int loadAppendOnlyFile(char *filename) { struct redisClient *fakeClient; FILE *fp = fopen(filename,"r"); struct redis_stat sb; - unsigned long long loadedkeys = 0; int appendonly = server.appendonly; if (redis_fstat(fileno(fp),&sb) != -1 && sb.st_size == 0) @@ -8358,6 +8356,7 @@ int loadAppendOnlyFile(char *filename) { char buf[128]; sds argsds; struct redisCommand *cmd; + int force_swapout; if (fgets(buf,sizeof(buf),fp) == NULL) { if (feof(fp)) @@ -8398,8 +8397,11 @@ int loadAppendOnlyFile(char *filename) { for (j = 0; j < argc; j++) decrRefCount(argv[j]); zfree(argv); /* Handle swapping while loading big datasets when VM is on */ - loadedkeys++; - if (server.vm_enabled && (loadedkeys % 5000) == 0) { + force_swapout = 0; + if ((zmalloc_used_memory() - server.vm_max_memory) > 1024*1024*32) + force_swapout = 1; + + if (server.vm_enabled && force_swapout) { while (zmalloc_used_memory() > server.vm_max_memory) { if (vmSwapOneObjectBlocking() == REDIS_ERR) break; } |