]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: trim SSD devices on mkfs 20897/head
authorIgor Fedotov <ifedotov@suse.com>
Wed, 14 Mar 2018 12:42:34 +0000 (15:42 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Wed, 14 Mar 2018 14:46:17 +0000 (17:46 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueFS.h
src/os/bluestore/BlueStore.cc
src/os/bluestore/KernelDevice.cc
src/os/bluestore/bluestore_tool.cc
src/test/objectstore/test_bluefs.cc

index 35b4be35b85581c23f658ec4e7b63cba974cf240..c2e96a31140ba124275607b51e2c7ff17d0a5753 100644 (file)
@@ -148,7 +148,7 @@ void BlueFS::_update_logger_stats()
   }
 }
 
-int BlueFS::add_block_device(unsigned id, const string& path)
+int BlueFS::add_block_device(unsigned id, const string& path, bool trim)
 {
   dout(10) << __func__ << " bdev " << id << " path " << path << dendl;
   assert(id < bdev.size());
@@ -159,6 +159,10 @@ int BlueFS::add_block_device(unsigned id, const string& path)
     delete b;
     return r;
   }
+  if (trim) {
+    b->discard(0, b->get_size());
+  }
+
   dout(1) << __func__ << " bdev " << id << " path " << path
          << " size " << pretty_si_t(b->get_size()) << "B" << dendl;
   bdev[id] = b;
index a176a5bb689ba26fd95f5080fb78f455b6466bb2..98714a8b8e14a874c5e81e27ea70ed2ff57ca56f 100644 (file)
@@ -396,7 +396,7 @@ public:
   /// sync any uncommitted state to disk
   void sync_metadata();
 
-  int add_block_device(unsigned bdev, const string& path);
+  int add_block_device(unsigned bdev, const string& path, bool trim);
   bool bdev_support_label(unsigned id);
   uint64_t get_block_device_size(unsigned bdev);
 
index 71ad7267e644e4084d78d76011df2944e38371dc..7fdc2483a865278ac3a2ad99eac3c016f376cc95 100644 (file)
@@ -4315,11 +4315,17 @@ int BlueStore::_open_bdev(bool create)
 {
   assert(bdev == NULL);
   string p = path + "/block";
+  uint64_t dev_size;
   bdev = BlockDevice::create(cct, p, aio_cb, static_cast<void*>(this), discard_cb, static_cast<void*>(this));
   int r = bdev->open(p);
   if (r < 0)
     goto fail;
 
+  dev_size = bdev->get_size();
+  if (create && cct->_conf->bdev_enable_discard) {
+    bdev->discard(0, dev_size);
+  }
+
   if (bdev->supported_bdev_label()) {
     r = _check_or_set_bdev_label(p, bdev->get_size(), "main", create);
     if (r < 0)
@@ -4336,8 +4342,8 @@ int BlueStore::_open_bdev(bool create)
   if (r < 0) {
     goto fail_close;
   }
-  if (bdev->get_size() < cct->_conf->bluestore_bluefs_min) {
-    dout(1) << __func__ << " main device size " << si_t(bdev->get_size())
+  if (dev_size < cct->_conf->bluestore_bluefs_min) {
+    dout(1) << __func__ << " main device size " << si_t(dev_size)
             << " is too small, disable bluestore_bluefs_min for now"
             << dendl;
     int r = cct->_conf->set_val("bluestore_bluefs_min", "0");
@@ -4721,7 +4727,8 @@ int BlueStore::_open_db(bool create, bool to_repair_db)
       bfn = path + "/block.db";
     }
     if (::stat(bfn.c_str(), &st) == 0) {
-      r = bluefs->add_block_device(BlueFS::BDEV_DB, bfn);
+      r = bluefs->add_block_device(BlueFS::BDEV_DB, bfn,
+           create && cct->_conf->bdev_enable_discard);
       if (r < 0) {
         derr << __func__ << " add block device(" << bfn << ") returned: " 
              << cpp_strerror(r) << dendl;
@@ -4761,7 +4768,8 @@ int BlueStore::_open_db(bool create, bool to_repair_db)
     if (read_meta("path_block", &bfn) < 0) {
       bfn = path + "/block";
     }
-    r = bluefs->add_block_device(bluefs_shared_bdev, bfn);
+     // never trim here
+    r = bluefs->add_block_device(bluefs_shared_bdev, bfn, false);
     if (r < 0) {
       derr << __func__ << " add block device(" << bfn << ") returned: " 
           << cpp_strerror(r) << dendl;
@@ -4793,7 +4801,8 @@ int BlueStore::_open_db(bool create, bool to_repair_db)
       bfn = path + "/block.wal";
     }
     if (::stat(bfn.c_str(), &st) == 0) {
-      r = bluefs->add_block_device(BlueFS::BDEV_WAL, bfn);
+      r = bluefs->add_block_device(BlueFS::BDEV_WAL, bfn,
+       create && cct->_conf->bdev_enable_discard);
       if (r < 0) {
         derr << __func__ << " add block device(" << bfn << ") returned: " 
             << cpp_strerror(r) << dendl;
index 30cea5c6f0613f772b246e66dc0abb23dbeaa26a..4f5bf1481973b26042c02bec542b3f6cc116d8f5 100644 (file)
@@ -751,8 +751,13 @@ int KernelDevice::aio_write(
 int KernelDevice::discard(uint64_t offset, uint64_t len)
 {
   int r = 0;
-  if (!rotational)
+  if (!rotational) {
+      dout(10) << __func__
+              << " 0x" << std::hex << offset << "~" << len << std::dec
+              << dendl;
+
     r = block_device_discard(fd_direct, (int64_t)offset, (int64_t)len);
+  }
   return r;
 }
 
index f5c02bc1c6e4bb1f749288e73ec0f4057e6450af..4b4994cc3084933db8111ad695706b6726434723 100644 (file)
@@ -91,7 +91,7 @@ void add_devices(
     if (id >= 0) {
       got.insert(id);
       cout << " slot " << id << " " << i << std::endl;
-      int r = fs->add_block_device(id, i);
+      int r = fs->add_block_device(id, i, false);
       if (r < 0) {
        cerr << "unable to open " << i << ": " << cpp_strerror(r) << std::endl;
        exit(EXIT_FAILURE);
@@ -103,7 +103,7 @@ void add_devices(
     if (got.count(BlueFS::BDEV_DB))
       id = BlueFS::BDEV_SLOW;
     cout << " slot " << id << " " << main << std::endl;
-    int r = fs->add_block_device(id, main);
+    int r = fs->add_block_device(id, main, false);
     if (r < 0) {
       cerr << "unable to open " << main << ": " << cpp_strerror(r)
           << std::endl;
index 0b2f2df70197637242066e068bb7934374dde83d..6a9c22dcad326aa57c420b3c5de8936d3e269aac 100644 (file)
@@ -49,7 +49,7 @@ TEST(BlueFS, mkfs) {
   string fn = get_temp_bdev(size);
   uuid_d fsid;
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   ASSERT_EQ(0, fs.mkfs(fsid));
   rm_temp_bdev(fn);
@@ -59,7 +59,7 @@ TEST(BlueFS, mkfs_mount) {
   uint64_t size = 1048576 * 128;
   string fn = get_temp_bdev(size);
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -74,7 +74,7 @@ TEST(BlueFS, write_read) {
   uint64_t size = 1048576 * 128;
   string fn = get_temp_bdev(size);
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -106,7 +106,7 @@ TEST(BlueFS, small_appends) {
   uint64_t size = 1048576 * 128;
   string fn = get_temp_bdev(size);
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -255,7 +255,7 @@ TEST(BlueFS, test_flush_1) {
   g_ceph_context->_conf->apply_changes(NULL);
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -290,7 +290,7 @@ TEST(BlueFS, test_flush_2) {
   g_ceph_context->_conf->apply_changes(NULL);
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -318,7 +318,7 @@ TEST(BlueFS, test_flush_3) {
   g_ceph_context->_conf->apply_changes(NULL);
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -352,7 +352,7 @@ TEST(BlueFS, test_simple_compaction_sync) {
   string fn = get_temp_bdev(size);
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -405,7 +405,7 @@ TEST(BlueFS, test_simple_compaction_async) {
   string fn = get_temp_bdev(size);
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -461,7 +461,7 @@ TEST(BlueFS, test_compaction_sync) {
     "true");
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -499,7 +499,7 @@ TEST(BlueFS, test_compaction_async) {
     "false");
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));
@@ -537,7 +537,7 @@ TEST(BlueFS, test_replay) {
     "false");
 
   BlueFS fs(g_ceph_context);
-  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn));
+  ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, fn, false));
   fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
   uuid_d fsid;
   ASSERT_EQ(0, fs.mkfs(fsid));