envoyproxy / nighthawk

L7 (HTTP/HTTPS/HTTP2/HTTP3) performance characterization tool
Apache License 2.0
361 stars 81 forks source link

some percentiles are not returned exactly #717

Open eric846 opened 3 years ago

eric846 commented 3 years ago

Special percentiles are requested here: https://github.com/envoyproxy/nighthawk/blob/main/source/common/statistic_impl.cc

It works fine at the lower percentiles, but 0.990625 seems to always appear instead of 0.99.

These are the percentiles from a couple of recent runs:

0
0.1
0.2
0.3
0.4
0.5
0.55
0.6
0.65
0.7
0.75
0.775
0.8
0.825
0.85
0.875
0.8875
0.9
0.9125
0.925
0.9375
0.94375
0.95
0.95625
0.9625
0.96875
0.971875
0.975
0.978125
0.98125
0.984375
0.985938
0.9875
0.989062
0.990625
0.992188
0.992969
0.99375
0.994531
0.995313
0.996094
0.996484
0.996875
0.997266
0.997656
0.998047
0.998242
0.998437
0.998633
0.998828
0.999023
1

Higher RPS:

0
0.1
0.2
0.3
0.4
0.5
0.55
0.6
0.65
0.7
0.75
0.775
0.8
0.825
0.85
0.875
0.8875
0.9
0.9125
0.925
0.9375
0.94375
0.95
0.95625
0.9625
0.96875
0.971875
0.975
0.978125
0.98125
0.984375
0.985938
0.9875
0.989062
0.990625
0.992188
0.992969
0.99375
0.994531
0.995313
0.996094
0.996484
0.996875
0.997266
0.997656
0.998047
0.998242
0.998437
0.998633
0.998828
0.999023
0.999121
0.999219
0.999316
0.999414
0.999512
0.999561
0.999609
0.999658
0.999707
0.999756
0.99978
0.999805
0.999829
0.999854
0.999878
0.99989
0.999902
0.999915
0.999927
0.999939
0.999945
0.999951
0.999957
0.999963
0.999969
0.999973
0.999976
0.999979
0.999982
0.999985
0.999986
0.999988
0.999989
0.999991
0.999992
0.999993
0.999994
0.999995
0.999995
0.999996
0.999997
0.999997
0.999997
0.999998
0.999998
0.999998
0.999998
0.999999
0.999999
0.999999
0.999999
0.999999
0.999999
0.999999
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
oschaaf commented 3 years ago

From https://github.com/envoyproxy/nighthawk/issues/115#issuecomment-539522561:

HDR-Histogram uses base-2 arithmetic behind the scenes, circllhist uses base 10. So you get precise counts at "human readable" float numbers like 0.24, 120, 1800, as opposed to 0.09375=0.00011 base-2.

Based on that, I'm thinking this might be a "feature" of HdrHistogram?