timeout
timeout copied to clipboard
algorithm improvement
Hi @wahern , recently I am learning your timeout module and found some problems, such as some slot will be check twice during carry, bit operation has redundancy, so i made some optimization based on your code. hash optimized method is more consistent with the description in your mentioned paper, These are the main changes:
- optimize timeout_wheel hash function.
- optimize timeout_slot hash function, unify operation for all wheels.
- simplify timeout_update function bit manipulation
At the same time, the performance is also improved, in "Time spent expiring timeouts" the new algorithm for the first 400,000 timeout significantly better than the legacy algorithm.
These are nice improvements! However, I ported over your changes to my fork of the library, and it doesn't seem to work as expected: timeouts aren't expiring when they're supposed to.
I haven't investigated yet what is the cause, but in my program, I usually have a timeout of 1000
units, and the library would tell me I'd have to wait in fractions of that value until that expires (e.g. 800
, 150
, 49
, and 1
); with these changes, it tells me values way above 1000
(e.g. 3500
) before expiring.
hi lpereira, Thanks for your verification you might have called this function timeouts_timeout to get the timeout, but it seems returns a longer timeout than the real one. You can call timeouts_check to check if timeouts_timeout return the correct value, otherwise there will be an error print.