Date: Mon, 30 Oct 2006 20:34:44 -0700 From: Scott Long <scottl@samsco.org> To: mjacob@freebsd.org Cc: freebsd-scsi@freebsd.org Subject: Re: patch to add a tunable that disables ORDERED tag emission Message-ID: <4546C454.5090005@samsco.org> In-Reply-To: <20061030191525.A19102@ns1.feral.com> References: <20061030191525.A19102@ns1.feral.com>
next in thread | previous in thread | raw e-mail | index | archive | help
I recall that Gibbs was a strong believer in the ordered tag, should probably get his input for this. Scott mjacob@freebsd.org wrote: > > I could have sworn we talked about this some time back - ordered tag > usage really kills performance in a lot of cases, so let's have a > tunable where we can disable the emission of ORDERED tags at regular > intervals. > > > ------------------------------------------------------------------------ > > ==== //depot/projects/newisp/cam/scsi/scsi_da.c#3 - /home/FreeBSD/p4/newisp/cam/scsi/scsi_da.c ==== > @@ -491,8 +491,14 @@ > #define DA_DEFAULT_RETRY 4 > #endif > > +#ifndef DA_DEFAULT_SEND_ORDERED > +#define DA_DEFAULT_SEND_ORDERED 1 > +#endif > + > + > static int da_retry_count = DA_DEFAULT_RETRY; > static int da_default_timeout = DA_DEFAULT_TIMEOUT; > +static int da_send_ordered = DA_DEFAULT_SEND_ORDERED; > > SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0, > "CAM Direct Access Disk driver"); > @@ -502,6 +508,9 @@ > SYSCTL_INT(_kern_cam_da, OID_AUTO, default_timeout, CTLFLAG_RW, > &da_default_timeout, 0, "Normal I/O timeout (in seconds)"); > TUNABLE_INT("kern.cam.da.default_timeout", &da_default_timeout); > +SYSCTL_INT(_kern_cam_da, OID_AUTO, da_send_ordered, CTLFLAG_RW, > + &da_send_ordered, 0, "Send Ordered Tags"); > +TUNABLE_INT("kern.cam.da.da_send_ordered", &da_send_ordered); > > /* > * DA_ORDEREDTAG_INTERVAL determines how often, relative > @@ -851,7 +860,7 @@ > if (status != CAM_REQ_CMP) { > printf("da: Failed to attach master async callback " > "due to status 0x%x!\n", status); > - } else { > + } else if (da_send_ordered) { > > /* > * Schedule a periodic event to occasionally send an > @@ -1921,24 +1930,25 @@ > { > struct da_softc *softc; > int s; > + if (da_send_ordered) { > + for (softc = SLIST_FIRST(&softc_list); > + softc != NULL; > + softc = SLIST_NEXT(softc, links)) { > + s = splsoftcam(); > + if ((softc->ordered_tag_count == 0) > + && ((softc->flags & DA_FLAG_WENT_IDLE) == 0)) { > + softc->flags |= DA_FLAG_NEED_OTAG; > + } > + if (softc->outstanding_cmds > 0) > + softc->flags &= ~DA_FLAG_WENT_IDLE; > > - for (softc = SLIST_FIRST(&softc_list); > - softc != NULL; > - softc = SLIST_NEXT(softc, links)) { > - s = splsoftcam(); > - if ((softc->ordered_tag_count == 0) > - && ((softc->flags & DA_FLAG_WENT_IDLE) == 0)) { > - softc->flags |= DA_FLAG_NEED_OTAG; > + softc->ordered_tag_count = 0; > + splx(s); > } > - if (softc->outstanding_cmds > 0) > - softc->flags &= ~DA_FLAG_WENT_IDLE; > - > - softc->ordered_tag_count = 0; > - splx(s); > + /* Queue us up again */ > + timeout(dasendorderedtag, NULL, > + (da_default_timeout * hz) / DA_ORDEREDTAG_INTERVAL); > } > - /* Queue us up again */ > - timeout(dasendorderedtag, NULL, > - (da_default_timeout * hz) / DA_ORDEREDTAG_INTERVAL); > } > > /* > ==== //depot/projects/newisp/dev/bge/if_bge.c#8 - /home/FreeBSD/p4/newisp/dev/bge/if_bge.c ==== > @@ -32,7 +32,7 @@ > */ > > #include <sys/cdefs.h> > -__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.150 2006/10/03 09:31:49 glebius Exp $"); > +__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.151 2006/10/19 08:03:22 scottl Exp $"); > > /* > * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. > @@ -1823,7 +1823,7 @@ > * Allocate the parent bus DMA tag appropriate for PCI. > */ > error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev),/* parent */ > - PAGE_SIZE, 0, /* alignment, boundary */ > + 1, 0, /* alignment, boundary */ > BUS_SPACE_MAXADDR, /* lowaddr */ > BUS_SPACE_MAXADDR, /* highaddr */ > NULL, NULL, /* filter, filterarg */ > @@ -2499,6 +2499,12 @@ > } > } > > + /* > + * Write the magic number to the firmware mailbox at 0xb50 > + * so that the driver can synchronize with the firmware. > + */ > + bge_writemem_ind(sc, BGE_SOFTWARE_GENCOMM, BGE_MAGIC_NUMBER); > + > /* Issue global reset */ > bge_writereg_ind(sc, BGE_MISC_CFG, reset); > > @@ -2535,11 +2541,6 @@ > CSR_WRITE_4(sc, BGE_MARB_MODE, BGE_MARBMODE_ENABLE); > > /* > - * Prevent PXE restart: write a magic number to the > - * general communications memory at 0xB50. > - */ > - bge_writemem_ind(sc, BGE_SOFTWARE_GENCOMM, BGE_MAGIC_NUMBER); > - /* > * Poll the value location we just wrote until > * we see the 1's complement of the magic number. > * This indicates that the firmware initialization > > > ------------------------------------------------------------------------ > > _______________________________________________ > freebsd-scsi@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-scsi > To unsubscribe, send any mail to "freebsd-scsi-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4546C454.5090005>