Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Sep 2009 15:42:26 +0200
From:      Luigi Rizzo <rizzo@iet.unipi.it>
To:        rihad <rihad@mail.ru>
Cc:        freebsd-net@freebsd.org
Subject:   Re: [POLLING] strange interrupt/system load
Message-ID:  <20090912134226.GD46135@onelab2.iet.unipi.it>
In-Reply-To: <4AAB4D56.30207@mail.ru>
References:  <4AAB4D56.30207@mail.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Sep 12, 2009 at 12:27:18PM +0500, rihad wrote:
> The box experiences ~230 mbit/s traffic flow through it. I've doubled 
> some sysctls after reading polling(4):
> kern.polling.each_burst=10 # was: 5
> kern.polling.burst_max=350 # was: 150
> 
> FreeBSD 7.2-RELEASE-p3 amd64
> HZ=1000
> 
> Now for the fun part.
> 
> With kern.polling.idle_poll = 1 top shows:
> CPU:  0.0% user,  0.0% nice, 26.9% system,  3.1% interrupt, 70.0% idle
> ~8000 interrupts/s total according to systat -vmstat:
> 1999 cpu0: time
> 2000 cpu1: time
> 1999 cpu2: time
> 1999 cpu3: time
> 
> With kern.polling.idle_poll = 0 top shows:
> CPU:  0.0% user,  0.0% nice,  0.0% system, 13.9% interrupt, 86.0% idle
> Still the same ~8000 clock interrupts/s.
> 
> Under both scenarios polling is enabled on both em0 and em1 through 
> ifconfig.
> 
> 
> 1) Why is the interrupt load relatively high with polling enabled?
> 2) How come 13.9% interrupts are not also in the first scenario if their 
> total rate is the same (~8000)?

Polling enabled means that at every tick (and in the idle loop if you
also have idle_poll enabled) you are checking the status of the
interface even if there is no traffic. The polling handler is probably
accounted for as 'interrupt'. The load you see shoud not be too
different to what you see without polling.

Enabling idle_poll moves part of the work to the idle loop(s) which
are accounted as 'system' time. What happens here is that part of
the work is taken away from the polling handlers that run on each
tick so you see a reduction on the interrupt time, whereas as
Bruce said, one CPU is using 100% of its time (or 25% of the total
work capacity) to run the idle_poll loop.

cheers
luigi



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