Lines Matching full:isc

608 	struct cam_iosched_softc *isc = arg;  in cam_iosched_ticker()  local
612 callout_reset(&isc->ticker, hz / isc->quanta, cam_iosched_ticker, isc); in cam_iosched_ticker()
615 delta = now - isc->last_time; in cam_iosched_ticker()
616isc->this_frac = (uint32_t)delta >> 16; /* Note: discards seconds -- should be 0 harmless if not … in cam_iosched_ticker()
617 isc->last_time = now; in cam_iosched_ticker()
619 cam_iosched_cl_maybe_steer(&isc->cl); in cam_iosched_ticker()
621 cam_iosched_limiter_tick(&isc->read_stats); in cam_iosched_ticker()
622 cam_iosched_limiter_tick(&isc->write_stats); in cam_iosched_ticker()
623 cam_iosched_limiter_tick(&isc->trim_stats); in cam_iosched_ticker()
625 isc->schedfnc(isc->periph); in cam_iosched_ticker()
628 * isc->load is an EMA of the pending I/Os at each tick. The number of in cam_iosched_ticker()
648 pending = isc->read_stats.pending + isc->write_stats.pending /* + isc->trim_stats.pending */; in cam_iosched_ticker()
649 pending += !!(isc->read_stats.state_flags & IOP_RATE_LIMITED) * isc->read_stats.queued + in cam_iosched_ticker()
650 !!(isc->write_stats.state_flags & IOP_RATE_LIMITED) * isc->write_stats.queued /* + in cam_iosched_ticker()
651 !!(isc->trim_stats.state_flags & IOP_RATE_LIMITED) * isc->trim_stats.queued */ ; in cam_iosched_ticker()
653 pending /= isc->periph->path->device->ccbq.total_openings; in cam_iosched_ticker()
655isc->load = (pending + (isc->load << 13) - isc->load) >> 13; /* see above: 13 -> 16139 / 200/s = ~… in cam_iosched_ticker()
657 isc->total_ticks++; in cam_iosched_ticker()
661 cam_iosched_cl_init(struct control_loop *clp, struct cam_iosched_softc *isc) in cam_iosched_cl_init() argument
665 clp->softc = isc; in cam_iosched_cl_init()
676 struct cam_iosched_softc *isc; in cam_iosched_cl_maybe_steer() local
680 isc = clp->softc; in cam_iosched_cl_maybe_steer()
681 now = isc->last_time; in cam_iosched_cl_maybe_steer()
688 if (isc->write_stats.current != isc->write_stats.max) in cam_iosched_cl_maybe_steer()
690 isc->write_stats.current, isc->write_stats.max); in cam_iosched_cl_maybe_steer()
691 isc->read_stats.current = isc->read_stats.max; in cam_iosched_cl_maybe_steer()
692 isc->write_stats.current = isc->write_stats.max; in cam_iosched_cl_maybe_steer()
693 isc->trim_stats.current = isc->trim_stats.max; in cam_iosched_cl_maybe_steer()
696 old = isc->write_stats.current; in cam_iosched_cl_maybe_steer()
697 lat = isc->read_stats.ema; in cam_iosched_cl_maybe_steer()
724 if (lat < clp->lolat || isc->read_stats.total - clp->last_count < 10) in cam_iosched_cl_maybe_steer()
725 isc->write_stats.current = isc->write_stats.current * in cam_iosched_cl_maybe_steer()
728 isc->write_stats.current = isc->write_stats.current * in cam_iosched_cl_maybe_steer()
730 clp->last_count = isc->read_stats.total; in cam_iosched_cl_maybe_steer()
736 if (isc->write_stats.current < isc->write_stats.min) in cam_iosched_cl_maybe_steer()
737 isc->write_stats.current = isc->write_stats.min; in cam_iosched_cl_maybe_steer()
738 if (isc->write_stats.current > isc->write_stats.max) in cam_iosched_cl_maybe_steer()
739 isc->write_stats.current = isc->write_stats.max; in cam_iosched_cl_maybe_steer()
740 if (old != isc->write_stats.current && iosched_debug) in cam_iosched_cl_maybe_steer()
742 old, isc->write_stats.current, in cam_iosched_cl_maybe_steer()
764 cam_iosched_io_metric_update(struct cam_iosched_softc *isc,
769 cam_iosched_has_flagged_work(struct cam_iosched_softc *isc) in cam_iosched_has_flagged_work() argument
771 return !!(isc->flags & CAM_IOSCHED_FLAG_WORK_FLAGS); in cam_iosched_has_flagged_work()
775 cam_iosched_has_io(struct cam_iosched_softc *isc) in cam_iosched_has_io() argument
779 struct bio *rbp = bioq_first(&isc->bio_queue); in cam_iosched_has_io()
780 struct bio *wbp = bioq_first(&isc->write_queue); in cam_iosched_has_io()
782 cam_iosched_limiter_caniop(&isc->write_stats, wbp) == 0; in cam_iosched_has_io()
784 cam_iosched_limiter_caniop(&isc->read_stats, rbp) == 0; in cam_iosched_has_io()
786 …"can write %d: pending_writes %d max_writes %d\n", can_write, isc->write_stats.pending, isc->write… in cam_iosched_has_io()
787 …can read %d: read_stats.pending %d max_reads %d\n", can_read, isc->read_stats.pending, isc->read_s… in cam_iosched_has_io()
788 printf("Queued reads %d writes %d\n", isc->read_stats.queued, isc->write_stats.queued); in cam_iosched_has_io()
793 return bioq_first(&isc->bio_queue) != NULL; in cam_iosched_has_io()
797 cam_iosched_has_more_trim(struct cam_iosched_softc *isc) in cam_iosched_has_more_trim() argument
801 bp = bioq_first(&isc->trim_queue); in cam_iosched_has_more_trim()
808 if (bp == NULL || cam_iosched_limiter_caniop(&isc->trim_stats, bp) != 0) in cam_iosched_has_more_trim()
818 if (isc->trim_goal > 0) { in cam_iosched_has_more_trim()
819 if (isc->queued_trims >= isc->trim_goal) in cam_iosched_has_more_trim()
821 if (isc->queued_trims > 0 && in cam_iosched_has_more_trim()
822 isc->trim_ticks > 0 && in cam_iosched_has_more_trim()
823 ticks - isc->last_trim_tick > isc->trim_ticks) in cam_iosched_has_more_trim()
829 return !(isc->flags & CAM_IOSCHED_FLAG_TRIM_ACTIVE) && bp != NULL; in cam_iosched_has_more_trim()
832 #define cam_iosched_sort_queue(isc) ((isc)->sort_io_queue >= 0 ? \ argument
833 (isc)->sort_io_queue : cam_sort_io_queues)
836 cam_iosched_has_work(struct cam_iosched_softc *isc) in cam_iosched_has_work() argument
840 printf("has work: %d %d %d\n", cam_iosched_has_io(isc), in cam_iosched_has_work()
841 cam_iosched_has_more_trim(isc), in cam_iosched_has_work()
842 cam_iosched_has_flagged_work(isc)); in cam_iosched_has_work()
845 return cam_iosched_has_io(isc) || in cam_iosched_has_work()
846 cam_iosched_has_more_trim(isc) || in cam_iosched_has_work()
847 cam_iosched_has_flagged_work(isc); in cam_iosched_has_work()
852 cam_iosched_iop_stats_init(struct cam_iosched_softc *isc, struct iop_stats *ios) in cam_iosched_iop_stats_init() argument
867 ios->softc = isc; in cam_iosched_iop_stats_init()
876 struct cam_iosched_softc *isc; in cam_iosched_limiter_sysctl() local
881 isc = ios->softc; in cam_iosched_limiter_sysctl()
893 cam_periph_lock(isc->periph); in cam_iosched_limiter_sysctl()
902 cam_periph_unlock(isc->periph); in cam_iosched_limiter_sysctl()
906 callout_reset(&isc->ticker, hz / isc->quanta, cam_iosched_ticker, isc); in cam_iosched_limiter_sysctl()
907 isc->flags |= CAM_IOSCHED_FLAG_CALLOUT_ACTIVE; in cam_iosched_limiter_sysctl()
909 cam_periph_unlock(isc->periph); in cam_iosched_limiter_sysctl()
913 cam_periph_unlock(isc->periph); in cam_iosched_limiter_sysctl()
922 struct cam_iosched_softc *isc; in cam_iosched_control_type_sysctl() local
927 isc = clp->softc; in cam_iosched_control_type_sysctl()
942 cam_periph_lock(isc->periph); in cam_iosched_control_type_sysctl()
944 cam_periph_unlock(isc->periph); in cam_iosched_control_type_sysctl()
1013 cam_iosched_iop_stats_sysctl_init(struct cam_iosched_softc *isc, struct iop_stats *ios, char *name) in cam_iosched_iop_stats_sysctl_init() argument
1018 ios->sysctl_tree = SYSCTL_ADD_NODE(&isc->sysctl_ctx, in cam_iosched_iop_stats_sysctl_init()
1019 SYSCTL_CHILDREN(isc->sysctl_tree), OID_AUTO, name, in cam_iosched_iop_stats_sysctl_init()
1107 cam_iosched_cl_sysctl_init(struct cam_iosched_softc *isc) in cam_iosched_cl_sysctl_init() argument
1113 clp = &isc->cl; in cam_iosched_cl_sysctl_init()
1114 clp->sysctl_tree = SYSCTL_ADD_NODE(&isc->sysctl_ctx, in cam_iosched_cl_sysctl_init()
1115 SYSCTL_CHILDREN(isc->sysctl_tree), OID_AUTO, "control", in cam_iosched_cl_sysctl_init()
1163 struct cam_iosched_softc *isc; in cam_iosched_init() local
1165 isc = malloc(sizeof(*isc), M_CAMSCHED, M_NOWAIT | M_ZERO); in cam_iosched_init()
1166 if (isc == NULL) in cam_iosched_init()
1168 isc->disk = dp; in cam_iosched_init()
1169 isc->schedfnc = schedfnc; in cam_iosched_init()
1172 printf("CAM IOSCHEDULER Allocating entry at %p\n", isc); in cam_iosched_init()
1174 isc->sort_io_queue = -1; in cam_iosched_init()
1175 bioq_init(&isc->bio_queue); in cam_iosched_init()
1176 bioq_init(&isc->trim_queue); in cam_iosched_init()
1179 bioq_init(&isc->write_queue); in cam_iosched_init()
1180 isc->read_bias = default_read_bias; in cam_iosched_init()
1181 isc->current_read_bias = 0; in cam_iosched_init()
1182 isc->quanta = min(hz, 200); in cam_iosched_init()
1183 cam_iosched_iop_stats_init(isc, &isc->read_stats); in cam_iosched_init()
1184 cam_iosched_iop_stats_init(isc, &isc->write_stats); in cam_iosched_init()
1185 cam_iosched_iop_stats_init(isc, &isc->trim_stats); in cam_iosched_init()
1186 isc->trim_stats.max = 1; /* Trims are special: one at a time for now */ in cam_iosched_init()
1187 isc->last_time = sbinuptime(); in cam_iosched_init()
1188 callout_init_mtx(&isc->ticker, cam_periph_mtx(periph), 0); in cam_iosched_init()
1189 isc->periph = periph; in cam_iosched_init()
1190 cam_iosched_cl_init(&isc->cl, isc); in cam_iosched_init()
1191 callout_reset(&isc->ticker, hz / isc->quanta, cam_iosched_ticker, isc); in cam_iosched_init()
1192 isc->flags |= CAM_IOSCHED_FLAG_CALLOUT_ACTIVE; in cam_iosched_init()
1195 *iscp = isc; in cam_iosched_init()
1205 cam_iosched_fini(struct cam_iosched_softc *isc) in cam_iosched_fini() argument
1207 if (isc) { in cam_iosched_fini()
1208 cam_iosched_flush(isc, NULL, ENXIO); in cam_iosched_fini()
1210 cam_iosched_iop_stats_fini(&isc->read_stats); in cam_iosched_fini()
1211 cam_iosched_iop_stats_fini(&isc->write_stats); in cam_iosched_fini()
1212 cam_iosched_iop_stats_fini(&isc->trim_stats); in cam_iosched_fini()
1213 cam_iosched_cl_sysctl_fini(&isc->cl); in cam_iosched_fini()
1214 if (isc->sysctl_tree) in cam_iosched_fini()
1215 if (sysctl_ctx_free(&isc->sysctl_ctx) != 0) in cam_iosched_fini()
1217 if (isc->flags & CAM_IOSCHED_FLAG_CALLOUT_ACTIVE) { in cam_iosched_fini()
1218 callout_drain(&isc->ticker); in cam_iosched_fini()
1219 isc->flags &= ~ CAM_IOSCHED_FLAG_CALLOUT_ACTIVE; in cam_iosched_fini()
1222 free(isc, M_CAMSCHED); in cam_iosched_fini()
1230 void cam_iosched_sysctl_init(struct cam_iosched_softc *isc, in cam_iosched_sysctl_init() argument
1238 &isc->sort_io_queue, 0, in cam_iosched_sysctl_init()
1242 &isc->trim_goal, 0, in cam_iosched_sysctl_init()
1246 &isc->trim_goal, 0, in cam_iosched_sysctl_init()
1253 isc->sysctl_tree = SYSCTL_ADD_NODE(&isc->sysctl_ctx, in cam_iosched_sysctl_init()
1256 n = SYSCTL_CHILDREN(isc->sysctl_tree); in cam_iosched_sysctl_init()
1257 ctx = &isc->sysctl_ctx; in cam_iosched_sysctl_init()
1259 cam_iosched_iop_stats_sysctl_init(isc, &isc->read_stats, "read"); in cam_iosched_sysctl_init()
1260 cam_iosched_iop_stats_sysctl_init(isc, &isc->write_stats, "write"); in cam_iosched_sysctl_init()
1261 cam_iosched_iop_stats_sysctl_init(isc, &isc->trim_stats, "trim"); in cam_iosched_sysctl_init()
1262 cam_iosched_cl_sysctl_init(isc); in cam_iosched_sysctl_init()
1266 &isc->read_bias, default_read_bias, in cam_iosched_sysctl_init()
1271 &isc->quanta, 0, cam_iosched_quanta_sysctl, "I", in cam_iosched_sysctl_init()
1276 &isc->total_ticks, 0, in cam_iosched_sysctl_init()
1281 &isc->load, 0, in cam_iosched_sysctl_init()
1286 &isc->max_lat, 0, in cam_iosched_sysctl_init()
1292 cam_iosched_set_latfcn(struct cam_iosched_softc *isc, in cam_iosched_set_latfcn() argument
1296 isc->latfcn = fnp; in cam_iosched_set_latfcn()
1297 isc->latarg = argp; in cam_iosched_set_latfcn()
1323 cam_iosched_set_trim_goal(struct cam_iosched_softc *isc, int goal) in cam_iosched_set_trim_goal() argument
1326 isc->trim_goal = goal; in cam_iosched_set_trim_goal()
1330 cam_iosched_set_trim_ticks(struct cam_iosched_softc *isc, int trim_ticks) in cam_iosched_set_trim_ticks() argument
1333 isc->trim_ticks = trim_ticks; in cam_iosched_set_trim_ticks()
1342 cam_iosched_flush(struct cam_iosched_softc *isc, struct devstat *stp, int err) in cam_iosched_flush() argument
1344 bioq_flush(&isc->bio_queue, stp, err); in cam_iosched_flush()
1345 bioq_flush(&isc->trim_queue, stp, err); in cam_iosched_flush()
1348 bioq_flush(&isc->write_queue, stp, err); in cam_iosched_flush()
1354 cam_iosched_get_write(struct cam_iosched_softc *isc) in cam_iosched_get_write() argument
1367 bp = bioq_first(&isc->write_queue); in cam_iosched_get_write()
1378 if (bioq_first(&isc->bio_queue) && isc->current_read_bias) { in cam_iosched_get_write()
1382 isc->current_read_bias, isc->write_stats.queued, in cam_iosched_get_write()
1383 isc->read_stats.queued); in cam_iosched_get_write()
1384 isc->current_read_bias--; in cam_iosched_get_write()
1392 if (cam_iosched_limiter_iop(&isc->write_stats, bp) != 0) { in cam_iosched_get_write()
1395 isc->write_stats.state_flags |= IOP_RATE_LIMITED; in cam_iosched_get_write()
1403 isc->current_read_bias = isc->read_bias; in cam_iosched_get_write()
1404 bioq_remove(&isc->write_queue, bp); in cam_iosched_get_write()
1406 isc->write_stats.queued--; in cam_iosched_get_write()
1407 isc->write_stats.total++; in cam_iosched_get_write()
1408 isc->write_stats.pending++; in cam_iosched_get_write()
1412 isc->write_stats.state_flags &= ~IOP_RATE_LIMITED; in cam_iosched_get_write()
1421 cam_iosched_put_back_trim(struct cam_iosched_softc *isc, struct bio *bp) in cam_iosched_put_back_trim() argument
1423 bioq_insert_head(&isc->trim_queue, bp); in cam_iosched_put_back_trim()
1424 if (isc->queued_trims == 0) in cam_iosched_put_back_trim()
1425 isc->last_trim_tick = ticks; in cam_iosched_put_back_trim()
1426 isc->queued_trims++; in cam_iosched_put_back_trim()
1428 isc->trim_stats.queued++; in cam_iosched_put_back_trim()
1429 isc->trim_stats.total--; /* since we put it back, don't double count */ in cam_iosched_put_back_trim()
1430 isc->trim_stats.pending--; in cam_iosched_put_back_trim()
1442 cam_iosched_next_trim(struct cam_iosched_softc *isc) in cam_iosched_next_trim() argument
1446 bp = bioq_first(&isc->trim_queue); in cam_iosched_next_trim()
1449 bioq_remove(&isc->trim_queue, bp); in cam_iosched_next_trim()
1450 isc->queued_trims--; in cam_iosched_next_trim()
1451 isc->last_trim_tick = ticks; /* Reset the tick timer when we take trims */ in cam_iosched_next_trim()
1453 isc->trim_stats.queued--; in cam_iosched_next_trim()
1454 isc->trim_stats.total++; in cam_iosched_next_trim()
1455 isc->trim_stats.pending++; in cam_iosched_next_trim()
1468 cam_iosched_get_trim(struct cam_iosched_softc *isc) in cam_iosched_get_trim() argument
1474 if (!cam_iosched_has_more_trim(isc)) in cam_iosched_get_trim()
1477 bp = bioq_first(&isc->trim_queue); in cam_iosched_get_trim()
1487 if (bioq_first(&isc->bio_queue) && isc->current_read_bias) { in cam_iosched_get_trim()
1491 isc->current_read_bias, isc->trim_stats.queued, in cam_iosched_get_trim()
1492 isc->read_stats.queued); in cam_iosched_get_trim()
1493 isc->current_read_bias--; in cam_iosched_get_trim()
1500 isc->current_read_bias = isc->read_bias; in cam_iosched_get_trim()
1513 if (cam_iosched_limiter_iop(&isc->trim_stats, bp) != 0) { in cam_iosched_get_trim()
1516 isc->trim_stats.state_flags |= IOP_RATE_LIMITED; in cam_iosched_get_trim()
1519 isc->current_read_bias = isc->read_bias; in cam_iosched_get_trim()
1520 isc->trim_stats.state_flags &= ~IOP_RATE_LIMITED; in cam_iosched_get_trim()
1523 return cam_iosched_next_trim(isc); in cam_iosched_get_trim()
1555 cam_iosched_next_bio(struct cam_iosched_softc *isc) in cam_iosched_next_bio() argument
1566 if ((bp = cam_iosched_get_trim(isc)) != NULL) in cam_iosched_next_bio()
1576 if ((bp = cam_iosched_get_write(isc)) != NULL) in cam_iosched_next_bio()
1585 for (bp = bioq_first(&isc->bio_queue); bp != NULL; in cam_iosched_next_bio()
1594 if (cam_iosched_rate_limited(&isc->read_stats) || in cam_iosched_next_bio()
1595 cam_iosched_limiter_iop(&isc->read_stats, bp) != 0) { in cam_iosched_next_bio()
1596 isc->read_stats.state_flags |= IOP_RATE_LIMITED; in cam_iosched_next_bio()
1599 isc->read_stats.state_flags &= ~IOP_RATE_LIMITED; in cam_iosched_next_bio()
1609 if (cam_iosched_rate_limited(&isc->write_stats) || in cam_iosched_next_bio()
1610 cam_iosched_limiter_iop(&isc->write_stats, bp) != 0) { in cam_iosched_next_bio()
1611 isc->write_stats.state_flags |= IOP_RATE_LIMITED; in cam_iosched_next_bio()
1614 isc->write_stats.state_flags &= ~IOP_RATE_LIMITED; in cam_iosched_next_bio()
1624 bp = bioq_first(&isc->bio_queue); in cam_iosched_next_bio()
1628 bioq_remove(&isc->bio_queue, bp); in cam_iosched_next_bio()
1632 isc->read_stats.queued--; in cam_iosched_next_bio()
1633 isc->read_stats.total++; in cam_iosched_next_bio()
1634 isc->read_stats.pending++; in cam_iosched_next_bio()
1636 isc->write_stats.queued--; in cam_iosched_next_bio()
1637 isc->write_stats.total++; in cam_iosched_next_bio()
1638 isc->write_stats.pending++; in cam_iosched_next_bio()
1654 cam_iosched_queue_work(struct cam_iosched_softc *isc, struct bio *bp) in cam_iosched_queue_work() argument
1674 while (bioq_first(&isc->trim_queue) && in cam_iosched_queue_work()
1676 nbp = bioq_takefirst(&isc->trim_queue); in cam_iosched_queue_work()
1697 if (bp->bio_cmd == BIO_FLUSH && isc->trim_ticks > 0) in cam_iosched_queue_work()
1698 isc->last_trim_tick = ticks - isc->trim_ticks - 1; in cam_iosched_queue_work()
1705 bioq_insert_tail(&isc->trim_queue, bp); in cam_iosched_queue_work()
1706 if (isc->queued_trims == 0) in cam_iosched_queue_work()
1707 isc->last_trim_tick = ticks; in cam_iosched_queue_work()
1708 isc->queued_trims++; in cam_iosched_queue_work()
1710 isc->trim_stats.in++; in cam_iosched_queue_work()
1711 isc->trim_stats.queued++; in cam_iosched_queue_work()
1715 else if (do_dynamic_iosched && isc->read_bias != 0 && in cam_iosched_queue_work()
1717 if (cam_iosched_sort_queue(isc)) in cam_iosched_queue_work()
1718 bioq_disksort(&isc->write_queue, bp); in cam_iosched_queue_work()
1720 bioq_insert_tail(&isc->write_queue, bp); in cam_iosched_queue_work()
1724 isc->write_stats.in++; in cam_iosched_queue_work()
1725 isc->write_stats.queued++; in cam_iosched_queue_work()
1730 if (cam_iosched_sort_queue(isc)) in cam_iosched_queue_work()
1731 bioq_disksort(&isc->bio_queue, bp); in cam_iosched_queue_work()
1733 bioq_insert_tail(&isc->bio_queue, bp); in cam_iosched_queue_work()
1738 isc->read_stats.in++; in cam_iosched_queue_work()
1739 isc->read_stats.queued++; in cam_iosched_queue_work()
1741 isc->write_stats.in++; in cam_iosched_queue_work()
1742 isc->write_stats.queued++; in cam_iosched_queue_work()
1752 cam_iosched_schedule(struct cam_iosched_softc *isc, struct cam_periph *periph) in cam_iosched_schedule() argument
1755 if (cam_iosched_has_work(isc)) in cam_iosched_schedule()
1763 cam_iosched_trim_done(struct cam_iosched_softc *isc) in cam_iosched_trim_done() argument
1766 isc->flags &= ~CAM_IOSCHED_FLAG_TRIM_ACTIVE; in cam_iosched_trim_done()
1774 cam_iosched_bio_complete(struct cam_iosched_softc *isc, struct bio *bp, in cam_iosched_bio_complete() argument
1785 retval = cam_iosched_limiter_iodone(&isc->write_stats, bp); in cam_iosched_bio_complete()
1787 isc->write_stats.errs++; in cam_iosched_bio_complete()
1788 isc->write_stats.out++; in cam_iosched_bio_complete()
1789 isc->write_stats.pending--; in cam_iosched_bio_complete()
1791 retval = cam_iosched_limiter_iodone(&isc->read_stats, bp); in cam_iosched_bio_complete()
1793 isc->read_stats.errs++; in cam_iosched_bio_complete()
1794 isc->read_stats.out++; in cam_iosched_bio_complete()
1795 isc->read_stats.pending--; in cam_iosched_bio_complete()
1798 isc->trim_stats.errs++; in cam_iosched_bio_complete()
1799 isc->trim_stats.out++; in cam_iosched_bio_complete()
1800 isc->trim_stats.pending--; in cam_iosched_bio_complete()
1812 cam_iosched_io_metric_update(isc, sim_latency, bp); in cam_iosched_bio_complete()
1818 if (isc->latfcn && isc->max_lat != 0 && sim_latency > isc->max_lat) in cam_iosched_bio_complete()
1819 isc->latfcn(isc->latarg, sim_latency, bp); in cam_iosched_bio_complete()
1831 cam_iosched_submit_trim(struct cam_iosched_softc *isc) in cam_iosched_submit_trim() argument
1834 isc->flags |= CAM_IOSCHED_FLAG_TRIM_ACTIVE; in cam_iosched_submit_trim()
1841 cam_iosched_set_sort_queue(struct cam_iosched_softc *isc, int val) in cam_iosched_set_sort_queue() argument
1844 isc->sort_io_queue = val; in cam_iosched_set_sort_queue()
1848 cam_iosched_has_work_flags(struct cam_iosched_softc *isc, uint32_t flags) in cam_iosched_has_work_flags() argument
1850 return isc->flags & flags; in cam_iosched_has_work_flags()
1854 cam_iosched_set_work_flags(struct cam_iosched_softc *isc, uint32_t flags) in cam_iosched_set_work_flags() argument
1856 isc->flags |= flags; in cam_iosched_set_work_flags()
1860 cam_iosched_clr_work_flags(struct cam_iosched_softc *isc, uint32_t flags) in cam_iosched_clr_work_flags() argument
1862 isc->flags &= ~flags; in cam_iosched_clr_work_flags()
2051 cam_iosched_io_metric_update(struct cam_iosched_softc *isc, in cam_iosched_io_metric_update() argument
2056 cam_iosched_update(&isc->read_stats, sim_latency, bp); in cam_iosched_io_metric_update()
2059 cam_iosched_update(&isc->write_stats, sim_latency, bp); in cam_iosched_io_metric_update()
2062 cam_iosched_update(&isc->trim_stats, sim_latency, bp); in cam_iosched_io_metric_update()
2086 struct cam_iosched_softc *isc; in DB_SHOW_COMMAND() local
2092 isc = (struct cam_iosched_softc *)addr; in DB_SHOW_COMMAND()
2093 db_printf("pending_reads: %d\n", isc->read_stats.pending); in DB_SHOW_COMMAND()
2094 db_printf("min_reads: %d\n", isc->read_stats.min); in DB_SHOW_COMMAND()
2095 db_printf("max_reads: %d\n", isc->read_stats.max); in DB_SHOW_COMMAND()
2096 db_printf("reads: %d\n", isc->read_stats.total); in DB_SHOW_COMMAND()
2097 db_printf("in_reads: %d\n", isc->read_stats.in); in DB_SHOW_COMMAND()
2098 db_printf("out_reads: %d\n", isc->read_stats.out); in DB_SHOW_COMMAND()
2099 db_printf("queued_reads: %d\n", isc->read_stats.queued); in DB_SHOW_COMMAND()
2100 db_printf("Read Q len %d\n", biolen(&isc->bio_queue)); in DB_SHOW_COMMAND()
2101 db_printf("pending_writes: %d\n", isc->write_stats.pending); in DB_SHOW_COMMAND()
2102 db_printf("min_writes: %d\n", isc->write_stats.min); in DB_SHOW_COMMAND()
2103 db_printf("max_writes: %d\n", isc->write_stats.max); in DB_SHOW_COMMAND()
2104 db_printf("writes: %d\n", isc->write_stats.total); in DB_SHOW_COMMAND()
2105 db_printf("in_writes: %d\n", isc->write_stats.in); in DB_SHOW_COMMAND()
2106 db_printf("out_writes: %d\n", isc->write_stats.out); in DB_SHOW_COMMAND()
2107 db_printf("queued_writes: %d\n", isc->write_stats.queued); in DB_SHOW_COMMAND()
2108 db_printf("Write Q len %d\n", biolen(&isc->write_queue)); in DB_SHOW_COMMAND()
2109 db_printf("pending_trims: %d\n", isc->trim_stats.pending); in DB_SHOW_COMMAND()
2110 db_printf("min_trims: %d\n", isc->trim_stats.min); in DB_SHOW_COMMAND()
2111 db_printf("max_trims: %d\n", isc->trim_stats.max); in DB_SHOW_COMMAND()
2112 db_printf("trims: %d\n", isc->trim_stats.total); in DB_SHOW_COMMAND()
2113 db_printf("in_trims: %d\n", isc->trim_stats.in); in DB_SHOW_COMMAND()
2114 db_printf("out_trims: %d\n", isc->trim_stats.out); in DB_SHOW_COMMAND()
2115 db_printf("queued_trims: %d\n", isc->trim_stats.queued); in DB_SHOW_COMMAND()
2116 db_printf("Trim Q len %d\n", biolen(&isc->trim_queue)); in DB_SHOW_COMMAND()
2117 db_printf("read_bias: %d\n", isc->read_bias); in DB_SHOW_COMMAND()
2118 db_printf("current_read_bias: %d\n", isc->current_read_bias); in DB_SHOW_COMMAND()
2120 (isc->flags & CAM_IOSCHED_FLAG_TRIM_ACTIVE) ? "yes" : "no"); in DB_SHOW_COMMAND()