At Wed, 25 Jul 2012 20:15:16 +0800, levin li wrote: > > From: levin li <xingke.lwp at taobao.com> > > v1 ----> v2: > 1. Merge the object tree and the dirty tree to make them share the cached entries. > 2. remove check_cache_object_sanity() > 3. remove the dirty flags using the bmap instead to check whether the entry is dirty. > > This patchset is to reclaim the cached object when the cache size reaches > to max size specified by use in command line, the usage is like: > > #sheep/sheep -w -W 100 -d /home/levin/store/0 -p 7000 -z 0 > > As the example above, we specified the max cache size to 100M. > > I add a object tree for each VDI to store all the cached entries, which are > shared with the dirty tree, and a lru list implemented by rculist for cache > scheduling, when a cached object is accessed(read or write), it's moved to > the head of the list, and when the cache size reaches the max cache size, we > start to reclaim the cached object and the relative cache entry to 80% of the > max size. > > Every time we create a new cached object, we create a new cache entry at the same > time, so next time we check whether the cache is exist, we don't just goto disk > using open(), but we find in the cached object tree to find whether the object > is being cached. > > We didn't do reclaim work in the following case: > 1. There's already an existing reclaim work. > 2. The object to be reclaimed is being accessed. > 3. The cache is flushing. > > levin li (9): > configure: add micro _LGPL_SOURCE to make sheep use liburcu > sheep: add cmd argument -W to specify a max cache size > object cache: add object cache tree for every VDI > object cache: merge active and inactive dirt_tree/list > object cache: use rwlock to replace mutex lock for per-vdi cache > object cache: schedule the object cache in a lru list > object cache: reclaim cached objects when cache reaches the max size > object cache: refactor object_cache_remove() > object cache: add a object_list for cache entry for cache deleting > > configure.ac | 2 +- > include/sheepdog_proto.h | 1 + > sheep/object_cache.c | 766 ++++++++++++++++++++++++++++++++++++---------- > sheep/sheep.c | 19 +- > sheep/sheep_priv.h | 3 + > sheep/store.c | 8 + > 6 files changed, 642 insertions(+), 157 deletions(-) Applied the first one since it is not relevant to object cache reclaiming. The other patches seem to need more reivews, I think. Thanks, Kazutaka |