2004-04-19 12:47:04

by John Que

[permalink] [raw]
Subject: NIC inerrupt

Hello,

I want to count the number of times I reach an NIC receive
interrupt.

I added a global static variable of type int , and initialized
it to 0 ; each time I am in the rx_interrupt of the card I incerement
it by one;
I got large , non sensible numbers after one or two seconds;

So for debug I added printk each time I increment it in rx_interrupt.

What I see is that there are unreasonable jumps in the number

for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
increments a little sequentially to 4580, and the jums again to
11000 ;

Is it got to do with it that this is in interrupt?
Any idea what it can be ?


(I also tried to declare it as static in the rx_interrupt method
and the same happened)

Thnx,
John

_________________________________________________________________
Tired of spam? Get advanced junk mail protection with MSN 8.
http://join.msn.com/?page=features/junkmail


2004-04-19 12:55:19

by Denis Vlasenko

[permalink] [raw]
Subject: Re: NIC inerrupt

On Monday 19 April 2004 15:46, John Que wrote:
> Hello,
>
> I want to count the number of times I reach an NIC receive
> interrupt.
>
> I added a global static variable of type int , and initialized
> it to 0 ; each time I am in the rx_interrupt of the card I incerement
> it by one;
> I got large , non sensible numbers after one or two seconds;
>
> So for debug I added printk each time I increment it in rx_interrupt.
>
> What I see is that there are unreasonable jumps in the number
>
> for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
> increments a little sequentially to 4580, and the jums again to
> 11000 ;
>
> Is it got to do with it that this is in interrupt?
> Any idea what it can be ?
>
>
> (I also tried to declare it as static in the rx_interrupt method
> and the same happened)

Show your code
--
vda

2004-04-19 14:40:22

by Bart Samwel

[permalink] [raw]
Subject: Re: NIC inerrupt



John Que wrote:
> Hello,
>
> I want to count the number of times I reach an NIC receive
> interrupt.
>
> I added a global static variable of type int , and initialized
> it to 0 ; each time I am in the rx_interrupt of the card I incerement
> it by one;
> I got large , non sensible numbers after one or two seconds;
>
> So for debug I added printk each time I increment it in rx_interrupt.
>
> What I see is that there are unreasonable jumps in the number
>
> for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
> increments a little sequentially to 4580, and the jums again to
> 11000 ;
>
> Is it got to do with it that this is in interrupt?
> Any idea what it can be ?

You're probably reading the kernel output from syslog. Syslog
periodically reads out the printks from the kernel. With the amount of
printks you're doing you are probably printing info for about 4500
interrupts between every time syslog checks for new kernel output, while
the kernel buffer that is used to store this information can only handle
enough data for 80 interrupts.

--Bart

2004-04-19 15:02:03

by John Que

[permalink] [raw]
Subject: Re: NIC inerrupt

Hello,
thnxs;
You are right in that I send about 4500-5000 packets in a second.
I will try to print it every 1000 packets and see.
john


>From: Bart Samwel <[email protected]>
>To: John Que <[email protected]>
>CC: [email protected]
>Subject: Re: NIC inerrupt
>Date: Mon, 19 Apr 2004 16:40:08 +0200
>
>
>
>John Que wrote:
>>Hello,
>>
>>I want to count the number of times I reach an NIC receive
>>interrupt.
>>
>>I added a global static variable of type int , and initialized
>>it to 0 ; each time I am in the rx_interrupt of the card I incerement
>>it by one;
>>I got large , non sensible numbers after one or two seconds;
>>
>>So for debug I added printk each time I increment it in rx_interrupt.
>>
>>What I see is that there are unreasonable jumps in the number
>>
>>for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
>>increments a little sequentially to 4580, and the jums again to
>>11000 ;
>>
>>Is it got to do with it that this is in interrupt?
>>Any idea what it can be ?
>
>You're probably reading the kernel output from syslog. Syslog periodically
>reads out the printks from the kernel. With the amount of printks you're
>doing you are probably printing info for about 4500 interrupts between
>every time syslog checks for new kernel output, while the kernel buffer
>that is used to store this information can only handle enough data for 80
>interrupts.
>
>--Bart

_________________________________________________________________
Add photos to your messages with MSN 8. Get 2 months FREE*.
http://join.msn.com/?page=features/featuredemail

2004-04-20 14:04:29

by Axel Weiß

[permalink] [raw]
Subject: Re: NIC inerrupt

Am Montag, 19. April 2004 14:46 schrieb John Que:
> Hello,
>
> I want to count the number of times I reach an NIC receive
> interrupt.
>
> I added a global static variable of type int , and initialized
> it to 0 ; each time I am in the rx_interrupt of the card I incerement
> it by one;
> I got large , non sensible numbers after one or two seconds;
>
> So for debug I added printk each time I increment it in rx_interrupt.
>
> What I see is that there are unreasonable jumps in the number
>
> for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
> increments a little sequentially to 4580, and the jums again to
> 11000 ;
>
> Is it got to do with it that this is in interrupt?
> Any idea what it can be ?
>
>
> (I also tried to declare it as static in the rx_interrupt method
> and the same happened)

Probably you didn't declare your count variable 'volatile'?

Axel

--
Humboldt-Universit?t zu Berlin
Institut f?r Informatik
Signalverarbeitung und Mustererkennung
Dipl.-Inf. Axel Wei?
Rudower Chaussee 25
12489 Berlin-Adlershof
+49-30-2093-3050

2004-04-20 15:41:24

by Richard B. Johnson

[permalink] [raw]
Subject: Re: NIC inerrupt

On Tue, 20 Apr 2004, Axel [iso-8859-15] Wei? wrote:

> Am Montag, 19. April 2004 14:46 schrieb John Que:
> > Hello,
> >
> > I want to count the number of times I reach an NIC receive
> > interrupt.
> >
> > I added a global static variable of type int , and initialized
> > it to 0 ; each time I am in the rx_interrupt of the card I incerement
> > it by one;
> > I got large , non sensible numbers after one or two seconds;
> >
> > So for debug I added printk each time I increment it in rx_interrupt.
> >
> > What I see is that there are unreasonable jumps in the number
> >
> > for instance , it inceremnts sequntially from 1 to 80,then jums to 4500,
> > increments a little sequentially to 4580, and the jums again to
> > 11000 ;
> >
> > Is it got to do with it that this is in interrupt?
> > Any idea what it can be ?
> >
> >
> > (I also tried to declare it as static in the rx_interrupt method
> > and the same happened)
>
> Probably you didn't declare your count variable 'volatile'?
>
> Axel
>
> --
> Humboldt-Universit?t zu Berlin
> Institut f?r Informatik
> Signalverarbeitung und Mustererkennung
> Dipl.-Inf. Axel Wei?
> Rudower Chaussee 25
> 12489 Berlin-Adlershof
> +49-30-2093-3050

How about `cat /proc/interrupts`. That should tell him how
many interrupts the NIC got..

CPU0
0: 123073 IO-APIC-edge timer
1: 1131 IO-APIC-edge keyboard
2: 0 XT-PIC cascade
17: 18550 IO-APIC-level BusLogic BT-958
18: 69272 IO-APIC-level eth0 <----------
NMI: 0
LOC: 123029
ERR: 0
MIS: 0

Do the simple stuff first. Only get compilcated if necessary.


Cheers,
Dick Johnson
Penguin : Linux version 2.4.26 on an i686 machine (5596.77 BogoMips).
Note 96.31% of all statistics are fiction.