Bug #22410
Updated by Mark Kogan over 6 years ago
Details and analysis: valgrind massif shown the following information: <pre> -------------------------------------------------------------------------------- n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 65 4,708,134,638,372 2,339,301,056 2,141,918,346 197,382,710 0 91.56% (2,141,918,346B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc. ->37.62% (880,128,000B) 0x4A439E: RGWChainedCacheImpl<bucket_info_entry>::chain_cb(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void*) (new_alloca | ->37.62% (880,128,000B) 0x5C13DF: ObjectCache::chain_cache_entry(std::__cxx11::list<rgw_cache_entry_info*, std::allocator<rgw_cache_entry_info*> >&, RGWChainedCache::Entry*) (rgw_cache.cc | ->37.62% (880,128,000B) 0x4486DC: RGWRados::get_bucket_info(RGWObjectCtx&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_st... </pre> Added a log in chain_cb(() (rgw_rados.h) <pre> void chain_cb(const string& key, void *data) override { T *entry = static_cast<T *>(data); RWLock::WLocker wl(lock); lsubdout(g_ceph_context, rgw, 10) << "#DEBUG# " << __func__ << " key='" << key << "' entries.size()=" << entries.size() << dendl; entries[key].first = *entry; if (expiry.count() > 0) { entries[key].second = ceph::coarse_mono_clock::now(); } } </pre> And indeed saw that the entries.size() was increasing above _conf->rgw_cache_lru_size (10000) 2017-12-12 03:38:46.426 4a5d1700 10 #DEBUG# chain_cb key='mycontainers754053' entries.size()=754053