Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Dec 2005 06:02:43 +1100
From:      Peter Jeremy <PeterJeremy@optushome.com.au>
To:        kama <kama@pvp.se>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: cpu-timer rate
Message-ID:  <20051202190242.GL32006@cirb503493.alcatel.com.au>
In-Reply-To: <20051202142731.H92866@ns1.as.pvp.se>
References:  <20051202142731.H92866@ns1.as.pvp.se>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2005-Dec-02 14:32:58 +0100, kama wrote:
>I am just wondering why the cpu-timer is doubled from what I set in
>kern.hz?
>
># vmstat -i
>interrupt                          total       rate
...
>cpu0: timer                     14314031       1999
>Total                           14750922       2060
>
># sysctl -a | grep hz
>kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 }

There's only a single timer but FreeBSD needs two independent clocks.
The 'tick' clock is used to update the TOD counters and decide when to
reschedule processes.  The 'stathz' is used to collect statistics on
CPU utilisation ('profhz' is used instead if any process is using
profiling).  Since processes tend to synchronize to 'tick' the
statistics clock needs to be independent to ensure that a CPU utilisation
is correctly allocated.

In order to simulate two clocks, FreeBSD runs the hardware clock at a
high rate and uses two different divisors for the soft clocks (/2 for
tick, /3 for profhz and /15 for stathz).  Larger divisors are better
for utilisation statistics but increase clock interrupt overheads.

-- 
Peter Jeremy



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