Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: net: give up on the cmsg_time accuracy on slow machines

Commit b9d5f5711dd8 ("selftests: net: increase the delay for relative
cmsg_time.sh test") widened the accepted value range 8x but we still
see flakes (at a rate of around 7%).

Return XFAIL for the most timing sensitive test on slow machines.

Before:

# ./cmsg_time.sh
Case UDPv4 - TXTIME rel returned '8074us - 7397us < 4000', expected 'OK'
FAIL - 1/36 cases failed

After:

# ./cmsg_time.sh
Case UDPv4 - TXTIME rel returned '1123us - 941us < 500', expected 'OK' (XFAIL)
Case UDPv6 - TXTIME rel returned '1227us - 776us < 500', expected 'OK' (XFAIL)
OK

Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250116020105.931338-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+25 -10
+25 -10
tools/testing/selftests/net/cmsg_time.sh
··· 34 34 TOTAL=0 35 35 36 36 check_result() { 37 + local ret=$1 38 + local got=$2 39 + local exp=$3 40 + local case=$4 41 + local xfail=$5 42 + local xf= 43 + local inc= 44 + 45 + if [ "$xfail" == "xfail" ]; then 46 + xf="(XFAIL)" 47 + inc=0 48 + else 49 + inc=1 50 + fi 51 + 37 52 ((TOTAL++)) 38 - if [ $1 -ne 0 ]; then 39 - echo " Case $4 returned $1, expected 0" 40 - ((BAD++)) 53 + if [ $ret -ne 0 ]; then 54 + echo " Case $case returned $ret, expected 0 $xf" 55 + ((BAD+=inc)) 41 56 elif [ "$2" != "$3" ]; then 42 - echo " Case $4 returned '$2', expected '$3'" 43 - ((BAD++)) 57 + echo " Case $case returned '$got', expected '$exp' $xf" 58 + ((BAD+=inc)) 44 59 fi 45 60 } 46 61 ··· 81 66 awk '/SND/ { if ($3 > 1000) print "OK"; }') 82 67 check_result $? "$ts" "OK" "$prot - TXTIME abs" 83 68 84 - [ "$KSFT_MACHINE_SLOW" = yes ] && delay=8000 || delay=1000 69 + [ "$KSFT_MACHINE_SLOW" = yes ] && xfail=xfail 85 70 86 - ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d $delay | 71 + ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 | 87 72 awk '/SND/ {snd=$3} 88 73 /SCHED/ {sch=$3} 89 - END { if (snd - sch > '$((delay/2))') print "OK"; 90 - else print snd, "-", sch, "<", '$((delay/2))'; }') 91 - check_result $? "$ts" "OK" "$prot - TXTIME rel" 74 + END { if (snd - sch > 500) print "OK"; 75 + else print snd, "-", sch, "<", 500; }') 76 + check_result $? "$ts" "OK" "$prot - TXTIME rel" $xfail 92 77 done 93 78 done 94 79