MINOR: freq_ctr/threads: relax when failing to update a sliding window value
The swrate_add* functions would sping fast on a failed CAS, better place
a cpu_relax() call there to reduce contention if any.
diff --git a/include/haproxy/freq_ctr.h b/include/haproxy/freq_ctr.h
index 38d82fe..d5cea41 100644
--- a/include/haproxy/freq_ctr.h
+++ b/include/haproxy/freq_ctr.h
@@ -262,7 +262,7 @@
old_sum = *sum;
do {
new_sum = old_sum - (old_sum + n - 1) / n + v;
- } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum));
+ } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum) && __ha_cpu_relax());
return new_sum;
}
@@ -280,7 +280,7 @@
old_sum = *sum;
do {
new_sum = old_sum - (n ? (old_sum + n - 1) / n : 0) + v;
- } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum));
+ } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum) && __ha_cpu_relax());
return new_sum;
}
@@ -314,7 +314,7 @@
old_sum = *sum;
do {
new_sum = old_sum + v * s - div64_32((unsigned long long)(old_sum + n) * s, n);
- } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum));
+ } while (!_HA_ATOMIC_CAS(sum, &old_sum, new_sum) && __ha_cpu_relax());
return new_sum;
}