timeout icon indicating copy to clipboard operation
timeout copied to clipboard

algorithm improvement

Open vbs100 opened this issue 4 years ago • 2 comments

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.

legacy.png new.png

vbs100 avatar Jun 11 '20 13:06 vbs100

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.

lpereira avatar Jun 14 '20 17:06 lpereira

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.

vbs100 avatar Jun 15 '20 15:06 vbs100