Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

.\"	$NetBSD: hz.9,v 1.9 2010/03/26 19:40:41 wiz Exp $
.\"
.\" Copyright (c) 2001 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
.\" by Thomas Klausner.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd March 25, 2010
.Dt HZ 9
.Os
.Sh NAME
.Nm hz ,
.Nm tick ,
.Nm tickadj ,
.Nm stathz ,
.Nm profhz
.Nd system time model
.Sh SYNOPSIS
.In sys/kernel.h
.Pp
.Vt extern int hz;
.Vt extern int tick;
.Vt extern int tickadj;
.Vt extern int stathz;
.Vt extern int profhz;
.\" XXX: .Vt extern int schedhz; ?
.Sh DESCRIPTION
The essential clock handling routines in
.Nx
are written to operate with two timers that run independently of each other.
The main clock, running
.Va hz
times per second, is used to keep track of real time.
.Pp
In another words,
.Va hz
specifies the number of times the
.Xr hardclock 9
timer ticks per second.
Normally
.Xr hardclock 9
increments time by
.Va tick
each time it is called.
If the system clock has drifted,
.Xr adjtime 2
may be used to skew this increment based on the rate of
.Va tickadj .
.Pp
The second timer is used to gather timing statistics.
It also handles kernel and user profiling.
If the second timer is programmable,
it is randomized to avoid aliasing between the two clocks.
The mean frequency of the second timer is
.Va stathz .
If a separate clock is not available,
.Va stathz
is set to
.Va hz .
.Pp
If profiling is enabled, the clock normally used to drive
.Va stathz
may be run at a higher rate
.Va profhz ,
which is required to be a multiple of
.Va stathz .
This will give higher resolution profiling information.
.Pp
These system variables are also available as
.Em struct clockinfo
from
.Xr sysctl 3
and
.Sy kern.clockrate
from
.Xr sysctl 8 .
The
.Va hz
is hardware-dependent; it can be overridden
(if the machine dependent code supports this) by defining
.Dv HZ
in the kernel configuration file (see
.Xr options 4 ) .
Only override the default value if you really know what you are doing.
.Sh SEE ALSO
.Xr adjtime 2 ,
.Xr callout 9 ,
.Xr hardclock 9 ,
.Xr microtime 9 ,
.Xr time_second 9