From 662136f76a6aec9dbead9a312711475579cee1ed Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 7 Sep 2016 16:46:57 -0400 Subject: [PATCH] os/bluestore: do not waste memory on cached encoded blobs Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.h | 3 +++ src/os/bluestore/bluestore_types.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 120294bcc4651..e50f899b81988 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -473,6 +473,9 @@ public: void encode(bufferlist& bl) const { if (dirty) { + // manage blob_bl memory carefully + blob_bl.clear(); + blob_bl.reserve(blob.estimate_encoded_size()); ::encode(blob, blob_bl); dirty = false; } else { diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index 5da333d17a784..f0203c930b98b 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -303,6 +303,11 @@ struct bluestore_blob_t { bluestore_blob_t(uint32_t f = 0) : flags(f) {} + int estimate_encoded_size() const { + // conservative upper bound... fixme + return csum_data.length() + extents.size() * 16 + 48; + } + void encode(bufferlist& bl) const; void decode(bufferlist::iterator& p); void dump(Formatter *f) const; -- 2.39.5