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

Reply via email to