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
[EMAIL PROTECTED]         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to