Hi Willy, if the cost are to high, then I have no problem keeping the known behavior. The only thing I would suggest is to document it, because it caused me some headache to figure out why the values were always to low and I couldn't find any information, that this behavior is a know problem.
Best regards Reinhard On 11/25/2016 08:04 AM, Willy Tarreau wrote: > Hi Reinhard, > > On Thu, Nov 24, 2016 at 10:04:31PM +0100, Reinhard Vicinus wrote: >> Hi, >> >> we use haproxy (1.6.9) to balance very long running POST requests >> (around 50 seconds) to backend servers. It generally works like a charm, >> but the average queue time and average total session time statistic >> values are totally screwed up. >> >> The problem is that the average is calculated like this for every request: >> >> sum = sum * 511 / 512 + value >> >> for a fixed value and enough iterations: >> >> sum = value * 511 >> >> the problem is that at every iteration sum will first be multiplied by >> 511 and therefore the maximum value during the calculation is: >> >> value * 511 * 511 >> >> A unsigned int can store a maximum value of 4294967296. Divided by >> 511*511 results in 16448. That means any backend with average times >> above 16448ms will be affected by integer overflow and have wrong values. > Yes we do know this limitation. > >> The attached patch tries to solve this by storing and calculating sum as >> unsigned long long instead of a unsigned int. I don't know if the >> attached patch will work in every case, but during my limited testing it >> worked. > It will definitely work, but I didn't want to do it because of the > very expensive cost of the 64x64 multiply and divide on 32 bit > platforms which causes a measurable performance impact. However I'll > do some tests because is often OK, and doing 32x32/32 with a 64-bit > intermediary result is OK as well. If I can do it this way, I'll do > it. Otherwise I'd prefer that we just switch do long so that 64-bit > platforms can benefit from the large timers and 32-bit ones are > limited to lower values. > > Thanks, > Willy > -- Reinhard Vicinus Metaways Infosystems GmbH Pickhuben 2, D-20457 Hamburg E-Mail: [email protected] Web: http://www.metaways.de Tel: +49 (0)40 317031-524 Fax: +49 (0)40 317031-10 Metaways Infosystems GmbH - Sitz: D-22967 Tremsbüttel Handelsregister: Amtsgericht Lübeck HRB 4508 AH Geschäftsführung: Hermann Thaele, Lüder-H. Thaele

