Messages in this thread | | | Date | Wed, 31 Jan 2024 10:14:25 +0800 | From | Yongpeng Yang <> | Subject | Re: [f2fs-dev] [PATCH] f2fs-tools: allocate logs after conventional area for HM zoned devices |
| |
On 1/31/2024 2:00 AM, Daeho Jeong wrote: > On Mon, Jan 29, 2024 at 6:17 PM Yongpeng Yang <yangyongpeng1@oppo.com> wrote: >> >> cur_seg[CURSEG_COLD_DATA] will exceed end boundary of main area when: >> device[1]: zone device size = [2 MB ~ 10MB] >> >> So, if there are not enough seq zones for six cursegs, we should still >> assign 0 to c.cur_seg[CURSEG_HOT_NODE] or reserve several conv zones for >> cursegs. > > To tackle that case, how about this? > > } else if (c.zoned_mode) { > c.cur_seg[CURSEG_HOT_NODE] = 0; > if (c.zoned_model == F2FS_ZONED_HM) { > uint32_t conv_zones = > c.devices[0].total_segments / c.segs_per_zone > - total_meta_zones; > > if (total_zones - conv_zones >= avail_zones) > c.cur_seg[CURSEG_HOT_NODE] = > (c.devices[1].start_blkaddr - > get_sb(main_blkaddr)) / c.blks_per_seg; > } > It seems fine, thanks. >> >> On 1/29/2024 11:47 PM, Daeho Jeong wrote: >>> On Sun, Jan 28, 2024 at 5:27 PM Chao Yu <chao@kernel.org> wrote: >>>> >>>> On 2024/1/27 2:17, Daeho Jeong wrote: >>>>> On Thu, Jan 25, 2024 at 5:27 PM Chao Yu <chao@kernel.org> wrote: >>>>>> >>>>>> On 2024/1/26 0:25, Daeho Jeong wrote: >>>>>>> On Wed, Jan 24, 2024 at 7:34 PM Chao Yu <chao@kernel.org> wrote: >>>>>>>> >>>>>>>> +Cc Yongpeng Yang >>>>>>>> >>>>>>>> Daeho, >>>>>>>> >>>>>>>> Yongpeng reports a potential issue: if c.devices[0].total_segments is >>>>>>>> larger than segments of mainarea, c.cur_seg[CURSEG_HOT_NODE] will exceed >>>>>>>> end boundary of mainarea. Could you please check that? though it's a corner >>>>>>>> case. >>>>>>> >>>>>>> Can you elaborate more? >>>>>> >>>>>> Since c.cur_seg[CURSEG_HOT_NODE] is an offset started from main_blkaddr. >>>>> >>>>> Oh, Got it. >>>>> Then, how about this? >>>>> >>>>> c.cur_seg[CURSEG_HOT_NODE] = c.zoned_model == F2FS_ZONED_HM ? >>>>> (c.devices[1].start_blkaddr - >>>>> get_sb(main_blkaddr)) / c.blks_per_seg : 0; >>>> >>>> Better, but log header should align to start blkaddr of zone? >>> >>> It's already aligned here. >>> >>> if (c.zoned_mode && c.ndevs > 1) >>> zone_align_start_offset += >>> (c.devices[0].total_sectors * c.sector_size) % >>> zone_size_bytes; >>> >>> ... >>> >>> for (i = 0; i < c.ndevs; i++) { >>> if (i == 0) { >>> c.devices[i].total_segments = >>> (c.devices[i].total_sectors * >>> c.sector_size - zone_align_start_offset) / >>> segment_size_bytes; >>> c.devices[i].start_blkaddr = 0; >>> c.devices[i].end_blkaddr = c.devices[i].total_segments * >>> c.blks_per_seg - 1 + >>> sb->segment0_blkaddr; >>> } else { >>> c.devices[i].total_segments = >>> c.devices[i].total_sectors / >>> (c.sectors_per_blk * c.blks_per_seg); >>> c.devices[i].start_blkaddr = >>> c.devices[i - 1].end_blkaddr + 1; >>> >>> ... >>> >>> total_meta_zones = ZONE_ALIGN(total_meta_segments * >>> c.blks_per_seg); >>> >>> set_sb(main_blkaddr, get_sb(segment0_blkaddr) + total_meta_zones * >>> c.segs_per_zone * c.blks_per_seg); >>> >>>> >>>> Thanks, >>>> >>>>> >>>>>> If c.cur_seg[CURSEG_HOT_NODE] was assigned w/ c.devices[0].total_segments, >>>>>> and c.devices[0].total_segments is larger than segments of mainare, >>>>>> c.cur_seg[CURSEG_HOT_NODE] will exceed the end boundary of mainarea. >>>>>> >>>>>> c.cur_seg[CURSEG_HOT_NODE] = c.zoned_model == F2FS_ZONED_HM ? >>>>>> c.devices[0].total_segments : 0; >>>>>> >>>>>>> In the case of F2FS_ZONED_HM, we have the devices[1]. >>>>>>> Do you mean the case we format the filesystem intentionally smaller >>>>>>> than what devices have? >>>>>> >>>>>> I mean blew case: >>>>>> device[0]: conventional device size = 10240 MB >>>>>> device[1]: zone device size = 2 MB >>>>>> >>>>>> Thanks, >>>>>> >>>>>>> >>>>>>>> >>>>>>>> On 2024/1/18 7:00, Daeho Jeong wrote: >>>>>>>>> From: Daeho Jeong <daehojeong@google.com> >>>>>>>>> >>>>>>>>> Make to allocate logs after conventional area for HM zoned devices to >>>>>>>>> spare them for file pinning support. >>>>>>>>> >>>>>>>>> Signed-off-by: Daeho Jeong <daehojeong@google.com> >>>>>>>>> --- >>>>>>>>> mkfs/f2fs_format.c | 3 ++- >>>>>>>>> 1 file changed, 2 insertions(+), 1 deletion(-) >>>>>>>>> >>>>>>>>> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c >>>>>>>>> index f2840c8..91a7f4b 100644 >>>>>>>>> --- a/mkfs/f2fs_format.c >>>>>>>>> +++ b/mkfs/f2fs_format.c >>>>>>>>> @@ -557,7 +557,8 @@ static int f2fs_prepare_super_block(void) >>>>>>>>> c.cur_seg[CURSEG_COLD_DATA] = 0; >>>>>>>>> c.cur_seg[CURSEG_WARM_DATA] = next_zone(CURSEG_COLD_DATA); >>>>>>>>> } else if (c.zoned_mode) { >>>>>>>>> - c.cur_seg[CURSEG_HOT_NODE] = 0; >>>>>>>>> + c.cur_seg[CURSEG_HOT_NODE] = c.zoned_model == F2FS_ZONED_HM ? >>>>>>>>> + c.devices[0].total_segments : 0; >>>>>>>>> c.cur_seg[CURSEG_WARM_NODE] = next_zone(CURSEG_HOT_NODE); >>>>>>>>> c.cur_seg[CURSEG_COLD_NODE] = next_zone(CURSEG_WARM_NODE); >>>>>>>>> c.cur_seg[CURSEG_HOT_DATA] = next_zone(CURSEG_COLD_NODE);
| |