svn commit: r323893 - head/sys/cam
Warner Losh
imp at FreeBSD.org
Fri Sep 22 02:36:33 UTC 2017
Author: imp
Date: Fri Sep 22 02:36:32 2017
New Revision: 323893
URL: https://svnweb.freebsd.org/changeset/base/323893
Log:
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 at fabiankeil.de>
Obtained from: ElectroBSD
PR: 221974
Modified:
head/sys/cam/cam_iosched.c
Modified: head/sys/cam/cam_iosched.c
==============================================================================
--- head/sys/cam/cam_iosched.c Fri Sep 22 00:34:46 2017 (r323892)
+++ head/sys/cam/cam_iosched.c Fri Sep 22 02:36:32 2017 (r323893)
@@ -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;
}
More information about the svn-src-head
mailing list