summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-09-19 08:48:07 -0700
committerSage Weil <sage@inktank.com>2013-10-02 16:53:08 -0700
commitd05ce45f80ea804e9682f06c430c901155060263 (patch)
treed76f5870391f5312a0b68122c675823af3406e24
parentadc14b91c54d555aa73cdcdcc8e7e859fe6e30c5 (diff)
downloadceph-d05ce45f80ea804e9682f06c430c901155060263.tar.gz
osd: add bloom_[fpp,period] to pg_pool_t
Add pool properties to control what type of bloom filter the OSD should track for each PG. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/osd_types.cc25
-rw-r--r--src/osd/osd_types.h15
2 files changed, 36 insertions, 4 deletions
diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc
index aa20dc592fa..cda487617bf 100644
--- a/src/osd/osd_types.cc
+++ b/src/osd/osd_types.cc
@@ -694,6 +694,9 @@ void pg_pool_t::dump(Formatter *f) const
f->dump_string(name.c_str(), i->second);
}
f->close_section();
+ f->dump_unsigned("bloom_false_positive_probability", get_bloom_fpp());
+ f->dump_unsigned("bloom_period", bloom_period);
+ f->dump_unsigned("bloom_count", bloom_count);
}
@@ -898,7 +901,7 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const
return;
}
- ENCODE_START(10, 5, bl);
+ ENCODE_START(11, 5, bl);
::encode(type, bl);
::encode(size, bl);
::encode(crush_ruleset, bl);
@@ -926,12 +929,15 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const
::encode(read_tier, bl);
::encode(write_tier, bl);
::encode(properties, bl);
+ ::encode(bloom_fpp_micro, bl);
+ ::encode(bloom_period, bl);
+ ::encode(bloom_count, bl);
ENCODE_FINISH(bl);
}
void pg_pool_t::decode(bufferlist::iterator& bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(7, 5, 5, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(11, 5, 5, bl);
::decode(type, bl);
::decode(size, bl);
::decode(crush_ruleset, bl);
@@ -996,6 +1002,15 @@ void pg_pool_t::decode(bufferlist::iterator& bl)
if (struct_v >= 10) {
::decode(properties, bl);
}
+ if (struct_v >= 11) {
+ ::decode(bloom_fpp_micro, bl);
+ ::decode(bloom_period, bl);
+ ::decode(bloom_count, bl);
+ } else {
+ bloom_fpp_micro = 0;
+ bloom_period = 0;
+ bloom_count = 0;
+ }
DECODE_FINISH(bl);
calc_pg_masks();
}
@@ -1039,6 +1054,9 @@ void pg_pool_t::generate_test_instances(list<pg_pool_t*>& o)
a.write_tier = 1;
a.properties["p-1"] = "v-1";
a.properties["empty"] = string();
+ a.bloom_fpp_micro = 6000;
+ a.bloom_period = 3600;
+ a.bloom_count = 8;
o.push_back(new pg_pool_t(a));
}
@@ -1071,6 +1089,9 @@ ostream& operator<<(ostream& out, const pg_pool_t& p)
out << " write_tier " << p.write_tier;
if (p.cache_mode)
out << " cache_mode " << p.get_cache_mode_name();
+ if (p.bloom_count) {
+ out << " bloom " << p.get_bloom_fpp() << "% " << p.bloom_period << "s x" << p.bloom_count;
+ }
return out;
}
diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h
index 091b2b95e8f..1babd58dc12 100644
--- a/src/osd/osd_types.h
+++ b/src/osd/osd_types.h
@@ -856,7 +856,6 @@ public:
int64_t write_tier; ///< pool/tier for objecter to direct writes to
cache_mode_t cache_mode; ///< cache pool mode
-
bool is_tier() const { return tier_of >= 0; }
void clear_tier() { tier_of = -1; }
bool has_read_tier() const { return read_tier >= 0; }
@@ -864,6 +863,10 @@ public:
bool has_write_tier() const { return write_tier >= 0; }
void clear_write_tier() { write_tier = -1; }
+ uint32_t bloom_period; ///< periodicity of bloom filter segments (seconds)
+ uint32_t bloom_count; ///< number of periods to retain
+ uint16_t bloom_fpp_micro; ///< if non-zero, the target false positive probability * 1000000
+
pg_pool_t()
: flags(0), type(0), size(0), min_size(0),
crush_ruleset(0), object_hash(0),
@@ -875,7 +878,10 @@ public:
quota_max_bytes(0), quota_max_objects(0),
pg_num_mask(0), pgp_num_mask(0),
tier_of(-1), read_tier(-1), write_tier(-1),
- cache_mode(CACHEMODE_NONE)
+ cache_mode(CACHEMODE_NONE),
+ bloom_period(0),
+ bloom_count(0),
+ bloom_fpp_micro(0)
{ }
void dump(Formatter *f) const;
@@ -930,6 +936,11 @@ public:
return quota_max_objects;
}
+ /// get bloom filter fpp
+ float get_bloom_fpp() const {
+ return (float)bloom_fpp_micro / 1000000.0;
+ }
+
static int calc_bits_of(int t);
void calc_pg_masks();