Hi,
I was confused with the timing wheel recently.
For example, M=log2_bins_per_wheel=2, so
bins_per_wheel=4
current_time_index = w->current_time_index = 0
bins
advance_time_index = advance_cpu_time >>
w->log2_clocks_per_bin = 16 bins, so
advance_level_index=1,advance_wheel_index=3?
insert_time_idex = insert_cpu_time >>
w->log2_clocks_per_bin = 19 bins, so
insert_level_index=1,insert_wheel_index=3?
When timing_wheel_advance is run, and when wi=3, the
insert_cpu_time will be regard as expired? but the advance_cpu_time is just
16bins, not 19bins?
if (PREDICT_TRUE (level_index < vec_len
(w->levels)))
{
uword wi
level = vec_elt_at_index
(w->levels, level_index)
wi = current_time_wheel_index (w,
level_index)
if (level->occupancy_bitmap)
while (1)
{
if (clib_bitmap_get_no_check
(level->occupancy_bitmap, wi))
expired_user_data =
expire_bin
(w, advance_level_index, wi, advance_cpu_time,
expired_user_data)
if (wi == advance_wheel_index)
break
wi = wheel_add (w, wi + 1)
}
}
What's wrong with my unterstanding?
Thanks!_______________________________________________
vpp-dev mailing list
[email protected]
https://lists.fd.io/mailman/listinfo/vpp-dev