Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Mar 2006 12:29:06 -0800
From:      Luigi Rizzo <rizzo@icir.org>
To:        current@freebsd.org
Subject:   interesting(?) data on network interrupt servicing
Message-ID:  <20060322122906.A41691@xorpc.icir.org>

next in thread | raw e-mail | index | archive | help
Paolo Pisati (SoC work on in-kernel natd) has done some
work on measuring where time is spent in servicing network
interrupts, and what's the difference between 4.x and 7.x,
and probably has some interesting result.

He ran the experiments on his laptop (1.6-1.7GHz with APIC
and bfe card), recording timestamps with the TSC in various
places of the code path.
What he saw is that the basic operation of the interruopt
service routine, bfe_intr() is approx the same on 4.x and 7.x,
taking between 7-10k TSC ticks on a lightly loaded system.
On 7.x, however, there is an extra 9-10k TSC ticks (which may
well be hidden in the assembly code on 4.x, but not sure about
that) which apparently are spent half in this line in
sys/i386/i386/intr_machdep.c

    if (thread)
	isrc->is_pic->pic_disable_source(isrc, PIC_EOI);

and the other half in the block (removed in 1.274, but we
ran the tests on an earlier version) in sys/kern/kern_synch.c

-	binuptime(&new_switchtime);
-	bintime_add(&p->p_rux.rux_runtime, &new_switchtime);
-	bintime_sub(&p->p_rux.rux_runtime, PCPU_PTR(switchtime));

I have good reasons to believe that on modern hardware the
replacement, cpu_ticks() , is quite a bit faster.
I have no idea, though, why the other pic_disable_source()
is so expensive. The 4-5k TSC ticks are approx 3us

Any clues ?

Paolo should follow up in the next days with graphs and more data.

	cheers
	luigi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060322122906.A41691>