On Tue, Apr 05, 2011 at 02:16:33PM +0200, Peter Hallin wrote: > OK, here's a little update on this problem. > > As I told you earlier in the thread, we did some successful tests with > the 4-port Intel 82576 card, HOWEVER we only tested two ports, em0 och > em1. When the card later was put into the production machine we chose > to use em0 as the unprocteded if and em2 as the protected. > > When we connected the machine to the router, we only got a throughput > at about 100 Mbit/s 100% CPU, busy handling interrupts, while the cards > only generate about 3000 intr/s each. > > As it turns out, the problem is the same as with the dual port cards, > but now it only applies to em2 and em3. If we any of those ports, the > machine get bogged down completely and the livelock rate is about 10 per > second. > > If we only use em0 and em1, it performs really good. With real traffic, > we've had some peaks at about 750 Mbit/s at 80% CPU and when testing > with iperf we get 936 Mbit/s at 90%i CPU (8200 intr/s). > > This leads me to believe that there are some IRQ conflicts that may or > may not be caused by the driver. > > This is the vmstat -iz output of the production machine: > > interrupt total rate > irq0/clock 743258 99 > irq144/acpi0 0 0 > irq114/ppb2 0 0 > irq112/em0 52133849 7004 > irq113/em1 52036815 6991 > irq114/em2 0 0 > irq115/em3 0 0 > irq115/ppb6 0 0 > irq112/em4 41319 5 > irq113/em5 0 0 > irq114/ppb10 0 0 > irq96/uhci0 0 0 > irq97/uhci1 0 0 > irq96/uhci2 0 0 > irq97/uhci3 0 0 > irq96/ehci0 0 0 > irq98/pciide0 8162 1 > irq99/pciide1 0 0 > irq99/ichiic0 0 0 > irq145/com0 0 0 > irq146/com1 0 0 > irq147/pckbc0 645 0 > irq148/pckbc0 0 0 > Total 104964048 14102 >
Can you give the following diff a spin and see if that makes the card act faster. This disables the ppb hotplug interrupt which is shared with the em2 and em3 interrupts. -- :wq Claudio Index: ppb.c =================================================================== RCS file: /cvs/src/sys/dev/pci/ppb.c,v retrieving revision 1.47 diff -u -p -r1.47 ppb.c --- ppb.c 30 Dec 2010 00:58:22 -0000 1.47 +++ ppb.c 5 Apr 2011 12:32:34 -0000 @@ -169,10 +169,11 @@ ppbattach(struct device *parent, struct /* Check for PCI Express capabilities and setup hotplug support. */ if (pci_get_capability(pc, pa->pa_tag, PCI_CAP_PCIEXPRESS, &sc->sc_cap_off, ®) && (reg & PCI_PCIE_XCAP_SI)) { +#if 0 if (pci_intr_map(pa, &ih) == 0) sc->sc_intrhand = pci_intr_establish(pc, ih, IPL_TTY, ppb_intr, sc, self->dv_xname); - +#endif if (sc->sc_intrhand) { printf(": %s", pci_intr_string(pc, ih));