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 <f...@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;
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to