Re: [PATCH v2] btrfs/237: Use zone cap instead of zone size in fill_size and rest calculation

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Fri, Mar 18, 2022 at 10:28:44AM +0100, Pankaj Raghav wrote:
> 
> 
> On 2022-03-18 08:54, Naohiro Aota wrote:
> >>  
> >> -zonesize=$(cat /sys/block/$(_short_dev $SCRATCH_DEV)/queue/chunk_sectors)
> >> -zonesize=$((zonesize << 9))
> >> -
> >>  _scratch_mkfs >/dev/null 2>&1
> >>  _scratch_mount -o commit=1 # 1s commit time to speed up test
> >>  
> >> @@ -49,12 +46,18 @@ if [[ "$uuid" == "" ]]; then
> >>  	exit 1
> >>  fi
> >>  
> >> +data_bg_zone_idx=5
> > 
> > Hmm. Yeah, it's currently there. But, I'd hesitate to use that like a
> > constant number.
> > 
> > Instead, how about querying "btrfs inspect-internal" like in
> > get_data_bg() do? E.g, like this:
> > 
> > # Assumes SINGLE data profile
> > btrfs inspect-internal dump-tree -t CHUNK $SCRATCH_DEV | grep -A 4 CHUNK_ITEM |\
> > 	grep -A 3 'type DATA\|SINGLE' |\
> > 	grep -Eo 'offset [[:digit:]]+'| cut -d ' ' -f 2
> > 
> > This command dumps the location of data BG in a byte unit.
> > 
> > Then, we can calculate the sector number and can supply it to "blkzone
> > report -o".
> > 
> Got it. I also prefer this over hardcoding.
> I think we can reuse the get_data_bg function as it also outputs the
> same data BG offset.

No, we cannot.

They look the same in number, but they are different in type. The
get_data_bg returns the logical address (virtual btrfs's internal
address) of the BG. And, my command above returns the physical address
(on-disk address) of the BG.

> Like this:
> 
> start_data_bg_zone=$(get_data_bg)
> start_data_bg_zone=$((data_bg_zone >> 9))
> 
> size=$($BLKZONE_PROG report -o $start_data_bg_zone -l 1 $SCRATCH_DEV |\
> ...
> Let me know your thoughts.
> >> +size=$($BLKZONE_PROG report -c $data_bg_zone_idx $SCRATCH_DEV | tail -1 |\
> >> +	_filter_blkzone_report |\
> >> +	grep -Po "cap ([0x\d]+)+" | cut -d ' ' -f 2)
> >> +size=$((size << 9))
> >> +
> >>  reclaim_threshold=75
> >>  echo $reclaim_threshold > /sys/fs/btrfs/"$uuid"/bg_reclaim_threshold
> >>  fill_percent=$((reclaim_threshold + 2))
> >>  rest_percent=$((90 - fill_percent)) # make sure we're not creating a new BG
> >> -fill_size=$((zonesize * fill_percent / 100))
> >> -rest=$((zonesize * rest_percent / 100))
> >> +fill_size=$((size * fill_percent / 100))
> >> +rest=$((size * rest_percent / 100))
> >>  
> >>  # step 1, fill FS over $fillsize
> >>  $XFS_IO_PROG -fc "pwrite 0 $fill_size" $SCRATCH_MNT/$seq.test1 >> $seqres.full
> >> -- 
> >> 2.25.1
> 
> -- 
> Regards,
> Pankaj



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux