]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: Switch from libzbc library to libzbd library
authorAbutalib Aghayev <agayev@cs.cmu.edu>
Wed, 2 Sep 2020 20:12:50 +0000 (16:12 -0400)
committerAbutalib Aghayev <agayev@cs.cmu.edu>
Sun, 6 Sep 2020 16:35:05 +0000 (12:35 -0400)
Libzbc maintainers recommend switching to libzbd, which is lighter and supports
both ZNS SSDs and HM-SMR HDDs.

Signed-off-by: Abutalib Aghayev <agayev@cs.cmu.edu>
CMakeLists.txt
cmake/modules/Findzbc.cmake [deleted file]
cmake/modules/Findzbd.cmake [new file with mode: 0644]
src/blk/BlockDevice.cc
src/blk/BlockDevice.h
src/blk/CMakeLists.txt
src/blk/zoned/HMSMRDevice.cc
src/include/config-h.in.cmake
src/os/CMakeLists.txt
src/os/bluestore/Allocator.cc
src/os/bluestore/FreelistManager.cc

index f444ed724c093e57c398799e90d1f27f497d52be..05cba03369421ed293586228275550c486c1ddb7 100644 (file)
@@ -183,8 +183,8 @@ if(WITH_BLUESTORE)
   if(LINUX)
     find_package(aio)
     set(HAVE_LIBAIO ${AIO_FOUND})
-    find_package(zbc)
-    set(HAVE_LIBZBC ${ZBC_FOUND})
+    find_package(zbd)
+    set(HAVE_LIBZBD ${ZBD_FOUND})
   elseif(FREEBSD)
     # POSIX AIO is integrated into FreeBSD kernel, and exposed by libc.
     set(HAVE_POSIXAIO ON)
diff --git a/cmake/modules/Findzbc.cmake b/cmake/modules/Findzbc.cmake
deleted file mode 100644 (file)
index 6049816..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# - Find ZBC
-#
-# ZBC_INCLUDE - Where to find zbc.h
-# ZBC_LIBRARIES - List of libraries when using zbc.
-# ZBC_FOUND - True if zbc found.
-
-find_path(ZBC_INCLUDE_DIR
-  zbc.h
-  HINTS $ENV{ZBC_ROOT}/libzbc
-  PATH_SUFFIXES libzbc)
-
-find_library(ZBC_LIBRARIES
-  zbc
-  HINTS $ENV{ZBC_ROOT}/lib)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(zbc DEFAULT_MSG ZBC_LIBRARIES ZBC_INCLUDE_DIR)
-
-mark_as_advanced(ZBC_INCLUDE_DIR ZBC_LIBRARIES)
diff --git a/cmake/modules/Findzbd.cmake b/cmake/modules/Findzbd.cmake
new file mode 100644 (file)
index 0000000..f4b23ef
--- /dev/null
@@ -0,0 +1,19 @@
+# - Find ZBD
+#
+# ZBD_INCLUDE - Where to find zbd.h
+# ZBD_LIBRARIES - List of libraries when using zbd.
+# ZBD_FOUND - True if zbd found.
+
+find_path(ZBD_INCLUDE_DIR
+  zbd.h
+  HINTS $ENV{ZBD_ROOT}/libzbd
+  PATH_SUFFIXES libzbd)
+
+find_library(ZBD_LIBRARIES
+  zbd
+  HINTS $ENV{ZBD_ROOT}/lib)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(zbd DEFAULT_MSG ZBD_LIBRARIES ZBD_INCLUDE_DIR)
+
+mark_as_advanced(ZBD_INCLUDE_DIR ZBD_LIBRARIES)
index 4f1fdae3bd83d44cc484d38e1e2cac73221740dd..345d51fdb09f5def7574560a259db154423434da 100644 (file)
@@ -31,7 +31,7 @@
 #include "pmem/PMEMDevice.h"
 #endif
 
-#if defined(HAVE_LIBZBC)
+#if defined(HAVE_LIBZBD)
 #include "zoned/HMSMRDevice.h"
 #endif
 
@@ -99,7 +99,7 @@ BlockDevice::detect_device_type(const std::string& path)
     return block_device_t::pmem;
   }
 #endif
-#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBC)
+#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBD)
   if (HMSMRDevice::support(path)) {
     return block_device_t::hm_smr;
   }
@@ -126,7 +126,7 @@ BlockDevice::device_type_from_name(const std::string& blk_dev_name)
     return block_device_t::pmem;
   }
 #endif
-#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBC)
+#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBD)
   if (blk_dev_name == "hm_smr") {
     return block_device_t::hm_smr;
   }
@@ -152,7 +152,7 @@ BlockDevice* BlockDevice::create_with_type(block_device_t device_type,
   case block_device_t::pmem:
     return new PMEMDevice(cct, cb, cbpriv);
 #endif
-#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBC)
+#if (defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)) && defined(HAVE_LIBZBD)
   case block_device_t::hm_smr:
     return new HMSMRDevice(cct, cb, cbpriv, d_cb, d_cbpriv);
 #endif
index 3123c8aece8e4c8a405dac51ba9b62ca59c2d6e6..8ed53e69266c76102dce6e51c5519b7f13d287cb 100644 (file)
@@ -140,7 +140,7 @@ private:
     unknown,
 #if defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)
     aio,
-#if defined(HAVE_LIBZBC)
+#if defined(HAVE_LIBZBD)
     hm_smr,
 #endif
 #endif
index 24ea60ecf6e8e4c990637bf219abf59c87a0aabd..586a9b2628b84ce2e70f6fabd39328e640af7b18 100644 (file)
@@ -20,7 +20,7 @@ if(WITH_SPDK)
     spdk/NVMEDevice.cc)
 endif()
 
-if(HAVE_LIBZBC)
+if(HAVE_LIBZBD)
   list(APPEND libblk_srcs
     zoned/HMSMRDevice.cc)
 endif()
@@ -36,8 +36,8 @@ if(WITH_SPDK)
   target_link_libraries(blk PRIVATE ${SPDK_LIBRARIES})
 endif()
 
-if(HAVE_LIBZBC)
-  target_link_libraries(blk PRIVATE ${ZBC_LIBRARIES})
+if(HAVE_LIBZBD)
+  target_link_libraries(blk PRIVATE ${ZBD_LIBRARIES})
 endif()
 
 if(WITH_BLUESTORE_PMEM OR WITH_RBD_RWL)
index 60a2e44a525c8a4eb6381340cc7a21337a212f2d..867c9df43b3d9e657313d359dacefe606f5c48d2 100644 (file)
@@ -37,7 +37,7 @@
 #include "kernel/io_uring.h"
 
 extern "C" {
-#include <libzbc/zbc.h>
+#include <libzbd/zbd.h>
 }
 
 #define dout_context cct
@@ -78,7 +78,7 @@ HMSMRDevice::HMSMRDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_
 
 bool HMSMRDevice::support(const std::string& path)
 {
-  return zbc_device_is_zoned(path.c_str(), false, nullptr) == 1;
+  return zbd_device_is_zoned(path.c_str()) == 1;
 }
 
 int HMSMRDevice::_lock()
@@ -95,23 +95,23 @@ int HMSMRDevice::_lock()
 bool HMSMRDevice::set_smr_params(const std::string& path) {
   dout(10) << __func__ << " opening " << path << dendl;
 
-  zbc_device *dev;
-  if (zbc_open(path.c_str(), O_RDWR | O_DIRECT, &dev) != 0) {
+  int dev = zbd_open(path.c_str(), O_RDWR | O_DIRECT | O_LARGEFILE, nullptr);
+  if (dev < 0) {
     return false;
   }
-  auto close_dev = make_scope_guard([dev] { zbc_close(dev); });
+  auto close_dev = make_scope_guard([dev] { zbd_close(dev); });
 
   unsigned int nr_zones = 0;
-  if (zbc_report_nr_zones(dev, 0, ZBC_RO_NOT_WP, &nr_zones) != 0) {
+  if (zbd_report_nr_zones(dev, 0, 0, ZBD_RO_NOT_WP, &nr_zones) != 0) {
     return false;
   }
 
-  std::vector<zbc_zone> zones(nr_zones);
-  if (zbc_report_zones(dev, 0, ZBC_RO_NOT_WP, zones.data(), &nr_zones) != 0) {
+  std::vector<zbd_zone> zones(nr_zones);
+  if (zbd_report_zones(dev, 0, 0, ZBD_RO_NOT_WP, zones.data(), &nr_zones) != 0) {
     return false;
   }
 
-  zone_size = 512 * zbc_zone_length(&zones[0]); // on HM-SMR zones are equisized
+  zone_size = zbd_zone_len(&zones[0]);
   conventional_region_size = nr_zones * zone_size;
 
   dout(10) << __func__ << " setting zone size to " << zone_size
index 1ea3703f620c0c6209bc6d79ed932398cb58e177..c612ab8a6a2a18ad1542494eb3efddbf7df68c0a 100644 (file)
@@ -75,8 +75,8 @@
 /* Defined if you have libaio */
 #cmakedefine HAVE_LIBAIO
 
-/* Defined if you have libzbc */
-#cmakedefine HAVE_LIBZBC
+/* Defined if you have libzbd */
+#cmakedefine HAVE_LIBZBD
 
 /* Defined if you have liburing */
 #cmakedefine HAVE_LIBURING
index 678c2bfd5d6a0d006771a6ba47c896fdd3975385..375811a68043878c9f573bea7d8684c5b854f3c0 100644 (file)
@@ -37,7 +37,7 @@ if(WITH_BLUESTORE)
   )
 endif(WITH_BLUESTORE)
 
-if(HAVE_LIBZBC)
+if(HAVE_LIBZBD)
   list(APPEND libos_srcs
     bluestore/zoned_types.cc
     bluestore/ZonedFreelistManager.cc
index 5cd5d3b5ca8383131a846c0a5e4517006fd4ca50..eaabccfe56536419f48dd936a2dd78499dc7b720 100644 (file)
@@ -6,7 +6,7 @@
 #include "BitmapAllocator.h"
 #include "AvlAllocator.h"
 #include "HybridAllocator.h"
-#ifdef HAVE_LIBZBC
+#ifdef HAVE_LIBZBD
 #include "ZonedAllocator.h"
 #endif
 #include "common/debug.h"
@@ -128,7 +128,7 @@ Allocator *Allocator::create(CephContext* cct, string type,
     return new HybridAllocator(cct, size, block_size,
       cct->_conf.get_val<uint64_t>("bluestore_hybrid_alloc_mem_cap"),
       name);
-#ifdef HAVE_LIBZBC
+#ifdef HAVE_LIBZBD
   } else if (type == "zoned") {
     return new ZonedAllocator(cct, size, block_size, name);
 #endif
index 652cb9251ba1211dc76d0c1d704c78b2001bd0e2..5907df443e00b9a7134f6a569a7d86c3a2aa1413 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "FreelistManager.h"
 #include "BitmapFreelistManager.h"
-#ifdef HAVE_LIBZBC
+#ifdef HAVE_LIBZBD
 #include "ZonedFreelistManager.h"
 #endif
 
@@ -20,7 +20,7 @@ FreelistManager *FreelistManager::create(
   if (type == "bitmap")
     return new BitmapFreelistManager(cct, "B", "b");
 
-#ifdef HAVE_LIBZBC
+#ifdef HAVE_LIBZBD
   // With zoned drives there is only one FreelistManager implementation that we
   // can use, and we also know if a drive is zoned right after opening it
   // (BlueStore::_open_bdev).  Hence, we set freelist_type to "zoned" whenever
@@ -37,7 +37,7 @@ FreelistManager *FreelistManager::create(
 void FreelistManager::setup_merge_operators(KeyValueDB *db,
                                            const std::string& type)
 {
-#ifdef HAVE_LIBZBC
+#ifdef HAVE_LIBZBD
   if (type == "zoned")
     ZonedFreelistManager::setup_merge_operator(db, "z");
   else