[sheepdog] [PATCH] object cache: optimize thread scheduling
Liu Yuan
namei.unix at gmail.com
Fri Aug 3 04:33:29 CEST 2012
From: Liu Yuan <tailai.ly at taobao.com>
Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
sheep/object_cache.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/sheep/object_cache.c b/sheep/object_cache.c
index 4e04758..814b528 100644
--- a/sheep/object_cache.c
+++ b/sheep/object_cache.c
@@ -437,6 +437,12 @@ static int do_reclaim_object(struct object_cache_entry *entry)
del_from_object_tree_and_list(entry, &oc->object_tree);
out:
pthread_rwlock_unlock(&oc->lock);
+ /*
+ * Reclaimer grabs a write lock, which will blocks all the IO thread of
+ * this VDI. We call pthread_yield() to expect that other threads can
+ * grab the lock more often.
+ */
+ pthread_yield();
return ret;
}
@@ -980,7 +986,13 @@ retry:
entry = get_cache_entry(cache, idx);
if (!entry) {
- dprintf("oid %"PRIx64" maybe reclaimed\n", oid);
+ dprintf("retry oid %"PRIx64"\n", oid);
+ /*
+ * For the case that object exists but can't be added to list,
+ * we call pthread_yield() to expect other thread can add object
+ * to list ASAP.
+ */
+ pthread_yield();
goto retry;
}
--
1.7.10.2
More information about the sheepdog
mailing list