Move key's headers check outside of `eblob_fill_write_control_from_ram`
shaitan opened this issue · comments
This check was added in 9685074 and it is intended to determine broken records and incongruity between index and blob.
This check should be moved outside of eblob_fill_write_control_from_ram
because eblob_fill_write_control_from_ram
is always called under global lock on b->lock
and additional seek under this lock leads to degradation of response time.
Our load tests showed follow degradation:
quantile | original v0.23.10 | v0.23.10 with reverted 9685074 |
---|---|---|
99% | 82.0 ms | 26.0 ms (-56.0) |
98% | 27.0 ms | 16.0 ms (-11.0) |
95% | 26.0 ms | 10.0 ms (-16.0) |
90% | 26.0 ms | 7.0 ms (-19.0) |
85% | 21.0 ms | 5.0 ms (-16.0) |
80% | 18.0 ms | 3.0 ms (-15.0) |
75% | 15.0 ms | 3.0 ms (-12.0) |
50% | 6.0 ms | 2.0 ms (-4.0) |
In both tests timeout on the client was set to 25 ms.
I will deal with this issue in the near future (1-2 weeks), but until then I'm ready to discuss the proposals where this check can be moved or how it can be transformed.