Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CPUSET(9)		 BSD Kernel Developer's	Manual		     CPUSET(9)

NAME
     cpuset(9) -- CPUSET_T_INITIALIZER,	CPUSET_FSET, CPU_CLR, CPU_COPY,
     CPU_ISSET,	CPU_SET, CPU_ZERO, CPU_FILL, CPU_SETOF,	CPU_EMPTY,
     CPU_ISFULLSET, CPU_FFS, CPU_COUNT,	CPU_SUBSET, CPU_OVERLAP, CPU_CMP,
     CPU_OR, CPU_AND, CPU_NAND,	CPU_CLR_ATOMIC,	CPU_SET_ATOMIC,
     CPU_SET_ATOMIC_ACQ, CPU_AND_ATOMIC, CPU_OR_ATOMIC,	CPU_COPY_STORE_REL --
     cpuset manipulation macros

SYNOPSIS
     #include <sys/_cpuset.h>
     #include <sys/cpuset.h>

     CPUSET_T_INITIALIZER(ARRAY_CONTENTS);

     CPUSET_FSET

     CPU_CLR(size_t cpu_idx, cpuset_t *cpuset);

     CPU_COPY(cpuset_t *from, cpuset_t *to);

     bool
     CPU_ISSET(size_t cpu_idx, cpuset_t	*cpuset);

     CPU_SET(size_t cpu_idx, cpuset_t *cpuset);

     CPU_ZERO(cpuset_t *cpuset);

     CPU_FILL(cpuset_t *cpuset);

     CPU_SETOF(size_t cpu_idx, cpuset_t	*cpuset);

     bool
     CPU_EMPTY(cpuset_t	*cpuset);

     bool
     CPU_ISFULLSET(cpuset_t *cpuset);

     int
     CPU_FFS(cpuset_t *cpuset);

     int
     CPU_COUNT(cpuset_t	*cpuset);

     bool
     CPU_SUBSET(cpuset_t *haystack, cpuset_t *needle);

     bool
     CPU_OVERLAP(cpuset_t *cpuset1, cpuset_t *cpuset2);

     bool
     CPU_CMP(cpuset_t *cpuset1,	cpuset_t *cpuset2);

     CPU_OR(cpuset_t *dst, cpuset_t *src);

     CPU_AND(cpuset_t *dst, cpuset_t *src);

     CPU_NAND(cpuset_t *dst, cpuset_t *src);

     CPU_CLR_ATOMIC(size_t cpu_idx, cpuset_t *cpuset);

     CPU_SET_ATOMIC(size_t cpu_idx, cpuset_t *cpuset);

     CPU_SET_ATOMIC_ACQ(size_t cpu_idx,	cpuset_t *cpuset);

     CPU_AND_ATOMIC(cpuset_t *dst, cpuset_t *src);

     CPU_OR_ATOMIC(cpuset_t *dst, cpuset_t *src);

     CPU_COPY_STORE_REL(cpuset_t *from,	cpuset_t *to);

DESCRIPTION
     The cpuset(9) family of macros provide a flexible and efficient CPU set
     implementation, backed by the bitset(9) macros.  Each CPU is represented
     by	a single bit.  The maximum number of CPUs representable	by cpuset_t is
     MAXCPU.  Individual CPUs in cpusets are referenced	with indices zero
     through MAXCPU - 1.

     The CPUSET_T_INITIALIZER()	macro allows one to initialize a cpuset_t with
     a compile time literal value.

     The CPUSET_FSET() macro defines a compile time literal, usable by
     CPUSET_T_INITIALIZER(), representing a full cpuset	(all CPUs present).
     For examples of CPUSET_T_INITIALIZER() and	CPUSET_FSET() usage, see the
     CPUSET_T_INITIALIZER EXAMPLE section.

     The CPU_CLR() macro removes CPU cpu_idx from the cpuset pointed to	by
     cpuset.  The CPU_CLR_ATOMIC() macro is identical, but the bit represent-
     ing the CPU is cleared with atomic	machine	instructions.

     The CPU_COPY() macro copies the contents of the cpuset from to the	cpuset
     to.  CPU_COPY_STORE_REL() is similar, but copies component	machine	words
     from from and writes them to to with atomic store with release semantics.
     (That is, if to is	composed of multiple machine words,
     CPU_COPY_STORE_REL() performs multiple individually atomic	operations.)

     The CPU_SET() macro adds CPU cpu_idx to the cpuset	pointed	to by cpuset,
     if	it is not already present.  The	CPU_SET_ATOMIC() macro is identical,
     but the bit representing the CPU is set with atomic machine instructions.
     The CPU_SET_ATOMIC_ACQ() macro sets the bit representing the CPU with
     atomic acquire semantics.

     The CPU_ZERO() macro removes all CPUs from	cpuset.

     The CPU_FILL() macro adds all CPUs	to cpuset.

     The CPU_SETOF() macro removes all CPUs in cpuset before adding only CPU
     cpu_idx.

     The CPU_EMPTY() macro returns true	if cpuset is empty.

     The CPU_ISFULLSET() macro returns true if cpuset is full (the set of all
     CPUs).

     The CPU_FFS() macro returns the 1-index of	the first (lowest) CPU in
     cpuset, or	zero if	cpuset is empty.  Like with ffs(3), to use the non-
     zero result of CPU_FFS() as a cpu_idx index parameter to any other
     cpuset(9) macro, you must subtract	one from the result.

     The CPU_COUNT() macro returns the total number of CPUs in cpuset.

     The CPU_SUBSET() macro returns true if needle is a	subset of haystack.

     The CPU_OVERLAP() macro returns true if cpuset1 and cpuset2 have any com-
     mon CPUs.	(That is, if cpuset1 AND cpuset2 is not	the empty set.)

     The CPU_CMP() macro returns true if cpuset1 is NOT	equal to cpuset2.

     The CPU_OR() macro	adds CPUs present in src to dst.  (It is the cpuset(9)
     equivalent	of the scalar: dst |= src.)  CPU_OR_ATOMIC() is	similar, but
     sets the bits representing	CPUs in	the component machine words in dst
     with atomic machine instructions.	(That is, if dst is composed of	multi-
     ple machine words,	CPU_OR_ATOMIC()	performs multiple individually atomic
     operations.)

     The CPU_AND() macro removes CPUs absent from src from dst.	 (It is	the
     cpuset(9) equivalent of the scalar: dst &=	src.)  CPU_AND_ATOMIC()	is
     similar, with the same atomic semantics as	CPU_OR_ATOMIC().

     The CPU_NAND() macro removes CPUs in src from dst.	 (It is	the cpuset(9)
     equivalent	of the scalar: dst &= ~	src.)

CPUSET_T_INITIALIZER EXAMPLE
     cpuset_t myset;

     /*	Initialize myset to filled (all	CPUs) */
     myset = CPUSET_T_INITIALIZER(CPUSET_FSET);

     /*	Initialize myset to only the lowest CPU	*/
     myset = CPUSET_T_INITIALIZER(0x1);

SEE ALSO
     cpuset(1),	cpuset(2), bitset(9)

HISTORY
     <sys/cpuset.h> first appeared in FreeBSD 7.1, released in January 2009,
     and in FreeBSD 8.0, released in November 2009.

     This manual page first appeared in	FreeBSD	11.0.

AUTHORS
     The cpuset(9) macros were written by Jeff Roberson	<jeff@FreeBSD.org>.
     This manual page was written by Conrad Meyer <cem@FreeBSD.org>.

CAVEATS
     Unlike every other	reference to individual	set members, which are zero-
     indexed, CPU_FFS()	returns	a one-indexed result (or zero if the cpuset is
     empty).

BSD				August 1, 2016				   BSD

NAME | SYNOPSIS | DESCRIPTION | CPUSET_T_INITIALIZER EXAMPLE | SEE ALSO | HISTORY | AUTHORS | CAVEATS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=cpuset&sektion=9&manpath=FreeBSD+11.1-RELEASE>

home | help