Interrupt performance

Slawa Olhovchenkov slw at zxy.spb.ru
Sat Jan 29 10:24:23 UTC 2011


On Sat, Jan 29, 2011 at 02:43:07PM +1100, Bruce Evans wrote:

> On Sat, 29 Jan 2011, Slawa Olhovchenkov wrote:
> 
> > On Sat, Jan 29, 2011 at 07:52:11AM +1100, Bruce Evans wrote:
> >>
> >> To see how much CPU is actually available, run something else and see how
> >> fast it runs.  A simple counting loops works well on UP systems.
> >
> > ===
> > #include <stdio.h>
> > #include <sys/time.h>
> >
> > int Dummy;
> >
> > int
> > main(int argc, char *argv[])
> > {
> > long int count,i,dt;
> > struct timeval st,et;
> >
> > count = atol(argv[1]);
> >
> > gettimeofday(&st, NULL);
> > for(i=count;i;i--) Dummy++;
> > gettimeofday(&et, NULL);
> > dt = (et.tv_sec-st.tv_sec)*1000000 + et.tv_usec-st.tv_usec;
> > printf("Elapsed %d us\n",dt);
> > }
> > ===
> >
> > This is ok?
> 
> It's better not to compete with the interrupt handler in the kernel by
> spinning making syscalls, but that will do for a start.

In this programm inner loop don't contain any syscall.
Better varian -- loop with syscalls?

> > ./loop 2000000000
> >
> > FreeBSD
> > 1 process: Elapsed 7554193 us
> > 2 process: Elapsed 14493692 us
> > netperf + 1 process: Elapsed 21403644 us
> 
> This shows about 35% user 65% network.
> 
> > Linux
> > 1 process: Elapsed 7524843 us
> > 2 process: Elapsed 14995866 us
> > netperf + 1 process: Elapsed 14107670 us
> 
> This shows about 53% user 47% network.
> 
> So FreeBSD has about 18% more network overhead (absolute: 65-47), or
> about 38% more network overhead (relative: (65-47)/47).  Not too
> surprising -- the context switches alone might cost that.

For only 14K vs 56K interrupt. 152% more network overhead per one interrupt.
And I see drammaticaly less number of context switches in linux stats
(by dstat).

> BTW, even -current vs my version of FreeBSD-5.2 has 10-20% more network
> overhead (relative) for tx, apparently due to bloat in the network
> stack.  This apparently has nothing to do with hardware.  The slowdown
> is much the same with bge (heavily modified in my version) and em
> (barely modified).  One thing that I modify in both drivers is increase
> the tx ifq length by a massive amount (from about 512 to about 20000).
> This must be bad for overhead because such a large queue cannot fit
> in the L2 cache.  A large amount and perhaps more than half of NIC
> overhead consists of waiting for cache misses.  The slowdown in -current
> might be caused by minor bloat crossing a threshold and thus causing
> just one more cache miss every packet or 2.

I read disccursion about support DCA in FreeBSD, sound nice.

> >> Normal profiling works poorly (I see you found my old mail about high
> >> resolution profiling).  Linux might be misreporting the overhead for
> >
> > I think next server will be support PMC.
> > Report from PMC still poorly?
> 
> I should be adequate, but I prefer my version of perfmon which can
> count cache misses precisely for every function.  But without patches,
> perfmon is even more broken than high resolution kernel profiling.

Can I use your version of perfmon? How? I don't have expirence with
any kernel profiling.

> >> ...
> >> generate too many interrupts and don't have much or any way to control
> >> this.  Linux will certainly be about to handle 56K int/S better than
> >> FreeBSD since it doesn't have heavyweight interrupt threads AFAIK.
> >> FreeBSD also has "fast" interrupts, which are much like normal interrupts
> >> used to be in FreeBSD.  I don't know if your NIC driver uses these.  I
> >
> > re0: [FILTER]
> >
> > I think this is answer ([FILTER]), but I don't understand this answer :).
> 
> [FILTER] means "fast".  re used to unconditionally use "fast" interrupts
> and a task queue, which IMO is a bad way to program an interrupt
> handler, but yongari@ recently overhauled re (again :-) so that it now
> doesn't use fast interrupts by default for the MSI/MSIX case .  (BTW,

Ineresting, but I don't think this help for this case -- old PCI
chip, old CPU, old RAM, old matherboard -- all old. I don't try to get
wirespeed gigabit performance from this old box, I try to compare
relative performance FreeBSD vs Linux (in last time I got many
feedback about poor network performance FreeBSD vs Linux).

> it still bogusly uses INTR_MPSAFE for the fast interrupt bus_setup_intr().)
> The overhaul probably also reduces interrupt overhead if it works on
> your hardware, just be reducing the interrupt frequency.  I don't
> understand what moderates the interrupt frequency in the MSI case.
> 
> >> I don't really know if this is low-end, but guess all RealTeks are :-).
> >
> > FreeBSD support interrupt moderation on this chip, and chip support
> > TOE :)
> 
> The support was poor according to yongari@'s long messages about
> improving it.  With working interrupt moderation, you just don't get
> an interrupt rate of even 14KHz, except transiently.  4KHz would be
> all I would be happy with on a 1-core 1.6GHz CPU.  Since re is so
> primitive, yongari@ only managed to limit the rate to 20KHz.  (Is this
> only for the non-MSI case, with the MSI case better even before?)
> Linux with its reduced interrupt latency can handled your observed
> 56KHz without losing by so much.  My 2-core Athlon (Turion) with its
> low-end bge 5705, whose brokenness consists mainly of:
>      completely broken interrupt moderation
>      can't handle full 1Gbps -- saturates at about 300Mbps
>      CPU and/or DMA resources used for 300Mbps are about the same as for
>        a bge 5701 at a full 1Mbps
> saturates at about 100 KHz bge interrupts.  This many interrupts takes
> about all of 1 CPU to handle the hardware part and 20% of another to
> generate packets.  The system saturates in much the same way under
> WinXP.  I only recently got a version of Linux to boot on this system
> and haven't tried network performance tests under Linux on it.
> 
> Bruce
> _______________________________________________
> freebsd-performance at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-performance
> To unsubscribe, send any mail to "freebsd-performance-unsubscribe at freebsd.org"


More information about the freebsd-performance mailing list