Eric, thank you for looking at it! I have measured all four variants that you have suggested, as well as the default ones, using linux-4.12.1 as a base.
The summary of measurements is below. Note that
- min/max/avg is in Mbits/sec;
- n is number of measurements, each of 1 second.
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 10);
min 0.00 max 39.60 avg 19.09 num 80
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 7);
min 30.00 max 219.00 avg 174.15 num 80
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 8);
min 0.00 max 220.00 avg 114.34 num 80
+ limit = max(4 * skb->truesize, sk->sk_pacing_rate >> 7);
min 8.47 max 95.80 avg 68.80 num 80
+ limit = max(4 * skb->truesize, sk->sk_pacing_rate >> 8);
min 20.20 max 169.00 avg 122.09 num 60
Despite the great discrepancy in results, it can be seen that
- changing the values helps a lot
- numbers 2 and 7 works the best for me.
The script to produce the output above is here:
kir@kd:~/wifiperf$ cat cal
awk '
BEGIN {min=999999; max=n=sum=0;}
NR==1 { print }
$NF=="KBytes" {
val=$7;
if (val > max) max = val;
if (val < min) min = val;
sum += val;
n = n+1;
}
END {
printf("min %5.2f max %5.2f avg %5.2f num %d\n", min, max, sum/n, n)
}'
Eric, thank you for looking at it! I have measured all four variants that you have suggested, as well as the default ones, using linux-4.12.1 as a base.
The summary of measurements is below. Note that
- min/max/avg is in Mbits/sec;
- n is number of measurements, each of 1 second.
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 10);
min 0.00 max 39.60 avg 19.09 num 80
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 7);
min 30.00 max 219.00 avg 174.15 num 80
+ limit = max(2 * skb->truesize, sk->sk_pacing_rate >> 8);
min 0.00 max 220.00 avg 114.34 num 80
+ limit = max(4 * skb->truesize, sk->sk_pacing_rate >> 7);
min 8.47 max 95.80 avg 68.80 num 80
+ limit = max(4 * skb->truesize, sk->sk_pacing_rate >> 8);
min 20.20 max 169.00 avg 122.09 num 60
Despite the great discrepancy in results, it can be seen that
- changing the values helps a lot
- numbers 2 and 7 works the best for me.
The script to produce the output above is here:
kir@kd:~/wifiperf$ cat cal
awk '
BEGIN {min=999999; max=n=sum=0;}
NR==1 { print }
$NF=="KBytes" {
val=$7;
if (val > max) max = val;
if (val < min) min = val;
sum += val;
n = n+1;
}
END {
printf("min %5.2f max %5.2f avg %5.2f num %d\n", min, max, sum/n, n)
}'