Date: Sun, 24 Dec 2006 09:01:09 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: Scott Long <scottl@samsco.org> Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org, John Polstra <jdp@polstra.com> Subject: Re: cvs commit: src/sys/dev/bge if_bge.c Message-ID: <20061224085231.Y37996@fledge.watson.org> In-Reply-To: <458E11AE.2000004@samsco.org> References: <XFMail.20061223102713.jdp@polstra.com> <20061223213014.U35809@fledge.watson.org> <458E11AE.2000004@samsco.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 24 Dec 2006, Scott Long wrote:
>> I try this experiement every few years, and generally don't measure much
>> improvement. I'll try it again with 10gbps early next year once back in
>> the office again. The more interesting transition is between the link
>> layer and the network layer, which is high on my list of topics to look
>> into in the next few weeks. In particular, reworking the ifqueue handoff.
>> The tricky bit is balancing latency, overhead, and concurrency...
>>
>> FYI, there are several sets of patches floating around to modify if_em to
>> hand off queues of packets to the link layer, etc. They probably need
>> updating, of course, since if_em has changed quite a bit in the last year.
>> In my implementaiton, I add a new input routine that accepts mbuf packet
>> queues.
>
> Have you tested this with more than just your simple netblast and netperf
> tests? Have you measured CPU usage during your tests? With 10Gb coming,
> pipelined processing of RX packets is becoming an interesting topic for all
> OSes from a number of companies. I understand your feeling about the
> bottleneck being higher up than at just if_input. We'll see how this holds
> up.
In my previous test runs, I was generally testing two general scenarios:
(1) Local sink - sinking small and large packet sizes to a single socket at a
high rate.
(2) Local source - sourcing small and large packet sizes via a single socket
at a high rate.
(3) IP forwarding - both unidirectional and bidirectional packet streams
acrossan IP forwarding host with small and large packet sizes.
>From the perspective of optimizing these particular paths, small packet sizes
best reveal processing overhead up to about the TCP/socket buffer layer on
modern hardware (DMA, etc). The uni/bidirectional axis is interesting because
it helps reveal the impact of the direct dispatch vs. netisr dispatch choice
for the IP layer with respect to exercising parallelism. I didn't explicitly
measure CPU, but as the configurations max out the CPUs in my test bed,
typically any significant CPU reduction is measurable in an improvement in
throughput. For example, I was easily able to measure the CPU reduction in
switching from using the socket reference to the file descriptor reference in
sosend() on small packet transmit, which was a relatively minor functional
change in locking and reference counting.
I have tentative plans to explicitly measuring cycle counts between context
switches and during dispatches, but have not yet implemented that in the new
setup. I expect to have a chance to set up these new test runs and get back
into experimenting with the dispatch model between the device driver, link
layer, and network layer sometime in mid-January. As the test runs are very
time-consuming, I'd welcome suggestions on the testing before, rather than
after, I run them. :-)
Robert N M Watson
Computer Laboratory
University of Cambridge
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061224085231.Y37996>
