diff options
author | mav <mav@FreeBSD.org> | 2018-02-01 21:12:09 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2018-02-01 21:12:09 +0000 |
commit | e38b1b844d045fb5dcf4db6f2795f7797022ca17 (patch) | |
tree | bb0e81a7e8f7be3ea107384c4472cdf5350d413d | |
parent | 564c222db819a26521c7a49aab8cf41b58957045 (diff) | |
download | FreeBSD-src-e38b1b844d045fb5dcf4db6f2795f7797022ca17.zip FreeBSD-src-e38b1b844d045fb5dcf4db6f2795f7797022ca17.tar.gz |
MFC r323625 (by imp): Allow multiple TRIMs to be done for nda
Don't call cam_iosched_trim_done or cam_iosched_submit_trim for nda
since its hardware can handle almost an arbitrary number of TRIMs and
we don't have to be careful to only ever do one.
-rw-r--r-- | sys/cam/nvme/nvme_da.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c index ae42935..8b95c16 100644 --- a/sys/cam/nvme/nvme_da.c +++ b/sys/cam/nvme/nvme_da.c @@ -918,7 +918,12 @@ ndastart(struct cam_periph *periph, union ccb *start_ccb) nda_nvme_trim(softc, &start_ccb->nvmeio, dsm_range, 1); start_ccb->ccb_h.ccb_state = NDA_CCB_TRIM; start_ccb->ccb_h.flags |= CAM_UNLOCKED; - cam_iosched_submit_trim(softc->cam_iosched); /* XXX */ + /* + * Note: We can have multiple TRIMs in flight, so we don't call + * cam_iosched_submit_trim(softc->cam_iosched); + * since that forces the I/O scheduler to only schedule one at a time. + * On NVMe drives, this is a performance disaster. + */ goto out; } case BIO_FLUSH: @@ -1005,7 +1010,11 @@ ndadone(struct cam_periph *periph, union ccb *done_ccb) TAILQ_INIT(&queue); TAILQ_CONCAT(&queue, &softc->trim_req.bps, bio_queue); #endif - cam_iosched_trim_done(softc->cam_iosched); + /* + * Since we can have multiple trims in flight, we don't + * need to call this here. + * cam_iosched_trim_done(softc->cam_iosched); + */ ndaschedule(periph); cam_periph_unlock(periph); #ifdef notyet |