From: Sage Weil Date: Wed, 7 Sep 2016 20:46:57 +0000 (-0400) Subject: os/bluestore: do not waste memory on cached encoded blobs X-Git-Tag: v11.0.1~298^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F11011%2Fhead;p=ceph.git os/bluestore: do not waste memory on cached encoded blobs Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 120294bcc465..e50f899b8198 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 5da333d17a78..f0203c930b98 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;