cam iosched: Enforce iop limits below the quanta value
Previously the iops limiter would always allow at least quanta ios per second as cam_iosched_iops_tick() never set ios->l_value1 below 1. Submitted by: Fabian Keil <fk@fabiankeil.de> Obtained from: ElectroBSD PR: 221974
This commit is contained in:
parent
cc05c7d256
commit
f777123b83
@ -415,6 +415,7 @@ cam_iosched_iops_init(struct iop_stats *ios)
|
|||||||
ios->l_value1 = ios->current / ios->softc->quanta;
|
ios->l_value1 = ios->current / ios->softc->quanta;
|
||||||
if (ios->l_value1 <= 0)
|
if (ios->l_value1 <= 0)
|
||||||
ios->l_value1 = 1;
|
ios->l_value1 = 1;
|
||||||
|
ios->l_value2 = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -423,9 +424,18 @@ static int
|
|||||||
cam_iosched_iops_tick(struct iop_stats *ios)
|
cam_iosched_iops_tick(struct iop_stats *ios)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if ((ios->softc->total_ticks % ios->softc->quanta) == 0)
|
||||||
|
ios->l_value2 = 0;
|
||||||
|
|
||||||
ios->l_value1 = (int)((ios->current * (uint64_t)ios->softc->this_frac) >> 16);
|
ios->l_value1 = (int)((ios->current * (uint64_t)ios->softc->this_frac) >> 16);
|
||||||
if (ios->l_value1 <= 0)
|
/*
|
||||||
|
* Allow at least one IO per tick until all
|
||||||
|
* the IOs for this interval have been spent.
|
||||||
|
*/
|
||||||
|
if (ios->l_value1 <= 0 && ios->l_value2 < ios->current) {
|
||||||
ios->l_value1 = 1;
|
ios->l_value1 = 1;
|
||||||
|
ios->l_value2++;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user