From: Lai Siyao Date: Tue, 10 Nov 2020 02:44:17 +0000 (+0800) Subject: LU-9820 osd-ldiskfs: OI scrub speed limit fix X-Git-Tag: 2.14.51~170 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=refs%2Fchanges%2F91%2F40591%2F3 LU-9820 osd-ldiskfs: OI scrub speed limit fix The OI scrub speed limit is set at start time, and shouldn't be changed in the middle, otherwise lfsck is run with speed control, while OI scrub may finish before it, thus sanity-scrub 9 failed. Allow wider margin in speed control since the speed control is heuristic. Test-Parameters: testlist=sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub,sanity-scrub Signed-off-by: Lai Siyao Change-Id: I995679db085a193c71fc7914f961b538b5930c69 Reviewed-on: https://review.whamcloud.com/40591 Tested-by: jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Hongchao Zhang Reviewed-by: Oleg Drokin --- diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c index 60da3750..866dd04 100644 --- a/lustre/osd-ldiskfs/osd_scrub.c +++ b/lustre/osd-ldiskfs/osd_scrub.c @@ -339,12 +339,6 @@ iget: GOTO(out, rc = 0); } - if (!scrub->os_partial_scan) { - spin_lock(&scrub->os_lock); - scrub->os_full_speed = 1; - spin_unlock(&scrub->os_lock); - } - switch (val) { case SCRUB_NEXT_NOLMA: sf->sf_flags |= SF_UPGRADE; diff --git a/lustre/tests/sanity-scrub.sh b/lustre/tests/sanity-scrub.sh index 97d3e36..3a90dc0a5 100644 --- a/lustre/tests/sanity-scrub.sh +++ b/lustre/tests/sanity-scrub.sh @@ -911,6 +911,7 @@ test_9() { sleep $RUN_TIME1 scrub_check_status 6 completed scrub_check_flags 7 "" + # OI scrub should run with limited speed under non-inconsistent case scrub_start 8 -s $BASE_SPEED1 -r @@ -943,16 +944,17 @@ test_9() { done sleep $RUN_TIME2 - # MIN_MARGIN = 0.8 = 8 / 10 + # 30% margin + local MARGIN=3 local MIN_SPEED=$(((PRE_FETCHED + \ BASE_SPEED1 * (RUN_TIME1 - TIME_DIFF) + \ BASE_SPEED2 * (RUN_TIME2 - TIME_DIFF)) / \ - (RUN_TIME1 + RUN_TIME2) * 8 / 10)) + (RUN_TIME1 + RUN_TIME2) * (10 - MARGIN) / 10)) # MAX_MARGIN = 1.2 = 12 / 10 MAX_SPEED=$(((PRE_FETCHED + \ BASE_SPEED1 * (RUN_TIME1 + TIME_DIFF) + \ BASE_SPEED2 * (RUN_TIME2 + TIME_DIFF)) / \ - (RUN_TIME1 + RUN_TIME2) * 12 / 10)) + (RUN_TIME1 + RUN_TIME2) * (10 + MARGIN) / 10)) for n in $(seq $MDSCOUNT); do SPEED=$(scrub_status $n | awk '/^average_speed/ { print $2 }') [ $SPEED -gt $MIN_SPEED ] ||