diff options
author | markm <markm@FreeBSD.org> | 2000-11-21 19:55:21 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2000-11-21 19:55:21 +0000 |
commit | 92be31d0b583b42dee21f006ea62f231ad132326 (patch) | |
tree | d6b561d8a67702e3c67ef7b6a1873d03c8cc57cc /share | |
parent | dfa19cb0cec51bbb1fba802ceae5f4b58cad3892 (diff) | |
download | FreeBSD-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.9 | 97 | ||||
-rw-r--r-- | share/man/man9/get_cyclecounter.9 | 97 |
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 . |