mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-28 06:11:32 +01:00
Right now when dealing with freq_ctr updates, we're using the process- wide monotinic time, and accessing it is expensive since every thread needs to update it, so this adds some contention. However we don't need it all the time, the thread's local time is most of the time strictly equal to the global time, and may be off by one millisecond when the global time is switched to the next one by another thread, and in this case we don't want to use the local time because it would risk to cause a rotation of the counter. But that's precisely the condition we're already relying on for the slow path! What this patch does is to add a check for the period against the local time prior to anything else, and immediately return after updating the counter if still within the period, otherwise fall back to the existing code. Given that the function starts to inflate a bit, it was split between s very short inline part that does the hot path, and the slower fallback that's in a cold function. It was measured that on a 24-CPU machine it was called ~0.003% of the time. The resulting improvement sits between 2 and 3% at 500k req/s tracking an http_req_rate counter.