Hi,
From your descriptions , you are calling " netif_rx" in the interrrupt
context. So netif_rx just queues the packets in the processor specific
queue and simply mark the NET_RX_SOFTIRQ softirq FLAG.
Next time when the kernel thread "sofirqd" is scheduled , it executes
the RX softirq. As the version you are using is a non-preemptive kernel,
the control paths are all non-deterministic. So the longer interrupt
processing
will definitely hog the whole system and the non-deterministic scheduling
of the "softirqd" will also degrade the overall performance.
Cheers !
suresh
----- Original Message -----
From: "Kevin Curtis" <kevin.curtis@farsite.co.uk>
To: <linux-net@vger.kernel.org>
Sent: Wednesday, November 13, 2002 7:44 PM
Subject: possible delays in netif_rx
> Hi,
> I have been enhancing our sync card driver to use DMA to copy a
> received frame from the cards memory into a Kernel buffer. We previously
> used to use memcpy_fromio. The card has 8 receive buffers, which are used
> in turn. I have been debugging a problem where sometimes my Kernel module
> hasn't been able to keep up with the card.
>
> The line rate is 8Meg, and the packet size if 1500, so thats about
> 1.5 ms per frame. So it would take 12 ms to run out of buffers.
>
> I used an analyser for debugging and I soon found that from requesting the
> DMA to completing the processing of the received frame was on average 280
> us, but sometimes could take over 3 ms. Homing this down a bit more, I
> found that the call to netif_rx could take a variable amount of time.
This
> was on average 5 us, but could sometimes be as much as 3 milliseconds.
>
> This I think explains my problem, and I can see that I need to separate
the
> DMA complete processing from processing the received frame, including
> passing it up the stack. I guess I need to process the frame in a bottom
> half.
>
> However, I'm puzzled by what is happening in netif_rx. It looks as though
> it is just queuing it for later processing. Can anyone explain what is
> happening in netif_rx to cause this wide variation in execution time. The
> return from netif_rx is always NET_RX_SUCCESS. The Kernel I'm currently
> using is 2.4.17
>
>
> Many Thanks
>
> Kevin
>
> -----Original Message-----
> From: Carsten Langgaard [mailto:carstenl@mips.com]
> Sent: 13 November 2002 13:35
> To: Ralf Baechle; linux-mips@linux-mips.org; tsbogend@alpha.franken.de;
> linux-net@vger.kernel.org; kevink@mips.com
> Subject: BUG in the PCNET32 ethernet driver
>
>
> I finally found the problem that caused a lot of problem with an
> ethernet throughput test, that we have been running.
> It turned out the problem is related to a bug in the PCNET32 driver,
> when you are running it on a system that doesn't support hardware
> coherency.
>
> The problem is the way the AMD ethernet driver is using the PCI DMA
> mapping routines.
> When the driver releases a receive DMA buffer to the controller for
> later DMA transfer it call the PCI DMA flushing routine as it should,
> but it calls it with a length equal to 0. The driver is assuming that
> the length field in the buffer structure is equal to the actual length
> of the buffer, but this field is first updated when we are receiving the
> packet (and call the skb_put function).
>
> I have attached a patch, that solve this problem.
> Please note that the patch is against Ralf Baechle latest linux_2_4
> tree.
>
> /Carsten
>
>
>
> --
> _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
> |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
> | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
> TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
> Denmark http://www.mips.com
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-net" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
This archive was generated by hypermail 2b29 : Fri Nov 15 2002 - 22:00:01 EST