Date: Tue, 25 Sep 2007 14:57:56 +0200 (CEST) From: Oliver Fromme <olli@lurza.secnetix.de> To: freebsd-stable@FreeBSD.ORG, matrix@itlegion.ru Subject: Re: device polling and weird timer interrupt count from vmstat Message-ID: <200709251257.l8PCvuZ8001535@lurza.secnetix.de> In-Reply-To: <001301c7fed4$7e5f38c0$0c00a8c0@Artem>
next in thread | previous in thread | raw e-mail | index | archive | help
Artem Kuchin wrote: > I enabled device polling in the kernel, in nics and > set HZ=1000. HZ=1000 is the default anyway. You only need to set it if you want a value other than 1000. For example, on my notebook I have set HZ=600 because that machine often used for various media playback (video). 600 is a multiple of 24, 25 and 30, which are common frame rates of video files. Aligning the kernel's scheduling quantum with the frame rate improves video playback. On a very fast processor I would probably use HZ=1200, but mine is only an older single-core. > How, when i do > > omni2# vmstat -i > > i see > > interrupt total rate > irq14: ata0 47 0 > irq15: ata1 41 0 > irq28: em0 2268 4 > irq72: twe0 58380 120 > cpu0: timer 965994 1995 > cpu3: timer 1 0 > cpu1: timer 1 0 > cpu2: timer 965857 1995 > Total 1992589 4116 Looks perfectly normal. > What i don't understand is why timer rate on each cpu is 1995? I have > set it to 1000, not 1995 or 2000. I have seen it showing 2000 on > another box. The timer frequencies are not necessarily the same as the HZ setting. They are related, but don't have to be the same. It depends on several things, in particular the type of your processor and sysctl kern.timecounter settings. There are several formulas, dependencies and requirements for time counters. For example, the frequency must be set so the counter does not roll over in less than about max(2 msec, 2/HZ sec), which depends on the bit width of the counter (see src/sys/sys/timetc.h). On the other hand, you want a counter which runs as fast as possible, so you get better precision for time keeping. For those reasons the cpu timer can be set to a multiple of HZ. I've made a quick survery on a few machines around me (unless otherwise noted, all of these run FreeBSD/i386 6-stable and have the default of HZ=1000): Pentium III, 800 MHz: cpu0: timer 1893955760 1999 Xeon 5160, 3000 MHz: cpu0: timer 2466663483 1996 Athlon64, 2200 MHz: cpu0: timer 3964659397 960 Athlon64 X2, 2x 2000 MHz, 7-current: cpu0: timer 847083650 2000 cpu1: timer 847081624 2000 VIA C3 Nehemiah, 1000 MHz, HZ=250: irq0: clk 167288669 249 > 3) Is timer int really generated on each cpu? Am i really wasting cpu > time on ~4000 ints per second? 4000 ints per second is rather nothing on any modern CPU. Have a look at the top(1) display of an otherwise idle system. The "%interrupt" column should be zero, even if it's processing 4000 timer interrupts per second. As far as I know, the cpu timer interrupt handler is very light- weight. > 4) does twe driver use polling? whay about twa? No, they don't. They aren't even NIC drivers. Currently polling is only implemented for (some of) the NIC drivers. > how to check it in the sources? The polling(4) manual page lists all supported devices. Best regards Oliver -- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M. Handelsregister: Registergericht Muenchen, HRA 74606, Geschäftsfuehrung: secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün- chen, HRB 125758, Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart FreeBSD-Dienstleistungen, -Produkte und mehr: http://www.secnetix.de/bsd "When your hammer is C++, everything begins to look like a thumb." -- Steve Haflich, in comp.lang.c++
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200709251257.l8PCvuZ8001535>