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. 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