svn commit: r302396 - head/sys/cam

Warner Losh imp at FreeBSD.org
Thu Jul 7 20:31:37 UTC 2016


Author: imp
Date: Thu Jul  7 20:31:35 2016
New Revision: 302396
URL: https://svnweb.freebsd.org/changeset/base/302396

Log:
  Tidy up loose ends from Netflix I/O sched rename to dynamic I/O sched.
  Rename kern.cam.do_netflix_iosched sysctl to
  kern.cam.do_dynamic_iosched.
  
  Approved by: re (kib@)

Modified:
  head/sys/cam/cam_iosched.c

Modified: head/sys/cam/cam_iosched.c
==============================================================================
--- head/sys/cam/cam_iosched.c	Thu Jul  7 20:28:57 2016	(r302395)
+++ head/sys/cam/cam_iosched.c	Thu Jul  7 20:31:35 2016	(r302396)
@@ -59,15 +59,19 @@ static MALLOC_DEFINE(M_CAMSCHED, "CAM I/
  * Default I/O scheduler for FreeBSD. This implementation is just a thin-vineer
  * over the bioq_* interface, with notions of separate calls for normal I/O and
  * for trims.
+ *
+ * When CAM_IOSCHED_DYNAMIC is defined, the scheduler is enhanced to dynamically
+ * steer the rate of one type of traffic to help other types of traffic (eg
+ * limit writes when read latency deteriorates on SSDs).
  */
 
 #ifdef CAM_IOSCHED_DYNAMIC
 
-static int do_netflix_iosched = 1;
-TUNABLE_INT("kern.cam.do_netflix_iosched", &do_netflix_iosched);
-SYSCTL_INT(_kern_cam, OID_AUTO, do_netflix_iosched, CTLFLAG_RD,
-    &do_netflix_iosched, 1,
-    "Enable Netflix I/O scheduler optimizations.");
+static int do_dynamic_iosched = 1;
+TUNABLE_INT("kern.cam.do_dynamic_iosched", &do_dynamic_iosched);
+SYSCTL_INT(_kern_cam, OID_AUTO, do_dynamic_iosched, CTLFLAG_RD,
+    &do_dynamic_iosched, 1,
+    "Enable Dynamic I/O scheduler optimizations.");
 
 static int alpha_bits = 9;
 TUNABLE_INT("kern.cam.iosched_alpha_bits", &alpha_bits);
@@ -640,7 +644,7 @@ static inline int
 cam_iosched_has_io(struct cam_iosched_softc *isc)
 {
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (do_netflix_iosched) {
+	if (do_dynamic_iosched) {
 		struct bio *rbp = bioq_first(&isc->bio_queue);
 		struct bio *wbp = bioq_first(&isc->write_queue);
 		int can_write = wbp != NULL &&
@@ -954,7 +958,7 @@ cam_iosched_init(struct cam_iosched_soft
 	bioq_init(&(*iscp)->bio_queue);
 	bioq_init(&(*iscp)->trim_queue);
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (do_netflix_iosched) {
+	if (do_dynamic_iosched) {
 		bioq_init(&(*iscp)->write_queue);
 		(*iscp)->read_bias = 100;
 		(*iscp)->current_read_bias = 100;
@@ -1019,7 +1023,7 @@ void cam_iosched_sysctl_init(struct cam_
 		"Sort IO queue to try and optimise disk access patterns");
 
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (!do_netflix_iosched)
+	if (!do_dynamic_iosched)
 		return;
 
 	isc->sysctl_tree = SYSCTL_ADD_NODE(&isc->sysctl_ctx,
@@ -1061,7 +1065,7 @@ cam_iosched_flush(struct cam_iosched_sof
 	bioq_flush(&isc->bio_queue, stp, err);
 	bioq_flush(&isc->trim_queue, stp, err);
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (do_netflix_iosched)
+	if (do_dynamic_iosched)
 		bioq_flush(&isc->write_queue, stp, err);
 #endif
 }
@@ -1206,7 +1210,7 @@ cam_iosched_next_bio(struct cam_iosched_
 	 * See if we have any pending writes, and room in the queue for them,
 	 * and if so, those are next.
 	 */
-	if (do_netflix_iosched) {
+	if (do_dynamic_iosched) {
 		if ((bp = cam_iosched_get_write(isc)) != NULL)
 			return bp;
 	}
@@ -1223,7 +1227,7 @@ cam_iosched_next_bio(struct cam_iosched_
 	 * For the netflix scheduler, bio_queue is only for reads, so enforce
 	 * the limits here. Enforce only for reads.
 	 */
-	if (do_netflix_iosched) {
+	if (do_dynamic_iosched) {
 		if (bp->bio_cmd == BIO_READ &&
 		    cam_iosched_limiter_iop(&isc->read_stats, bp) != 0)
 			return NULL;
@@ -1231,7 +1235,7 @@ cam_iosched_next_bio(struct cam_iosched_
 #endif
 	bioq_remove(&isc->bio_queue, bp);
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (do_netflix_iosched) {
+	if (do_dynamic_iosched) {
 		if (bp->bio_cmd == BIO_READ) {
 			isc->read_stats.queued--;
 			isc->read_stats.total++;
@@ -1268,7 +1272,7 @@ cam_iosched_queue_work(struct cam_iosche
 #endif
 	}
 #ifdef CAM_IOSCHED_DYNAMIC
-	else if (do_netflix_iosched &&
+	else if (do_dynamic_iosched &&
 	    (bp->bio_cmd == BIO_WRITE || bp->bio_cmd == BIO_FLUSH)) {
 		if (cam_iosched_sort_queue(isc))
 			bioq_disksort(&isc->write_queue, bp);
@@ -1332,7 +1336,7 @@ cam_iosched_bio_complete(struct cam_iosc
 {
 	int retval = 0;
 #ifdef CAM_IOSCHED_DYNAMIC
-	if (!do_netflix_iosched)
+	if (!do_dynamic_iosched)
 		return retval;
 
 	if (iosched_debug > 10)


More information about the svn-src-head mailing list