xref: /freebsd/share/man/man9/cpuset.9 (revision 8b584e9d744dad3975bfca6998340db30c5d3eb3)
15546be25SConrad Meyer.\" Copyright (c) 2015 Conrad Meyer <cem@FreeBSD.org>
25546be25SConrad Meyer.\" All rights reserved.
35546be25SConrad Meyer.\"
45546be25SConrad Meyer.\" Redistribution and use in source and binary forms, with or without
55546be25SConrad Meyer.\" modification, are permitted provided that the following conditions
65546be25SConrad Meyer.\" are met:
75546be25SConrad Meyer.\" 1. Redistributions of source code must retain the above copyright
85546be25SConrad Meyer.\"    notice, this list of conditions and the following disclaimer.
95546be25SConrad Meyer.\" 2. Redistributions in binary form must reproduce the above copyright
105546be25SConrad Meyer.\"    notice, this list of conditions and the following disclaimer in the
115546be25SConrad Meyer.\"    documentation and/or other materials provided with the distribution.
125546be25SConrad Meyer.\"
135546be25SConrad Meyer.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
145546be25SConrad Meyer.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
155546be25SConrad Meyer.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165546be25SConrad Meyer.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
175546be25SConrad Meyer.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
185546be25SConrad Meyer.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
195546be25SConrad Meyer.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
205546be25SConrad Meyer.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
215546be25SConrad Meyer.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
225546be25SConrad Meyer.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
235546be25SConrad Meyer.\" POSSIBILITY OF SUCH DAMAGE.
245546be25SConrad Meyer.\"
255546be25SConrad Meyer.\" $FreeBSD$
265546be25SConrad Meyer.\"
275546be25SConrad Meyer.Dd October 20, 2015
285546be25SConrad Meyer.Dt CPUSET 9
295546be25SConrad Meyer.Os
305546be25SConrad Meyer.Sh NAME
315546be25SConrad Meyer.Nm cpuset(9)
325546be25SConrad Meyer\(em
335546be25SConrad Meyer.Nm CPUSET_T_INITIALIZER ,
345546be25SConrad Meyer.Nm CPUSET_FSET ,
355546be25SConrad Meyer.Nm CPU_CLR ,
365546be25SConrad Meyer.Nm CPU_COPY ,
375546be25SConrad Meyer.Nm CPU_ISSET ,
385546be25SConrad Meyer.Nm CPU_SET ,
395546be25SConrad Meyer.Nm CPU_ZERO ,
405546be25SConrad Meyer.Nm CPU_FILL ,
415546be25SConrad Meyer.Nm CPU_SETOF ,
425546be25SConrad Meyer.Nm CPU_EMPTY ,
435546be25SConrad Meyer.Nm CPU_ISFULLSET ,
445546be25SConrad Meyer.Nm CPU_FFS ,
455546be25SConrad Meyer.Nm CPU_COUNT ,
465546be25SConrad Meyer.Nm CPU_SUBSET ,
475546be25SConrad Meyer.Nm CPU_OVERLAP ,
485546be25SConrad Meyer.Nm CPU_CMP ,
495546be25SConrad Meyer.Nm CPU_OR ,
505546be25SConrad Meyer.Nm CPU_AND ,
515546be25SConrad Meyer.Nm CPU_NAND ,
525546be25SConrad Meyer.Nm CPU_CLR_ATOMIC ,
535546be25SConrad Meyer.Nm CPU_SET_ATOMIC ,
545546be25SConrad Meyer.Nm CPU_SET_ATOMIC_ACQ ,
555546be25SConrad Meyer.Nm CPU_AND_ATOMIC ,
565546be25SConrad Meyer.Nm CPU_OR_ATOMIC ,
575546be25SConrad Meyer.Nm CPU_COPY_STORE_REL
585546be25SConrad Meyer.Nd cpuset manipulation macros
595546be25SConrad Meyer.Sh SYNOPSIS
605546be25SConrad Meyer.In sys/_cpuset.h
615546be25SConrad Meyer.In sys/cpuset.h
625546be25SConrad Meyer.\"
635546be25SConrad Meyer.Fn CPUSET_T_INITIALIZER "ARRAY_CONTENTS"
645546be25SConrad Meyer.Vt CPUSET_FSET
655546be25SConrad Meyer.\"
665546be25SConrad Meyer.Fn CPU_CLR "size_t cpu_idx" "cpuset_t *cpuset"
675546be25SConrad Meyer.Fn CPU_COPY "cpuset_t *from" "cpuset_t *to"
685546be25SConrad Meyer.Ft bool
695546be25SConrad Meyer.Fn CPU_ISSET "size_t cpu_idx" "cpuset_t *cpuset"
705546be25SConrad Meyer.Fn CPU_SET "size_t cpu_idx" "cpuset_t *cpuset"
715546be25SConrad Meyer.Fn CPU_ZERO "cpuset_t *cpuset"
725546be25SConrad Meyer.Fn CPU_FILL "cpuset_t *cpuset"
735546be25SConrad Meyer.Fn CPU_SETOF "size_t cpu_idx" "cpuset_t *cpuset"
745546be25SConrad Meyer.Ft bool
755546be25SConrad Meyer.Fn CPU_EMPTY "cpuset_t *cpuset"
765546be25SConrad Meyer.Ft bool
775546be25SConrad Meyer.Fn CPU_ISFULLSET "cpuset_t *cpuset"
785546be25SConrad Meyer.Ft size_t
795546be25SConrad Meyer.Fn CPU_FFS "cpuset_t *cpuset"
805546be25SConrad Meyer.Ft size_t
815546be25SConrad Meyer.Fn CPU_COUNT "cpuset_t *cpuset"
825546be25SConrad Meyer.\"
835546be25SConrad Meyer.Ft bool
845546be25SConrad Meyer.Fn CPU_SUBSET "cpuset_t *haystack" "cpuset_t *needle"
855546be25SConrad Meyer.Ft bool
865546be25SConrad Meyer.Fn CPU_OVERLAP "cpuset_t *cpuset1" "cpuset_t *cpuset2"
875546be25SConrad Meyer.Ft bool
885546be25SConrad Meyer.Fn CPU_CMP "cpuset_t *cpuset1" "cpuset_t *cpuset2"
895546be25SConrad Meyer.Fn CPU_OR "cpuset_t *dst" "cpuset_t *src"
905546be25SConrad Meyer.Fn CPU_AND "cpuset_t *dst" "cpuset_t *src"
915546be25SConrad Meyer.Fn CPU_NAND "cpuset_t *dst" "cpuset_t *src"
925546be25SConrad Meyer.\"
935546be25SConrad Meyer.Fn CPU_CLR_ATOMIC "size_t cpu_idx" "cpuset_t *cpuset"
945546be25SConrad Meyer.Fn CPU_SET_ATOMIC "size_t cpu_idx" "cpuset_t *cpuset"
955546be25SConrad Meyer.Fn CPU_SET_ATOMIC_ACQ "size_t cpu_idx" "cpuset_t *cpuset"
965546be25SConrad Meyer.\"
975546be25SConrad Meyer.Fn CPU_AND_ATOMIC "cpuset_t *dst" "cpuset_t *src"
985546be25SConrad Meyer.Fn CPU_OR_ATOMIC "cpuset_t *dst" "cpuset_t *src"
995546be25SConrad Meyer.Fn CPU_COPY_STORE_REL "cpuset_t *from" "cpuset_t *to"
1005546be25SConrad Meyer.Sh DESCRIPTION
1015546be25SConrad MeyerThe
1025546be25SConrad Meyer.Nm
1035546be25SConrad Meyerfamily of macros provide a flexible and efficient CPU set implementation,
1045546be25SConrad Meyerbacked by the
1055546be25SConrad Meyer.Xr bitset 9
1065546be25SConrad Meyermacros.
1075546be25SConrad MeyerEach CPU is represented by a single bit.
1085546be25SConrad MeyerThe maximum number of CPUs representable by
1095546be25SConrad Meyer.Vt cpuset_t
1105546be25SConrad Meyeris
1115546be25SConrad Meyer.Va MAXCPU .
1125546be25SConrad MeyerIndividual CPUs in cpusets are referenced with indices zero through
1135546be25SConrad Meyer.Fa MAXCPU - 1 .
1145546be25SConrad Meyer.Pp
1155546be25SConrad MeyerThe
1165546be25SConrad Meyer.Fn CPUSET_T_INITIALIZER
1175546be25SConrad Meyermacro allows one to initialize a
1185546be25SConrad Meyer.Vt cpuset_t
1195546be25SConrad Meyerwith a compile time literal value.
1205546be25SConrad Meyer.Pp
1215546be25SConrad MeyerThe
1225546be25SConrad Meyer.Fn CPUSET_FSET
1235546be25SConrad Meyermacro defines a compile time literal, usable by
1245546be25SConrad Meyer.Fn CPUSET_T_INITIALIZER ,
1255546be25SConrad Meyerrepresenting a full cpuset (all CPUs present).
1265546be25SConrad MeyerFor examples of
1275546be25SConrad Meyer.Fn CPUSET_T_INITIALIZER
1285546be25SConrad Meyerand
1295546be25SConrad Meyer.Fn CPUSET_FSET
1305546be25SConrad Meyerusage, see the
1315546be25SConrad Meyer.Sx CPUSET_T_INITIALIZER EXAMPLE
1325546be25SConrad Meyersection.
1335546be25SConrad Meyer.Pp
1345546be25SConrad MeyerThe
1355546be25SConrad Meyer.Fn CPU_CLR
1365546be25SConrad Meyermacro removes CPU
1375546be25SConrad Meyer.Fa cpu_idx
1385546be25SConrad Meyerfrom the cpuset pointed to by
1395546be25SConrad Meyer.Fa cpuset .
1405546be25SConrad MeyerThe
1415546be25SConrad Meyer.Fn CPU_CLR_ATOMIC
1425546be25SConrad Meyermacro is identical, but the bit representing the CPU is cleared with atomic
1435546be25SConrad Meyermachine instructions.
1445546be25SConrad Meyer.Pp
1455546be25SConrad MeyerThe
1465546be25SConrad Meyer.Fn CPU_COPY
1475546be25SConrad Meyermacro copies the contents of the cpuset
1485546be25SConrad Meyer.Fa from
1495546be25SConrad Meyerto the cpuset
1505546be25SConrad Meyer.Fa to .
1515546be25SConrad Meyer.Fn CPU_COPY_STORE_REL
1525546be25SConrad Meyeris similar, but copies component machine words from
1535546be25SConrad Meyer.Fa from
1545546be25SConrad Meyerand writes them to
1555546be25SConrad Meyer.Fa to
1565546be25SConrad Meyerwith atomic store with release semantics.
1575546be25SConrad Meyer(That is, if
1585546be25SConrad Meyer.Fa to
1595546be25SConrad Meyeris composed of multiple machine words,
1605546be25SConrad Meyer.Fn CPU_COPY_STORE_REL
1615546be25SConrad Meyerperforms multiple individually atomic operations.)
1625546be25SConrad Meyer.Pp
1635546be25SConrad MeyerThe
1645546be25SConrad Meyer.Fn CPU_SET
1655546be25SConrad Meyermacro adds CPU
1665546be25SConrad Meyer.Fa cpu_idx
1675546be25SConrad Meyerto the cpuset pointed to by
1685546be25SConrad Meyer.Fa cpuset ,
1695546be25SConrad Meyerif it is not already present.
1705546be25SConrad MeyerThe
1715546be25SConrad Meyer.Fn CPU_SET_ATOMIC
1725546be25SConrad Meyermacro is identical, but the bit representing the CPU is set with atomic
1735546be25SConrad Meyermachine instructions.
1745546be25SConrad MeyerThe
1755546be25SConrad Meyer.Fn CPU_SET_ATOMIC_ACQ
1765546be25SConrad Meyermacro sets the bit representing the CPU with atomic acquire semantics.
1775546be25SConrad Meyer.Pp
1785546be25SConrad MeyerThe
1795546be25SConrad Meyer.Fn CPU_ZERO
1805546be25SConrad Meyermacro removes all CPUs from
1815546be25SConrad Meyer.Fa cpuset .
1825546be25SConrad Meyer.Pp
1835546be25SConrad MeyerThe
1845546be25SConrad Meyer.Fn CPU_FILL
1855546be25SConrad Meyermacro adds all CPUs to
1865546be25SConrad Meyer.Fa cpuset .
1875546be25SConrad Meyer.Pp
1885546be25SConrad MeyerThe
1895546be25SConrad Meyer.Fn CPU_SETOF
1905546be25SConrad Meyermacro removes all CPUs in
1915546be25SConrad Meyer.Fa cpuset
1925546be25SConrad Meyerbefore adding only CPU
1935546be25SConrad Meyer.Fa cpu_idx .
1945546be25SConrad Meyer.Pp
1955546be25SConrad MeyerThe
1965546be25SConrad Meyer.Fn CPU_EMPTY
1975546be25SConrad Meyermacro returns
1985546be25SConrad Meyer.Dv true
1995546be25SConrad Meyerif
2005546be25SConrad Meyer.Fa cpuset
2015546be25SConrad Meyeris empty.
2025546be25SConrad Meyer.Pp
2035546be25SConrad MeyerThe
2045546be25SConrad Meyer.Fn CPU_ISFULLSET
2055546be25SConrad Meyermacro returns
2065546be25SConrad Meyer.Dv true
2075546be25SConrad Meyerif
2085546be25SConrad Meyer.Fa cpuset
2095546be25SConrad Meyeris full (the set of all CPUs).
2105546be25SConrad Meyer.Pp
2115546be25SConrad MeyerThe
2125546be25SConrad Meyer.Fn CPU_FFS
2135546be25SConrad Meyermacro returns the 1-index of the first (lowest) CPU in
2145546be25SConrad Meyer.Fa cpuset ,
2155546be25SConrad Meyeror zero if
2165546be25SConrad Meyer.Fa cpuset
2175546be25SConrad Meyeris empty.
2185546be25SConrad MeyerLike with
2195546be25SConrad Meyer.Xr ffs 3 ,
2205546be25SConrad Meyerto use the non-zero result of
2215546be25SConrad Meyer.Fn CPU_FFS
2225546be25SConrad Meyeras a
2235546be25SConrad Meyer.Fa cpu_idx
2245546be25SConrad Meyerindex parameter to any other
2255546be25SConrad Meyer.Nm
2265546be25SConrad Meyermacro, you must subtract one from the result.
2275546be25SConrad Meyer.Pp
2285546be25SConrad MeyerThe
2295546be25SConrad Meyer.Fn CPU_COUNT
2305546be25SConrad Meyermacro returns the total number of CPUs in
2315546be25SConrad Meyer.Fa cpuset .
2325546be25SConrad Meyer.Pp
2335546be25SConrad MeyerThe
2345546be25SConrad Meyer.Fn CPU_SUBSET
2355546be25SConrad Meyermacro returns
2365546be25SConrad Meyer.Dv true
2375546be25SConrad Meyerif
2385546be25SConrad Meyer.Fa needle
2395546be25SConrad Meyeris a subset of
2405546be25SConrad Meyer.Fa haystack .
2415546be25SConrad Meyer.Pp
2425546be25SConrad MeyerThe
2435546be25SConrad Meyer.Fn CPU_OVERLAP
2445546be25SConrad Meyermacro returns
2455546be25SConrad Meyer.Dv true
2465546be25SConrad Meyerif
2475546be25SConrad Meyer.Fa cpuset1
2485546be25SConrad Meyerand
2495546be25SConrad Meyer.Fa cpuset2
2505546be25SConrad Meyerhave any common CPUs.
2515546be25SConrad Meyer(That is, if
2525546be25SConrad Meyer.Fa cpuset1
2535546be25SConrad MeyerAND
2545546be25SConrad Meyer.Fa cpuset2
2555546be25SConrad Meyeris not the empty set.)
2565546be25SConrad Meyer.Pp
2575546be25SConrad MeyerThe
2585546be25SConrad Meyer.Fn CPU_CMP
2595546be25SConrad Meyermacro returns
2605546be25SConrad Meyer.Dv true
2615546be25SConrad Meyerif
2625546be25SConrad Meyer.Fa cpuset1
2635546be25SConrad Meyeris NOT equal to
2645546be25SConrad Meyer.Fa cpuset2 .
2655546be25SConrad Meyer.Pp
2665546be25SConrad MeyerThe
2675546be25SConrad Meyer.Fn CPU_OR
2685546be25SConrad Meyermacro adds CPUs present in
2695546be25SConrad Meyer.Fa src
2705546be25SConrad Meyerto
2715546be25SConrad Meyer.Fa dst .
2725546be25SConrad Meyer(It is the
2735546be25SConrad Meyer.Nm
2745546be25SConrad Meyerequivalent of the scalar:
2755546be25SConrad Meyer.Fa dst
2765546be25SConrad Meyer|=
2775546be25SConrad Meyer.Fa src . )
2785546be25SConrad Meyer.Fn CPU_OR_ATOMIC
2795546be25SConrad Meyeris similar, but sets the bits representing CPUs in the component machine words
2805546be25SConrad Meyerin
2815546be25SConrad Meyer.Fa dst
2825546be25SConrad Meyerwith atomic machine instructions.
2835546be25SConrad Meyer(That is, if
2845546be25SConrad Meyer.Fa dst
2855546be25SConrad Meyeris composed of multiple machine words,
2865546be25SConrad Meyer.Fn CPU_OR_ATOMIC
2875546be25SConrad Meyerperforms multiple individually atomic operations.)
2885546be25SConrad Meyer.Pp
2895546be25SConrad MeyerThe
2905546be25SConrad Meyer.Fn CPU_AND
2915546be25SConrad Meyermacro removes CPUs absent from
2925546be25SConrad Meyer.Fa src
2935546be25SConrad Meyerfrom
2945546be25SConrad Meyer.Fa dst .
2955546be25SConrad Meyer(It is the
2965546be25SConrad Meyer.Nm
2975546be25SConrad Meyerequivalent of the scalar:
2985546be25SConrad Meyer.Fa dst
2995546be25SConrad Meyer&=
3005546be25SConrad Meyer.Fa src . )
3015546be25SConrad Meyer.Fn CPU_AND_ATOMIC
3025546be25SConrad Meyeris similar, with the same atomic semantics as
3035546be25SConrad Meyer.Fn CPU_OR_ATOMIC .
3045546be25SConrad Meyer.Pp
3055546be25SConrad MeyerThe
3065546be25SConrad Meyer.Fn CPU_NAND
3075546be25SConrad Meyermacro removes CPUs in
3085546be25SConrad Meyer.Fa src
3095546be25SConrad Meyerfrom
3105546be25SConrad Meyer.Fa dst .
3115546be25SConrad Meyer(It is the
3125546be25SConrad Meyer.Nm
3135546be25SConrad Meyerequivalent of the scalar:
3145546be25SConrad Meyer.Fa dst
3155546be25SConrad Meyer&=
3165546be25SConrad Meyer.Fa ~ src . )
3175546be25SConrad Meyer.Sh CPUSET_T_INITIALIZER EXAMPLE
3185546be25SConrad Meyer.Bd -literal
3195546be25SConrad Meyercpuset_t myset;
3205546be25SConrad Meyer
3215546be25SConrad Meyer/* Initialize myset to filled (all CPUs) */
3225546be25SConrad Meyermyset = CPUSET_T_INITIALIZER(CPUSET_FSET);
3235546be25SConrad Meyer
3245546be25SConrad Meyer/* Initialize myset to only the lowest CPU */
3255546be25SConrad Meyermyset = CPUSET_T_INITIALIZER(0x1);
3265546be25SConrad Meyer.Ed
3275546be25SConrad Meyer.Sh SEE ALSO
328*8b584e9dSConrad Meyer.Xr cpuset 1 ,
329*8b584e9dSConrad Meyer.Xr cpuset 2 ,
3305546be25SConrad Meyer.Xr bitset 9
3315546be25SConrad Meyer.Sh HISTORY
3325546be25SConrad Meyer.In sys/cpuset.h
3335546be25SConrad Meyerfirst appeared in
3345546be25SConrad Meyer.Fx 7.1 ,
3355546be25SConrad Meyerreleased in January 2009, and in
3365546be25SConrad Meyer.Fx 8.0 ,
3375546be25SConrad Meyerreleased in November 2009.
3385546be25SConrad Meyer.Pp
3395546be25SConrad MeyerThis manual page first appeared in
3405546be25SConrad Meyer.Fx 11.0 .
3415546be25SConrad Meyer.Sh AUTHORS
3425546be25SConrad Meyer.An -nosplit
3435546be25SConrad MeyerThe
3445546be25SConrad Meyer.Nm
3455546be25SConrad Meyermacros were written by
3465546be25SConrad Meyer.An Jeff Roberson Aq Mt jeff@FreeBSD.org .
3475546be25SConrad MeyerThis manual page was written by
3485546be25SConrad Meyer.An Conrad Meyer Aq Mt cem@FreeBSD.org .
3495546be25SConrad Meyer.Sh CAVEATS
3505546be25SConrad MeyerUnlike every other reference to individual set members, which are zero-indexed,
3515546be25SConrad Meyer.Fn CPU_FFS
3525546be25SConrad Meyerreturns a one-indexed result (or zero if the cpuset is empty).
353