]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/zns: initialize segment_size and zones_per_segment correctly
authorAravind Ramesh <Aravind.Ramesh@wdc.com>
Tue, 28 Jun 2022 18:09:55 +0000 (23:39 +0530)
committerAravind Ramesh <Aravind.Ramesh@wdc.com>
Thu, 21 Jul 2022 10:11:17 +0000 (15:41 +0530)
In make_metadata(), update segment_size based on the zone size and log
the same information. Update metadata with zone size in bytes.

Signed-off-by: Aravind Ramesh <aravind.ramesh@wdc.com>
src/crimson/os/seastore/segment_manager/zns.cc
src/crimson/os/seastore/segment_manager/zns.h

index c0dc6d8a8c7b82091ac4d83d6793eff5e21b4a5d..a41c01eb21728a5bcebdfee0ecc9b668641ebe65 100644 (file)
@@ -12,6 +12,7 @@
 
 SET_SUBSYS(seastore_device);
 
+#define SECT_SHIFT 9
 namespace crimson::os::seastore::segment_manager::zns {
 
 using open_device_ret = ZNSSegmentManager::access_ertr::future<
@@ -53,31 +54,35 @@ static zns_sm_metadata_t make_metadata(
     "seastore_device_size");
   
   size_t size = (data.size == 0) ? config_size : data.size;
+  size_t segment_size = zone_size << SECT_SHIFT;
+  size_t zones_per_segment = segment_size / (zone_size << SECT_SHIFT);
+  size_t segments = (num_zones - 1) / zones_per_segment;
   
-  auto config_segment_size = get_conf<Option::size_t>(
-    "seastore_segment_size");
-  INFO("config segment size: {}", config_segment_size);
-  size_t zones_per_segment = config_segment_size / zone_capacity;
-  size_t segments = (num_zones - 1) * zones_per_segment;
-  
-  INFO("size {}, block_size {}, allocated_size {}, configured_size {}, "
-    "segment_size {}",
-    data.size,
+  INFO(
+    "device size {}, block_size {}, allocated_size {}, config_size {},"
+    " total zones {}, zone_size {}, zone_capacity {},"
+    " total segments {}, zones per segment {}, segment size {}",
+    size,
     data.block_size,
     data.allocated_size,
     config_size,
-    config_segment_size);
+    num_zones,
+    zone_size << SECT_SHIFT,
+    zone_capacity << SECT_SHIFT,
+    segments,
+    zones_per_segment,
+    (zone_capacity << SECT_SHIFT) * zones_per_segment);
   
   zns_sm_metadata_t ret = zns_sm_metadata_t{
     size,
-    config_segment_size,
-    zone_capacity * zones_per_segment,
+    segment_size,
+    (zone_capacity << SECT_SHIFT) * zones_per_segment,
     zones_per_segment,
-    zone_capacity,
+    zone_capacity << SECT_SHIFT,
     data.block_size,
     segments,
-    zone_size,
-    zone_size,
+    zone_size << SECT_SHIFT,
+    zone_size << SECT_SHIFT,
     meta};
   return ret;
 }
@@ -119,7 +124,6 @@ static seastar::future<> reset_device(
 
 static seastar::future<size_t> get_zone_capacity(
   seastar::file &device,
-  uint32_t zone_size,
   uint32_t nr_zones)
 {
   return seastar::do_with(
@@ -320,7 +324,7 @@ ZNSSegmentManager::mkfs_ret ZNSSegmentManager::mkfs(
           ceph_assert(zone_size);
          return reset_device(device, zone_size, nr_zones);
        }).then([&] {
-         return get_zone_capacity(device, zone_size, nr_zones); 
+         return get_zone_capacity(device, nr_zones);
        }).then([&, FNAME, config] (auto zone_capacity){
           ceph_assert(zone_capacity);
          sb = make_metadata(
index 289e730605479cd27cf0499a4633148c21f141c9..e5ee71b34850eceb731a5824634e9954a5aad9ba 100644 (file)
@@ -164,11 +164,9 @@ namespace crimson::os::seastore::segment_manager::zns {
 
     uint64_t get_offset(paddr_t addr) {
       auto& seg_addr = addr.as_seg_paddr();
-      const auto default_sector_size = 512;
       return (metadata.first_segment_offset +
              (seg_addr.get_segment_id().device_segment_id() * 
-              metadata.zone_size)) * default_sector_size + 
-       seg_addr.get_segment_off();
+              metadata.zone_size)) + seg_addr.get_segment_off();
     }
   };