[sheepdog] [PATCH] object cache: try to start reclaim when collie resets the max cache size
levin li
levin108 at gmail.com
Mon Jul 30 11:34:01 CEST 2012
From: levin li <xingke.lwp at taobao.com>
Signed-off-by: levin li <xingke.lwp at taobao.com>
---
sheep/object_cache.c | 28 ++++++++++++++++++++--------
sheep/ops.c | 2 ++
sheep/sheep_priv.h | 1 +
3 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/sheep/object_cache.c b/sheep/object_cache.c
index 1febea9..2e48f2e 100644
--- a/sheep/object_cache.c
+++ b/sheep/object_cache.c
@@ -622,6 +622,25 @@ static void update_cache_entry(struct object_cache *oc, uint32_t idx,
pthread_rwlock_unlock(&oc->lock);
}
+void object_cache_try_to_reclaim(void)
+{
+ struct work *work;
+
+ if (!sys->cache_size)
+ return;
+
+ if (uatomic_read(&sys_cache.cache_size) < sys->cache_size)
+ return;
+
+ if (cache_in_reclaim(1))
+ return;
+
+ work = xzalloc(sizeof(struct work));
+ work->fn = reclaim_work;
+ work->done = reclaim_done;
+ queue_work(sys->reclaim_wqueue, work);
+}
+
static void add_to_object_cache(struct object_cache *oc, uint32_t idx)
{
struct object_cache_entry *entry, *old;
@@ -653,14 +672,7 @@ static void add_to_object_cache(struct object_cache *oc, uint32_t idx)
}
pthread_rwlock_unlock(&oc->lock);
- if (sys->cache_size &&
- uatomic_read(&sys_cache.cache_size) > sys->cache_size &&
- !cache_in_reclaim(1)) {
- struct work *work = xzalloc(sizeof(struct work));
- work->fn = reclaim_work;
- work->done = reclaim_done;
- queue_work(sys->reclaim_wqueue, work);
- }
+ object_cache_try_to_reclaim();
}
static int object_cache_lookup(struct object_cache *oc, uint32_t idx,
diff --git a/sheep/ops.c b/sheep/ops.c
index 2869504..6c92575 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -509,6 +509,8 @@ static int local_set_cache_size(const struct sd_req *req, struct sd_rsp *rsp,
uatomic_set(&sys->cache_size, cache_size);
dprintf("Max cache size set to %dM\n", cache_size);
+ object_cache_try_to_reclaim();
+
return SD_RES_SUCCESS;
}
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 2090d67..c4225ea 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -335,6 +335,7 @@ int peer_remove_obj(struct request *req);
int bypass_object_cache(struct request *req);
int object_is_cached(uint64_t oid);
+void object_cache_try_to_reclaim(void);
int object_cache_handle_request(struct request *req);
int object_cache_write(uint64_t oid, char *data, unsigned int datalen,
uint64_t offset, uint16_t flags, int create);
--
1.7.1
More information about the sheepdog
mailing list