summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2000-11-21 19:55:21 +0000
committermarkm <markm@FreeBSD.org>2000-11-21 19:55:21 +0000
commit92be31d0b583b42dee21f006ea62f231ad132326 (patch)
treed6b561d8a67702e3c67ef7b6a1873d03c8cc57cc /share
parentdfa19cb0cec51bbb1fba802ceae5f4b58cad3892 (diff)
downloadFreeBSD-src-92be31d0b583b42dee21f006ea62f231ad132326.zip
FreeBSD-src-92be31d0b583b42dee21f006ea62f231ad132326.tar.gz
Add a consistent API to a feature that most modern CPUs have; a fast
counter register in-CPU. This is to be used as a fast "timer", where linearity is more important than time, and multiple lines in the linearity caused by multiple CPUs in an SMP machine is not a problem. This adds no code whatsoever to the FreeBSD kernel until it is actually used, and then as a single-instruction inline routine (except for the 80386 and 80486 where it is some more inline code around nanotime(9). Reviewed by: bde, kris, jhb
Diffstat (limited to 'share')
-rw-r--r--share/man/man9/get_cyclecount.997
-rw-r--r--share/man/man9/get_cyclecounter.997
2 files changed, 194 insertions, 0 deletions
diff --git a/share/man/man9/get_cyclecount.9 b/share/man/man9/get_cyclecount.9
new file mode 100644
index 0000000..9bcc887
--- /dev/null
+++ b/share/man/man9/get_cyclecount.9
@@ -0,0 +1,97 @@
+.\" Copyright (c) 2000 Mark R V Murray
+.\" All rights reserved.
+.\"
+.\" 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 AUTHOR 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd November 20, 2000
+.Dt get_cyclecounter 9
+.Os
+.Sh NAME
+.Nm get_cyclecounter
+.Nd get the CPU's fast counter register contents
+.Sh SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <machine/cpu.h>
+.Ft u_int64_t
+.Fn get_cyclecounter "void"
+.Sh DESCRIPTION
+The
+.Fn get_cyclecounter
+functon uses a register
+available in most modern CPUs
+to return a value
+that is monotonically increasing
+inside each CPU.
+.Pp
+In SMP systems,
+there will be a number of
+separate monotonic sequences,
+one for each CPU running.
+The value in the SMP case is
+selected from one of these sequences,
+dependent on which CPU
+was scheduled to service the request.
+.Pp
+The speed and maximum value
+of each counter
+is CPU-dependant.
+Some CPUs
+(such as the
+.Tn Intel
+80386 and 80486)
+do not have such a register,
+so
+.Fn get_cyclecounter
+on these platforms
+returns the number of nanoseconds
+represented by the
+structure returned by
+.Xr nanotime 9 .
+.Pp
+The
+.Tn Pentium
+processors all use the
+.Li TSC
+register.
+.Pp
+The
+.Tn Alpha processors use the
+.Li PCC
+register.
+.Pp
+The
+.Tn IA64
+processors use the
+.Li AR.ITC
+register.
+.Sh SEE ALSO
+.Xr nanotime 9
+.Sh HISTORY
+The
+.Nm
+function first appeared in
+.Fx 5.0
+.Sh AUTHORS
+This manual page was written by
+.An Mark Murray Aq markm@FreeBSD.org .
diff --git a/share/man/man9/get_cyclecounter.9 b/share/man/man9/get_cyclecounter.9
new file mode 100644
index 0000000..9bcc887
--- /dev/null
+++ b/share/man/man9/get_cyclecounter.9
@@ -0,0 +1,97 @@
+.\" Copyright (c) 2000 Mark R V Murray
+.\" All rights reserved.
+.\"
+.\" 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 AUTHOR 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd November 20, 2000
+.Dt get_cyclecounter 9
+.Os
+.Sh NAME
+.Nm get_cyclecounter
+.Nd get the CPU's fast counter register contents
+.Sh SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <machine/cpu.h>
+.Ft u_int64_t
+.Fn get_cyclecounter "void"
+.Sh DESCRIPTION
+The
+.Fn get_cyclecounter
+functon uses a register
+available in most modern CPUs
+to return a value
+that is monotonically increasing
+inside each CPU.
+.Pp
+In SMP systems,
+there will be a number of
+separate monotonic sequences,
+one for each CPU running.
+The value in the SMP case is
+selected from one of these sequences,
+dependent on which CPU
+was scheduled to service the request.
+.Pp
+The speed and maximum value
+of each counter
+is CPU-dependant.
+Some CPUs
+(such as the
+.Tn Intel
+80386 and 80486)
+do not have such a register,
+so
+.Fn get_cyclecounter
+on these platforms
+returns the number of nanoseconds
+represented by the
+structure returned by
+.Xr nanotime 9 .
+.Pp
+The
+.Tn Pentium
+processors all use the
+.Li TSC
+register.
+.Pp
+The
+.Tn Alpha processors use the
+.Li PCC
+register.
+.Pp
+The
+.Tn IA64
+processors use the
+.Li AR.ITC
+register.
+.Sh SEE ALSO
+.Xr nanotime 9
+.Sh HISTORY
+The
+.Nm
+function first appeared in
+.Fx 5.0
+.Sh AUTHORS
+This manual page was written by
+.An Mark Murray Aq markm@FreeBSD.org .
OpenPOWER on IntegriCloud