]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: add bluestore_bluefs_min_free 18128/head
authorSage Weil <sage@redhat.com>
Tue, 3 Oct 2017 16:18:17 +0000 (11:18 -0500)
committerSage Weil <sage@redhat.com>
Thu, 5 Oct 2017 21:01:33 +0000 (16:01 -0500)
We need at least ~1GB free so we can write out new SSTs (which are 256MB
each).

Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 65be614f2bfd65a1f13205a3075c87acc72c4836)

(avoided 1_G syntax that luminous doesn't support)

src/common/options.cc
src/os/bluestore/BlueStore.cc

index cb4aadb47cdf8ba958c4b812ed93dba65b2714c9..cdf48a36bfc21b1ecda0f8986db7db7bc05a4e36 100644 (file)
@@ -3117,6 +3117,10 @@ std::vector<Option> get_global_options() {
     .set_default(1*1024*1024*1024)
     .set_description("minimum disk space allocated to BlueFS (e.g., at mkfs)"),
 
+    Option("bluestore_bluefs_min_free", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
+    .set_default(1*1024*1024*1024)
+    .set_description("minimum free space allocated to BlueFS"),
+
     Option("bluestore_bluefs_min_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
     .set_default(.02)
     .set_description("Minimum fraction of free space devoted to BlueFS"),
index e8e3e29b43fae45334935784fdeaeca9566a264d..e33d0b1dd3bb2e64be8cc7764e33b2b71fe9c408 100644 (file)
@@ -4817,9 +4817,11 @@ int BlueStore::_balance_bluefs_freespace(PExtentVector *extents)
             << " > max_ratio " << cct->_conf->bluestore_bluefs_max_ratio
             << ", should reclaim " << pretty_si_t(reclaim) << dendl;
   }
+
+  // don't take over too much of the freespace
+  uint64_t free_cap = cct->_conf->bluestore_bluefs_max_ratio * total_free;
   if (bluefs_total < cct->_conf->bluestore_bluefs_min &&
-    cct->_conf->bluestore_bluefs_min <
-      (uint64_t)(cct->_conf->bluestore_bluefs_max_ratio * total_free)) {
+      cct->_conf->bluestore_bluefs_min < free_cap) {
     uint64_t g = cct->_conf->bluestore_bluefs_min - bluefs_total;
     dout(10) << __func__ << " bluefs_total " << bluefs_total
             << " < min " << cct->_conf->bluestore_bluefs_min
@@ -4828,6 +4830,17 @@ int BlueStore::_balance_bluefs_freespace(PExtentVector *extents)
       gift = g;
     reclaim = 0;
   }
+  uint64_t min_free = cct->_conf->get_val<uint64_t>("bluestore_bluefs_min_free");
+  if (bluefs_free < min_free &&
+      min_free < free_cap) {
+    uint64_t g = min_free - bluefs_free;
+    dout(10) << __func__ << " bluefs_free " << bluefs_total
+            << " < min " << min_free
+            << ", should gift " << pretty_si_t(g) << dendl;
+    if (g > gift)
+      gift = g;
+    reclaim = 0;
+  }
 
   if (gift) {
     // round up to alloc size