From: Aravind Ramesh Date: Tue, 28 Jun 2022 18:09:55 +0000 (+0530) Subject: crimson/zns: initialize segment_size and zones_per_segment correctly X-Git-Tag: v18.0.0~417^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aa7317e42059204cb58efb79d5ab26dcbe8c3dd4;p=ceph.git crimson/zns: initialize segment_size and zones_per_segment correctly 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 --- diff --git a/src/crimson/os/seastore/segment_manager/zns.cc b/src/crimson/os/seastore/segment_manager/zns.cc index c0dc6d8a8c7..a41c01eb217 100644 --- a/src/crimson/os/seastore/segment_manager/zns.cc +++ b/src/crimson/os/seastore/segment_manager/zns.cc @@ -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( - "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 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( diff --git a/src/crimson/os/seastore/segment_manager/zns.h b/src/crimson/os/seastore/segment_manager/zns.h index 289e7306054..e5ee71b3485 100644 --- a/src/crimson/os/seastore/segment_manager/zns.h +++ b/src/crimson/os/seastore/segment_manager/zns.h @@ -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(); } };