Option("immutable_object_cache_max_inflight_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
.set_default(128)
- .set_description("max immutable object caching inflight ops"),
+ .set_description("max inflight promoting requests for immutable object cache daemon"),
Option("immutable_object_cache_client_dedicated_thread_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
.set_default(2)
static void SetUpTestCase() {}
static void TearDownTestCase() {}
void SetUp() override {
- m_simple_policy = new SimplePolicy(g_ceph_context, m_cache_size, 0.1);
+ m_simple_policy = new SimplePolicy(g_ceph_context, m_cache_size, 128, 0.1);
// populate 50 entries
for (uint64_t i = 0; i < m_cache_size / 2; i++, m_entry_index++) {
insert_entry_into_promoted_lru(generate_file_name(m_entry_index));
ObjectCacheStore::ObjectCacheStore(CephContext *cct)
: m_cct(cct), m_rados(new librados::Rados()),
m_ioctx_map_lock("ceph::cache::ObjectCacheStore::m_ioctx_map_lock") {
- m_object_cache_max_size =
- m_cct->_conf.get_val<Option::size_t>("immutable_object_cache_max_size");
m_cache_root_dir =
m_cct->_conf.get_val<std::string>("immutable_object_cache_path");
- m_cache_watermark =
- m_cct->_conf.get_val<double>("immutable_object_cache_watermark");
-
if (m_cache_root_dir.back() != '/') {
m_cache_root_dir += "/";
}
- m_policy = new SimplePolicy(m_cct, m_object_cache_max_size,
- m_cache_watermark);
+ uint64_t cache_max_size =
+ m_cct->_conf.get_val<Option::size_t>("immutable_object_cache_max_size");
+
+ double cache_watermark =
+ m_cct->_conf.get_val<double>("immutable_object_cache_watermark");
+
+ uint64_t max_inflight_ops =
+ m_cct->_conf.get_val<uint64_t>("immutable_object_cache_max_inflight_ops");
+
+ m_policy = new SimplePolicy(m_cct, cache_max_size, max_inflight_ops,
+ cache_watermark);
}
ObjectCacheStore::~ObjectCacheStore() {
// update metadata
ceph_assert(OBJ_CACHE_SKIP == m_policy->get_status(cache_file_name));
- m_policy->update_status(cache_file_name, OBJ_CACHE_PROMOTED, ret);
+ m_policy->update_status(cache_file_name, OBJ_CACHE_PROMOTED, read_buf->length());
ceph_assert(OBJ_CACHE_PROMOTED == m_policy->get_status(cache_file_name));
delete read_buf;
std::map<uint64_t, librados::IoCtx> m_ioctx_map;
Mutex m_ioctx_map_lock;
Policy* m_policy;
- uint64_t m_object_cache_max_size;
- float m_cache_watermark;
std::string m_cache_root_dir;
};
namespace immutable_obj_cache {
SimplePolicy::SimplePolicy(CephContext *cct, uint64_t cache_size,
- float watermark)
- : cct(cct), m_watermark(watermark), m_max_cache_size(cache_size),
+ uint64_t max_inflight, double watermark)
+ : cct(cct), m_watermark(watermark), m_max_inflight_ops(max_inflight),
+ m_max_cache_size(cache_size),
m_cache_map_lock("rbd::cache::SimplePolicy::m_cache_map_lock") {
- ldout(cct, 20) << dendl;
- m_max_inflight_ops = cct->_conf.get_val<uint64_t>(
- "immutable_object_cache_max_inflight_ops");
+
+ ldout(cct, 20) << "max cache size= " << m_max_cache_size
+ << " ,watermark= " << m_watermark
+ << " ,max inflight ops= " << m_max_inflight_ops << dendl;
+
m_cache_size = 0;
+
}
SimplePolicy::~SimplePolicy() {
class SimplePolicy : public Policy {
public:
- SimplePolicy(CephContext *cct, uint64_t block_num, float watermark);
+ SimplePolicy(CephContext *cct, uint64_t block_num, uint64_t max_inflight,
+ double watermark);
~SimplePolicy();
cache_status_t lookup_object(std::string file_name);
};
CephContext* cct;
- float m_watermark;
+ double m_watermark;
uint64_t m_max_inflight_ops;
uint64_t m_max_cache_size;
std::atomic<uint64_t> inflight_ops = 0;