TESTERS: if_sis patch
Poul-Henning Kamp
phk at phk.freebsd.dk
Tue Sep 2 02:44:56 PDT 2003
Please try out this patch if you have a "sis" based network card.
It sets a 400usec interrupt holdoff, and this seems to have a profound
impact on network performance.
The patch is relative to FreeBSD-current but probably applies on
5.0, 5.1 and even 4.x as well.
In my tests, using a soekris 4801 computer I have found:
fetch(1)'ing a ftp:// file from a server on the local segment
is 43.2% +/-0.7% faster (from around 385 to 640 kBps).
FTP of the same file is 10.6% +/-1.2% faster (from 3.11 to
3.44 MB/sec)
Checking out src/sbin from a NFS mounted CVSROOT was 17.0%
+/-1.0% faster.
Poul-Henning
PS: I don't know why fetch(1) is so slow compared to ftp(1) ?
Index: if_sis.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/if_sis.c,v
retrieving revision 1.82
diff -u -r1.82 if_sis.c
--- if_sis.c 22 Aug 2003 07:13:21 -0000 1.82
+++ if_sis.c 2 Sep 2003 09:09:03 -0000
@@ -107,7 +107,7 @@
static struct sis_type sis_devs[] = {
{ SIS_VENDORID, SIS_DEVICEID_900, "SiS 900 10/100BaseTX" },
{ SIS_VENDORID, SIS_DEVICEID_7016, "SiS 7016 10/100BaseTX" },
- { NS_VENDORID, NS_DEVICEID_DP83815, "NatSemi DP83815 10/100BaseTX" },
+ { NS_VENDORID, NS_DEVICEID_DP83815, "NatSemi DP83815/6 10/100BaseTX" },
{ 0, 0, NULL }
};
@@ -2030,6 +2030,15 @@
* Cancel pending I/O and free all RX/TX buffers.
*/
sis_stop(sc);
+
+ if (sc->sis_type == SIS_TYPE_83815) {
+ /*
+ * Hold off interrupts for 400usec.
+ * This number is emperically found on a Soekris 4801
+ */
+ printf("IHR=%x\n", CSR_READ_4(sc, NS_IHR));
+ CSR_WRITE_4(sc, NS_IHR, 0x100 | 4);
+ }
mii = device_get_softc(sc->sis_miibus);
Index: if_sisreg.h
===================================================================
RCS file: /home/ncvs/src/sys/pci/if_sisreg.h,v
retrieving revision 1.22
diff -u -r1.22 if_sisreg.h
--- if_sisreg.h 22 Jul 2003 01:35:09 -0000 1.22
+++ if_sisreg.h 2 Sep 2003 09:09:03 -0000
@@ -75,6 +75,7 @@
#define SIS_GPIO 0xB8
/* NS DP83815 registers */
+#define NS_IHR 0x1C
#define NS_CLKRUN 0x3C
#define NS_BMCR 0x80
#define NS_BMSR 0x84
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
More information about the freebsd-current
mailing list