mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-23 16:01:42 +00:00
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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323893
@ -415,6 +415,7 @@ cam_iosched_iops_init(struct iop_stats *ios)
|
||||
ios->l_value1 = ios->current / ios->softc->quanta;
|
||||
if (ios->l_value1 <= 0)
|
||||
ios->l_value1 = 1;
|
||||
ios->l_value2 = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -423,9 +424,18 @@ static int
|
||||
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);
|
||||
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_value2++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user