public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Performance is weird (fwd)
@ 2001-03-15 18:08 Manfred Spraul
  0 siblings, 0 replies; 4+ messages in thread
From: Manfred Spraul @ 2001-03-15 18:08 UTC (permalink / raw)
  To: sampsa; +Cc: linux-kernel

One difference between idle and a running user space app is that the
kernel->user space return path checks for pending softirqs, but the ide
thread doesn't.

Perhaps cpu_idle() should also check for pending softirq's before
hlt'ing?

idle thread is running.
* hw interrupt
* * hw interrupt handler
* * * packet arrives
* * * softirq marked
* * hw interrupt handler returns
* do_softirq
* * net_rx called
* * * an hw interrupt interrupts net_rx
* * * * a second packet arrives, softirq marked again.
* * * hw interrupt returns
* * net_rx returns
* do_softirq notices that net_rx is queued again, but doesn't process
    it immediately (otherwise it would cause an endless loop)
* hw interrupt returns
idle thread sleeps again.
!! one packet is waiting unprocessed

What about adding if(softirq_active...) do_softirq() into default_idle?
--
    Manfred



^ permalink raw reply	[flat|nested] 4+ messages in thread
* Re: Performance is weird (fwd)
@ 2001-03-15 19:58 Manfred Spraul
  0 siblings, 0 replies; 4+ messages in thread
From: Manfred Spraul @ 2001-03-15 19:58 UTC (permalink / raw)
  To: sampsa, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 203 bytes --]

I've attached a patch.
I tried to trigger the problem with my 10 MBit ne2k-pci connection, but
without success.

Could you try it?
I've tested it with -ac17, and it applies to 2.4.2 cleanly.

--
	Manfred

[-- Attachment #2: patch-proc --]
[-- Type: text/plain, Size: 399 bytes --]

--- 2.4/arch/i386/kernel/process.c	Thu Feb 22 22:28:52 2001
+++ build-2.4/arch/i386/kernel/process.c	Thu Mar 15 20:35:12 2001
@@ -81,6 +81,11 @@
 {
 	if (current_cpu_data.hlt_works_ok && !hlt_counter) {
 		__cli();
+		if (softirq_active(smp_processor_id()) & softirq_mask(smp_processor_id())) {
+			__sti();
+			do_softirq();
+			return;
+		}
 		if (!current->need_resched)
 			safe_halt();
 		else

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Performance is weird (fwd)
@ 2001-03-15 15:25 Sampsa Ranta
  2001-03-24 12:42 ` Sampsa Ranta
  0 siblings, 1 reply; 4+ messages in thread
From: Sampsa Ranta @ 2001-03-15 15:25 UTC (permalink / raw)
  To: linux-kernel, linux-net

--
Subject: Performance is weird
The following message was first posted to linux-atm mailing list, it
is followed with one of the replies I got, thanks Werner Almesberger
<Werner.Almesberger@epfl.ch>.

Actually, with 2.4.3pre4 kernel I got something like 66Mbit/s which were
better than the 2.4.2 results.
--

 Hello,

I am running a set of ForeRunner LE 155 cards on two Athlon 900
machines. The cards are currently back to back connected. I am having
problems with performance and this problem seems a bit curious to me.

The boxes are running kernel versions 2.4.2 with the builtin ATM
functionality.

First when the machine is idle and i run ttcp_atm, the record is:

[root@akvagw test]# ./ttcp_atm -t -a -s 0.90
ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5013  atm  -> 0.90
ttcp-t: socket
ttcp-t: 16777216 bytes in 3.805066 real seconds = 4305.838585 KB/sec
(35.273430
Mb/sec)

I can get the same result when I run it as many times as I want when the
machine is idle, however, the performance of the increases a lot when I
give the processor something to do, for example compile the kernel, when
gcc is compiling the kernel, I get better results:

[root@akvagw test]# ./ttcp_atm -t -a -s 0.90
ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5013  atm  -> 0.90
ttcp-t: socket
ttcp-t: 16777216 bytes in 0.997561 real seconds = 16424.058278 KB/sec (134.545885 Mb/sec)

For the record, the remote machine does not affect the tests, because the
machine just sends data even when none listens.

Can someone explain, and maybe do something, please? Or am I supposed to
compile kernel all the time on my production ATM routers.

Same seems to apply when I stream UDP via my 3C905C card to one of my
routers, first I get 60Mbytes / s, then 94Mbytes/s when I start to compile
the kernel.

 Thanks,
   Sampsa Ranta
   sampsa@netsonic.fi


"
Don't know where those "negative CPU cycles" come from. It's probably
a driver problem. Could be that either you're triggering scheduling of a
softirq or such, where there normally wouldn't be one (but should be),
or that there's a race condition leading to the loss of an event
(softirq, tasklet, wait queue, etc.), and background activity makes this
happen in the correct order.
"






^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2001-03-24 12:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-03-15 18:08 Performance is weird (fwd) Manfred Spraul
  -- strict thread matches above, loose matches on Subject: below --
2001-03-15 19:58 Manfred Spraul
2001-03-15 15:25 Sampsa Ranta
2001-03-24 12:42 ` Sampsa Ranta

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox