Hi, Ming! 在 2025/02/25 10:28, Ming Lei 写道:
Can you explain in details why it signals that the rate is expected now? If rate isn't expected, it will cause trouble to trim, even just the previous part.
Ok, for example, assume bps_limit is 1000bytes, 1 jiffes is 10ms, and slice is 20ms(2 jiffies). expected rate is 1000 / 1000 * 20 = 20 bytes per slice. If user issue two 21 bytes IO, then wait time will be 30ms: bytes_allowed = 20, extra_bytes = 1; jiffy_wait = 1 + 2 = 3 jiffies and consider extra 1 jiffies by timer, throtl_trim_slice() will be called at: jiffies = 40ms slice_start = 0ms, slice_end= 40ms bytes_disp = 21 In this case, before the patch, real rate in the first two slice is is 10.5 bytes per slice, and slice will be updated: jiffies = 40ms slice_start = 40ms, slice_end = 60ms, bytes_disp = 0; Hence the second IO will have to wait another 30ms; With the patch, the real rate in the first slice is 20 bytes per slice, which is the same as expected, and slice will be updated: jiffies=40ms, slice_start = 20ms, slice_end = 60ms, bytes_disp = 1; And now, the second IO will only have to wait 10ms; Thanks, Kuai