summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2008-03-05 02:10:43 +0000
committerjeff <jeff@FreeBSD.org>2008-03-05 02:10:43 +0000
commit0abc0885372d5c0a1ddcf71604c747aa76062639 (patch)
tree759453230560895b41fd5379ada22a3100d78a00 /usr.bin
parent7e2fbaa872a30c5fcfa4206fd26455dcdcddb698 (diff)
downloadFreeBSD-src-0abc0885372d5c0a1ddcf71604c747aa76062639.zip
FreeBSD-src-0abc0885372d5c0a1ddcf71604c747aa76062639.tar.gz
- Remove the -i argument when running a command to simplify things a
little bit and to prevent users from specifying a private mask that may later restrict other group changes. - Add a man page which brueffer generously contributed to. Sponsored by: Nokia
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/cpuset/Makefile1
-rw-r--r--usr.bin/cpuset/cpuset.1171
-rw-r--r--usr.bin/cpuset/cpuset.c19
3 files changed, 177 insertions, 14 deletions
diff --git a/usr.bin/cpuset/Makefile b/usr.bin/cpuset/Makefile
index 911400a..85a5148 100644
--- a/usr.bin/cpuset/Makefile
+++ b/usr.bin/cpuset/Makefile
@@ -1,7 +1,6 @@
# $FreeBSD$
PROG= cpuset
-NO_MAN= true
WARNS?= 6
.include <bsd.prog.mk>
diff --git a/usr.bin/cpuset/cpuset.1 b/usr.bin/cpuset/cpuset.1
new file mode 100644
index 0000000..36b4dca
--- /dev/null
+++ b/usr.bin/cpuset/cpuset.1
@@ -0,0 +1,171 @@
+.\" Copyright (c) 2008 Christian Brueffer
+.\" Copyright (c) 2008 Jeffrey Roberson
+.\" 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 March 2, 2008
+.Dt CPUSET 1
+.Os
+.Sh NAME
+.Nm cpuset
+.Nd "configure processor sets"
+.Sh SYNOPSIS
+.Nm
+.Op Fl l Ar cpu-list
+.Op Fl s Ar setid
+.Ar cmd
+.Nm
+.Op Fl l Ar cpu-list
+.Op Fl s Ar setid
+.Fl p Ar pid
+.Nm
+.Op Fl cr
+.Op Fl l Ar cpu-list
+.Op Fl p Ar pid | Fl r Ar tid | Fl s Ar setid
+.Nm
+.Op Fl cgir
+.Op Fl p Ar pid | Fl r Ar tid | Fl s Ar setid
+.Sh DESCRIPTION
+The
+.Nm
+command can be used to assign processor sets to processes, run commands
+constrained to a given set or list of processors, and query information
+about processor binding, sets, and available processors in the system.
+.Pp
+.Nm
+requires a target to modify or query.
+The target may be specified as a command, process id, thread id, or a
+cpuset id.
+Using
+.Fl g
+the target's set id or mask may be queried.
+Using
+.Fl l
+or
+.Fl s
+the target's CPU mask or set id may be set.
+If no target is specified,
+.Nm
+operates on itself.
+Not all combinations of operations and targets are supported.
+For example,
+you may not set the id of an existing set or query and launch a command
+at the same time.
+.Pp
+There are two sets applicable to each process and one private mask per thread.
+Every process in the system belongs to a cpuset.
+By default processes are started in set 1.
+The mask or id may be queried using
+.Fl c .
+Each thread also has a private mask of CPUs it is allowed to run
+on that must be a subset of the assigned set.
+And finally, there is a root set, numbered 0, that is immutable.
+This last set is the list of all possible CPUs in the system and is
+queried using
+.Fl r .
+.Pp
+When running a command it may join a set specified with
+.Fl s
+otherwise a new set is created.
+In addition, a mask for the set may be specified using
+.Fl l .
+.Pp
+The options are as follows:
+.Bl -tag -width ".Fl l Ar cpu-list"
+.It Fl c
+The requested operation should reference the cpuset available via the
+target specifier.
+.It Fl g
+Causes
+.Nm
+to print either a list of valid CPUs or, using
+.Fl i ,
+the id of the target.
+.It Fl i
+When used with the
+.Fl g
+option print the id rather than the valid mask of the target.
+.It Fl l Ar cpu-list
+Specifies a list of CPUs to apply to a target.
+Specification may include
+numbers seperated by '-' for ranges and commas separating individual numbers.
+.It Fl p Ar pid
+Specifies a pid as the target of the operation.
+.It Fl s Ar setid
+Specifies a set id as the target of the operation.
+.It Fl r
+The requested operation should reference the root set available via the
+target specifier.
+.It Fl t Ar tid
+Specifies a thread id as the target of the operation.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+Create a new group with CPUs 0-4 inclusive and run
+.Pa /bin/sh
+on it:
+.Dl cpuset -l 0-4 /bin/sh
+.Pp
+Query the mask of CPUs the
+.Aq sh pid
+is allowed to run on:
+.Dl cpuset -g -p <sh pid>
+.Pp
+Restrict
+.Pa /bin/sh
+to run on CPUs 0 and 2 while its group is still allowed to run on
+CPUs 0-4:
+.Dl cpuset -l 0,2 -p <sh pid>
+.Pp
+Modify the cpuset
+.Pa /bin/sh
+belongs to restricting it to CPUs 0 and 2:
+.Dl cpuset -l 0,2 -c -p <sh pid>
+.Pp
+Modify the cpuset all threads are in by default to contain only
+the first 4 CPUs, leaving the rest idle:
+.Dl cpuset -l 0-3 -s 1
+.Pp
+Print the id of the cpuset
+.Pa /bin/sh
+is in:
+.Dl cpuset -g -i -p <sh pid>
+.Pp
+Move the
+.Ar pid
+into the specified cpuset
+.Ar setid
+so it may be managed with other pids in that set:
+.Dl cpuset -s <setid> -p <pid>
+.Sh SEE ALSO
+.Xr cpuset 2
+.Sh HISTORY
+The
+.Nm
+command first appeared in
+.Fx 8.0 .
+.Sh AUTHORS
+.An Jeffrey Roberson Aq jeff@FreeBSD.org
diff --git a/usr.bin/cpuset/cpuset.c b/usr.bin/cpuset/cpuset.c
index 23c4b79..41a715d 100644
--- a/usr.bin/cpuset/cpuset.c
+++ b/usr.bin/cpuset/cpuset.c
@@ -251,29 +251,24 @@ main(int argc, char *argv[])
printaffinity();
exit(EXIT_SUCCESS);
}
+ if (iflag)
+ usage();
/*
* The user wants to run a command with a set and possibly cpumask.
*/
if (argc) {
if (pflag | rflag | tflag || cflag)
usage();
- if (sflag && iflag)
- usage();
if (sflag) {
if (cpuset_setid(CPU_WHICH_PID, -1, setid))
err(argc, "setid");
- which = CPU_WHICH_PID;
- level = CPU_LEVEL_WHICH;
- }
- if (iflag) {
+ } else {
if (cpuset(&setid))
err(argc, "newid");
- which = CPU_WHICH_CPUSET;
- level = CPU_LEVEL_WHICH;
}
if (lflag) {
- if (cpuset_setaffinity(level, which, -1,
- sizeof(mask), &mask) != 0)
+ if (cpuset_setaffinity(CPU_LEVEL_CPUSET, CPU_WHICH_PID,
+ -1, sizeof(mask), &mask) != 0)
err(EXIT_FAILURE, "setaffinity");
}
errno = 0;
@@ -283,8 +278,6 @@ main(int argc, char *argv[])
/*
* We're modifying something that presently exists.
*/
- if (iflag)
- usage();
if (!lflag && (cflag || rflag))
usage();
if (!lflag && !sflag)
@@ -316,7 +309,7 @@ usage(void)
{
fprintf(stderr,
- "usage: cpuset [-l cpu-list] [-i | -s setid] cmd ...\n");
+ "usage: cpuset [-l cpu-list] [-s setid] cmd ...\n");
fprintf(stderr,
" cpuset [-l cpu-list] [-s setid] -p pid\n");
fprintf(stderr,
OpenPOWER on IntegriCloud