f->dump_int("read_tier", read_tier);
f->dump_int("write_tier", write_tier);
f->dump_string("cache_mode", get_cache_mode_name());
+ f->dump_unsigned("target_max_bytes", target_max_bytes);
+ f->dump_unsigned("target_max_objects", target_max_objects);
+ f->dump_unsigned("cache_target_dirty_ratio_micro",
+ cache_target_dirty_ratio_micro);
+ f->dump_unsigned("cache_target_full_ratio_micro",
+ cache_target_full_ratio_micro);
+ f->dump_unsigned("cache_min_flush_age", cache_min_flush_age);
+ f->dump_unsigned("cache_min_evict_age", cache_min_evict_age);
f->open_object_section("properties");
for (map<string,string>::const_iterator i = properties.begin();
i != properties.end();
}
__u8 encode_compat = 5;
- ENCODE_START(12, encode_compat, bl);
+ ENCODE_START(13, encode_compat, bl);
::encode(type, bl);
::encode(size, bl);
::encode(crush_ruleset, bl);
::encode(hit_set_period, bl);
::encode(hit_set_count, bl);
::encode(stripe_width, bl);
+ ::encode(target_max_bytes, bl);
+ ::encode(target_max_objects, bl);
+ ::encode(cache_target_dirty_ratio_micro, bl);
+ ::encode(cache_target_full_ratio_micro, bl);
+ ::encode(cache_min_flush_age, bl);
+ ::encode(cache_min_evict_age, bl);
ENCODE_FINISH_NEW_COMPAT(bl, encode_compat);
}
void pg_pool_t::decode(bufferlist::iterator& bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(12, 5, 5, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(13, 5, 5, bl);
::decode(type, bl);
::decode(size, bl);
::decode(crush_ruleset, bl);
} else {
set_stripe_width(0);
}
+ if (struct_v >= 13) {
+ ::decode(target_max_bytes, bl);
+ ::decode(target_max_objects, bl);
+ ::decode(cache_target_dirty_ratio_micro, bl);
+ ::decode(cache_target_full_ratio_micro, bl);
+ ::decode(cache_min_flush_age, bl);
+ ::decode(cache_min_evict_age, bl);
+ } else {
+ pg_pool_t def;
+ target_max_bytes = def.target_max_bytes;
+ target_max_objects = def.target_max_objects;
+ cache_target_dirty_ratio_micro = def.cache_target_dirty_ratio_micro;
+ cache_target_full_ratio_micro = def.cache_target_full_ratio_micro;
+ cache_min_flush_age = def.cache_min_flush_age;
+ cache_min_evict_age = def.cache_min_evict_age;
+ }
+
DECODE_FINISH(bl);
calc_pg_masks();
}
a.hit_set_period = 3600;
a.hit_set_count = 8;
a.set_stripe_width(12345);
+ a.target_max_bytes = 1238132132;
+ a.target_max_objects = 1232132;
+ a.cache_target_dirty_ratio_micro = 187232;
+ a.cache_target_full_ratio_micro = 987222;
+ a.cache_min_flush_age = 231;
+ a.cache_min_evict_age = 2321;
o.push_back(new pg_pool_t(a));
}
out << " write_tier " << p.write_tier;
if (p.cache_mode)
out << " cache_mode " << p.get_cache_mode_name();
+ if (p.target_max_bytes)
+ out << " target_bytes " << p.target_max_bytes;
+ if (p.target_max_objects)
+ out << " target_objects " << p.target_max_objects;
if (p.hit_set_params.get_type() != HitSet::TYPE_NONE) {
out << " hit_set " << p.hit_set_params
<< " " << p.hit_set_period << "s"
bool has_write_tier() const { return write_tier >= 0; }
void clear_write_tier() { write_tier = -1; }
+ uint64_t target_max_bytes; ///< tiering: target max pool size
+ uint64_t target_max_objects; ///< tiering: target max pool size
+
+ uint32_t cache_target_dirty_ratio_micro; ///< cache: fraction of target to leave dirty
+ uint32_t cache_target_full_ratio_micro; ///< cache: fraction of target to fill before we evict in earnest
+
+ uint32_t cache_min_flush_age; ///< minimum age (seconds) before we can flush
+ uint32_t cache_min_evict_age; ///< minimum age (seconds) before we can evict
+
HitSet::Params hit_set_params; ///< The HitSet params to use on this pool
uint32_t hit_set_period; ///< periodicity of HitSet segments (seconds)
uint32_t hit_set_count; ///< number of periods to retain
pg_num_mask(0), pgp_num_mask(0),
tier_of(-1), read_tier(-1), write_tier(-1),
cache_mode(CACHEMODE_NONE),
+ target_max_bytes(0), target_max_objects(0),
+ cache_target_dirty_ratio_micro(400000),
+ cache_target_full_ratio_micro(800000),
+ cache_min_flush_age(0),
+ cache_min_evict_age(0),
hit_set_params(),
hit_set_period(0),
hit_set_count(0),