On Thu, 22 Feb 2018 05:43:50 +0000 (UTC) Warner Losh <i...@freebsd.org> wrote:
> Author: imp > Date: Thu Feb 22 05:43:50 2018 > New Revision: 329814 > URL: https://svnweb.freebsd.org/changeset/base/329814 > > Log: > Note when we tick. > > To help implement a policy of 'queue all trims until next I/O sched > tick' policy to help coalesce them, note when we tick so we can do > something special on the first call after the tick to get more work. > > Sponsored by: Netflix > > Modified: > head/sys/cam/cam_iosched.c > > Modified: head/sys/cam/cam_iosched.c > ============================================================================== > --- head/sys/cam/cam_iosched.c Thu Feb 22 05:43:45 2018 > (r329813) +++ head/sys/cam/cam_iosched.c Thu Feb 22 05:43:50 > 2018 (r329814) @@ -60,6 +60,19 @@ static MALLOC_DEFINE(M_CAMSCHED, > "CAM I/O Scheduler", "CAM I/O Scheduler buffers"); > > /* > + * Trim or similar currently pending completion. Should only be set for > + * those drivers wishing only one Trim active at a time. > + */ > +#define CAM_IOSCHED_FLAG_TRIM_ACTIVE (1ul << 0) > + /* Callout active, and needs to be torn down */ > +#define CAM_IOSCHED_FLAG_CALLOUT_ACTIVE (1ul << 1) > + /* Timer has just ticked */ > +#define CAM_IOSCHED_FLAG_TICK (1ul << 2) > + > + /* Periph drivers set these flags to indicate work */ > +#define CAM_IOSCHED_FLAG_WORK_FLAGS ((0xffffu) << 16) > + > +/* > * 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. > @@ -574,6 +587,7 @@ cam_iosched_ticker(void *arg) > cam_iosched_limiter_tick(&isc->write_stats); > cam_iosched_limiter_tick(&isc->trim_stats); > > + isc->flags |= CAM_IOSCHED_FLAGS_TICK; > cam_iosched_schedule(isc, isc->periph); > > /* > @@ -701,17 +715,6 @@ cam_iosched_cl_maybe_steer(struct control_loop *clp) > } > #endif > > -/* > - * Trim or similar currently pending completion. Should only be set for > - * those drivers wishing only one Trim active at a time. > - */ > -#define CAM_IOSCHED_FLAG_TRIM_ACTIVE (1ul << 0) > - /* Callout active, and needs to be torn down */ > -#define CAM_IOSCHED_FLAG_CALLOUT_ACTIVE (1ul << 1) > - > - /* Periph drivers set these flags to indicate work */ > -#define CAM_IOSCHED_FLAG_WORK_FLAGS ((0xffffu) << 16) > - > #ifdef CAM_IOSCHED_DYNAMIC > static void > cam_iosched_io_metric_update(struct cam_iosched_softc *isc, > @@ -1322,6 +1325,10 @@ struct bio * > cam_iosched_next_bio(struct cam_iosched_softc *isc) > { > struct bio *bp; > + bool wastick; > + > + wastick = !!(isc->flags & CAM_IOSCHED_FLAGS_TICK); > + isc->flags &= ~CAM_IOSCHED_FLAGS_TICK; > > /* > * See if we have a trim that can be scheduled. We can only send one > _______________________________________________ > 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" A recent buildworld/buildkernel failed with this error just right now: --- cam_iosched.o --- /usr/src/sys/cam/cam_iosched.c:593:16: error: use of undeclared identifier 'CAM_IOSCHED_FLAGS_TICK' isc->flags |= CAM_IOSCHED_FLAGS_TICK; _______________________________________________ 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"