Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142188449
D16142.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
25 KB
Referenced Files
None
Subscribers
None
D16142.diff
View Options
Index: head/ObsoleteFiles.inc
===================================================================
--- head/ObsoleteFiles.inc
+++ head/ObsoleteFiles.inc
@@ -38,6 +38,12 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20180710: old numa cleanup
+OLD_FILES+=usr/include/sys/numa.h
+OLD_FILES+=usr/share/man/man2/numa_getaffinity.2.gz
+OLD_FILES+=usr/share/man/man2/numa_setaffinity.2.gz
+OLD_FILES+=usr/share/man/man1/numactl.1.gz
+OLD_FILES+=usr/bin/numactl
# 20180630: new clang import which bumps version from 6.0.0 to 6.0.1.
OLD_FILES+=usr/lib/clang/6.0.0/include/sanitizer/allocator_interface.h
OLD_FILES+=usr/lib/clang/6.0.0/include/sanitizer/asan_interface.h
Index: head/lib/libc/sys/Makefile.inc
===================================================================
--- head/lib/libc/sys/Makefile.inc
+++ head/lib/libc/sys/Makefile.inc
@@ -258,7 +258,6 @@
nanosleep.2 \
nfssvc.2 \
ntp_adjtime.2 \
- numa_getaffinity.2 \
open.2 \
pathconf.2 \
pdfork.2 \
@@ -430,7 +429,6 @@
MLINKS+=mq_receive.2 mq_timedreceive.2
MLINKS+=mq_send.2 mq_timedsend.2
MLINKS+=ntp_adjtime.2 ntp_gettime.2
-MLINKS+=numa_getaffinity.2 numa_setaffinity.2
MLINKS+=open.2 openat.2
MLINKS+=pathconf.2 fpathconf.2
MLINKS+=pathconf.2 lpathconf.2
Index: head/lib/libc/sys/compat-stub.c
===================================================================
--- head/lib/libc/sys/compat-stub.c
+++ head/lib/libc/sys/compat-stub.c
@@ -54,3 +54,5 @@
__compat_nosys(netbsd_lchown, FBSD_1.0);
__compat_nosys(netbsd_msync, FBSD_1.0);
+__compat_nosys(numa_getaffinity, FBSD_1.4);
+__compat_nosys(numa_setaffinity, FBSD_1.4);
Index: head/lib/libc/sys/numa_getaffinity.2
===================================================================
--- head/lib/libc/sys/numa_getaffinity.2
+++ head/lib/libc/sys/numa_getaffinity.2
@@ -1,197 +0,0 @@
-.\" Copyright (c) 2008 Christian Brueffer
-.\" Copyright (c) 2008 Jeffrey Roberson
-.\" Copyright (c) 2015 Adrian Chadd
-.\" 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 May 7, 2015
-.Dt NUMA_GETAFFINITY 2
-.Os
-.Sh NAME
-.Nm numa_getaffinity ,
-.Nm numa_setaffinity
-.Nd manage NUMA affinity
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In sys/param.h
-.In sys/numa.h
-.Ft int
-.Fn numa_getaffinity "cpuwhich_t which" "id_t id" "struct vm_domain_policy_entry *policy"
-.Ft int
-.Fn numa_setaffinity "cpuwhich_t which" "id_t id" "const struct vm_domain_policy_entry *policy"
-.Sh DESCRIPTION
-.Fn numa_getaffinity
-and
-.Fn numa_setaffinity
-allow the manipulation of NUMA policies available to processes and threads.
-These functions may manipulate NUMA policies that contain many processes
-or affect only a single object.
-.Pp
-Valid values for the
-.Fa which
-argument are documented in
-.Xr cpuset 2 .
-These arguments specify which object set are used.
-Only
-.Dv CPU_WHICH_TID
-and
-.Dv CPU_WHICH_PID
-can be manipulated.
-.Pp
-The
-.Fa policy
-entry contains a vm_domain_policy_entry with the following fields:
-.Bd -literal
-struct vm_domain_policy_entry {
- vm_domain_policy_type_t policy; /* VM policy */
- int domain; /* VM domain, if applicable */
-}
-.Ed
-.Fa vm_domain_policy_type_t policy
-is one these:
-.Bl -tag -width VM_POLICY_NONE
-.It Dv VM_POLICY_NONE
-Reset the domain back to none.
-Any parent object NUMA domain policy will apply.
-The only valid value for
-.Dv domain
-is -1.
-.It Dv VM_POLICY_ROUND_ROBIN
-Select round-robin policy.
-Pages will be allocated round-robin from each VM domain in order.
-The only valid value for
-.Dv domain
-is -1.
-.It Dv VM_POLICY_FIXED_DOMAIN
-Select fixed-domain only policy.
-Pages will be allocated from the given
-.Dv domain
-which must be set to a valid VM domain.
-Pages will not be allocated from another domain if
-.Dv domain
-is out of free pages.
-.It Dv VM_POLICY_FIXED_DOMAIN_ROUND_ROBIN
-Select fixed-domain only policy.
-Pages will be allocated from
-.Dv domain
-which must be set to a valid VM domain.
-If page allocation fails, pages will be round-robin
-allocated from another domain if
-.Dv domain
-is out of free pages.
-.It Dv VM_POLICY_FIRST_TOUCH
-Select first-touch policy.
-Pages will be allocated from the NUMA domain which the thread
-is currently scheduled upon.
-Pages will not be allocated from another domain if the current domain
-is out of free pages.
-The only valid value for
-.Dv domain
-is -1.
-.It Dv VM_POLICY_FIRST_TOUCH_ROUND_ROBIN
-Select first-touch policy.
-Pages will be allocated from the NUMA domain which the thread
-is currently scheduled upon.
-Pages will be allocated round-robin from another domain if the
-current domain is out of free pages.
-The only valid value for
-.Dv domain
-is -1.
-.El
-.Pp
-Note that the VM might assign some pages from other domains.
-For example, if an existing page allocation is covered by a superpage
-allocation.
-.Pp
-.Fn numa_getaffinity
-retrieves the
-NUMA policy from the object specified by
-.Fa which
-and
-.Fa id
-and stores it in the space provided by
-.Fa policy .
-.Pp
-.Fn numa_setaffinity
-attempts to set the NUMA policy for the object specified by
-.Fa which
-and
-.Fa id
-to the policy in
-.Fa policy .
-.Sh RETURN VALUES
-.Rv -std
-.Sh ERRORS
-.Va errno
-can contain these error codes:
-.Bl -tag -width Er
-.It Bq Er EINVAL
-The
-.Fa level
-or
-.Fa which
-argument was not a valid value.
-.It Bq Er EINVAL
-The
-.Fa policy
-argument specified when calling
-.Fn numa_setaffinity
-did not contain a valid policy.
-.It Bq Er EFAULT
-The policy pointer passed was invalid.
-.It Bq Er ESRCH
-The object specified by the
-.Fa id
-and
-.Fa which
-arguments could not be found.
-.It Bq Er ERANGE
-The
-.Fa domain
-in the given policy
-was out of the range of possible VM domains available.
-.It Bq Er EPERM
-The calling process did not have the credentials required to complete the
-operation.
-.El
-.Sh SEE ALSO
-.Xr cpuset 1 ,
-.Xr numactl 1 ,
-.Xr cpuset 2 ,
-.Xr cpuset_getaffinity 2 ,
-.Xr cpuset_getid 2 ,
-.Xr cpuset_setaffinity 2 ,
-.Xr cpuset_setid 2 ,
-.Xr pthread_affinity_np 3 ,
-.Xr pthread_attr_affinity_np 3 ,
-.Xr numa 4
-.Sh HISTORY
-The
-.Nm
-family of system calls first appeared in
-.Fx 11.0 .
-.Sh AUTHORS
-.An Adrian Chadd Aq Mt adrian@FreeBSD.org
Index: head/share/man/man4/numa.4
===================================================================
--- head/share/man/man4/numa.4
+++ head/share/man/man4/numa.4
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 10, 2015
+.Dd July 10, 2018
.Dt NUMA 4
.Os
.Sh NAME
@@ -34,7 +34,6 @@
.Cd options SMP
.Cd options MAXMEMDOM=16
.Pp
-.In sys/numa.h
.In sys/cpuset.h
.In sys/bus.h
.Sh DESCRIPTION
@@ -51,20 +50,21 @@
.Pp
.Nm
is enabled when the
-.Cd MAXMEMDOM
+.Cd NUMA
option is used in a kernel configuration
-file and is set to a value greater than 1.
+file and the
+.Cd MAXMEMDOM
+option is set to a value greater than 1.
.Pp
Thread and process
.Nm
policies are controlled with the
-.Xr numa_setaffinity 2
+.Xr cpuset_getdomain 2
and
-.Xr numa_getaffinity 2
+.Xr cpuset_setdomain 2
syscalls.
-.Pp
The
-.Xr numactl 1
+.Xr cpuset 1
tool is available for starting processes with a non-default
policy, or to change the policy of an existing thread or process.
.Pp
@@ -83,15 +83,6 @@
.It Va vm.ndomains
The number of VM domains which have been detected.
.Pp
-.It Va vm.default_policy
-The default VM domain allocation policy.
-Defaults to "first-touch-rr".
-The valid values are "first-touch", "first-touch-rr",
-"rr", where "rr" is a short-hand for "round-robin."
-See
-.Xr numa_setaffinity 2
-for more information about the available policies.
-.Pp
.It Va vm.phys_locality
A table indicating the relative cost of each VM domain to each other.
A value of 10 indicates equal cost.
@@ -111,36 +102,11 @@
VM domain space, starting from 0.
Thus, VM domain information (for example, the domain identifier) is not
necessarily the same as is found in the hardware specific information.
-.Pp
-The
-.Nm
-allocation policies are implemented as a policy and iterator in
-.Pa sys/vm/vm_domain.c
-and
-.Pa sys/vm/vm_domain.h .
Policy information is available in both struct thread and struct proc.
-Processes inherit
-.Nm
-policy from parent processes and threads inherit
-.Nm
-policy from parent threads.
-Note that threads do not explicitly inherit their
-.Nm
-policy from processes.
-Instead, if no thread policy is set, the system
-will fall back to the process policy.
-.Pp
-For now,
-.Nm
-domain policies only influence physical page allocation in
-.Pa sys/vm/vm_phys.c .
-This is useful for userland memory allocation, but not for kernel
-and driver memory allocation.
-These features will be implemented in future work.
.Sh SEE ALSO
-.Xr numactl 1 ,
-.Xr numa_getaffinity 2 ,
-.Xr numa_setaffinity 2 ,
+.Xr cpuset 1 ,
+.Xr cpuset_getaffinity 2 ,
+.Xr cpuset_setaffinity 2 ,
.Xr bus_get_domain 9
.Sh HISTORY
.Nm
@@ -156,13 +122,15 @@
.Xr numa_getaffinity 2
and
.Xr numa_setaffinity 2
-syscalls first appeared in
-.Fx 11.0 .
-.Pp
-The
+syscalls and the
.Xr numactl 1
tool first appeared in
-.Fx 11.0 .
+.Fx 11.0
+and were removed in
+.Fx 12.0 .
+Current implementation appeared in
+.Fx 12.0 .
+.Pp
.Sh AUTHORS
This manual page written by
.An Adrian Chadd Aq Mt adrian@FreeBSD.org .
Index: head/sys/sys/numa.h
===================================================================
--- head/sys/sys/numa.h
+++ head/sys/sys/numa.h
@@ -1,43 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>.
- * 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.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * 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$
- */
-#ifndef __SYS_NUMA_H__
-#define __SYS_NUMA_H__
-
-#include <sys/_vm_domain.h>
-
-extern int numa_setaffinity(cpuwhich_t which, id_t id,
- struct vm_domain_policy_entry *vd);
-extern int numa_getaffinity(cpuwhich_t which, id_t id,
- struct vm_domain_policy_entry *vd);
-
-#endif /* __SYS_NUMA_H__ */
Index: head/usr.bin/Makefile
===================================================================
--- head/usr.bin/Makefile
+++ head/usr.bin/Makefile
@@ -104,7 +104,6 @@
nfsstat \
nice \
nl \
- numactl \
nohup \
opieinfo \
opiekey \
Index: head/usr.bin/numactl/Makefile
===================================================================
--- head/usr.bin/numactl/Makefile
+++ head/usr.bin/numactl/Makefile
@@ -1,5 +0,0 @@
-# $FreeBSD$
-
-PROG= numactl
-
-.include <bsd.prog.mk>
Index: head/usr.bin/numactl/Makefile.depend
===================================================================
--- head/usr.bin/numactl/Makefile.depend
+++ head/usr.bin/numactl/Makefile.depend
@@ -1,17 +0,0 @@
-# $FreeBSD$
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- gnu/lib/csu \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
Index: head/usr.bin/numactl/numactl.1
===================================================================
--- head/usr.bin/numactl/numactl.1
+++ head/usr.bin/numactl/numactl.1
@@ -1,132 +0,0 @@
-.\" Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>
-.\" 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 May 9, 2015
-.Dt NUMACTL 1
-.Os
-.Sh NAME
-.Nm numactl
-.Nd "manage NUMA policy configuration"
-.Sh SYNOPSIS
-.Nm
-.Op Fl l Ar policy
-.Op Fl m Ar domain
-.Op Fl c Ar domain
-.Ar cmd ...
-.Nm
-.Fl g
-.Op Fl p Ar pid
-.Op Fl t Ar tid
-.Nm
-.Fl s
-.Op Fl l Ar policy
-.Op Fl m Ar domain
-.Op Fl c Ar domain
-.Op Fl p Ar pid
-.Op Fl t Ar tid
-.Sh DESCRIPTION
-The
-.Nm
-command can be used to assign NUMA policies to processes/threads,
-run commands with a given NUMA policy, and query information
-about NUMA policies on running processes.
-.Pp
-.Nm
-requires a target to modify or query.
-The target may be specified as a command, process id or a thread id.
-Using
-.Fl -get
-the target's NUMA policy may be queried.
-Using
-.Fl -set
-the target's NUMA policy may be queried.
-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
-Each process and thread has a NUMA policy.
-By default the policy is NONE.
-If a thread policy is NONE, then the policy will fall back to the process.
-If the process policy is NONE, then the policy will fall back to the
-system default.
-The policy may be queried by using
-.Fl -get.
-.Pp
-The options are as follows:
-.Bl -tag -width ".Fl -cpudomain Ar domain"
-.It Fl -cpudomain Ar domain , Fl c Ar domain
-Set the given CPU scheduling policy.
-Constrain the object (tid, pid, command) to run on CPUs
-that belong to the given domain.
-.It Fl -get , Fl g
-Retrieve the NUMA policy for the given thread or process id.
-.It Fl -set , Fl s
-Set the NUMA policy for the given thread or process id.
-.It Fl -memdomain Ar domain , Fl m Ar domain
-Constrain the object (tid, pid, command) to the given
-domain.
-This is only valid for fixed-domain and fixed-domain-rr.
-It must not be set for other policies.
-.It Fl -mempolicy Ar policy , Fl l Ar policy
-Set the given memory allocation policy.
-Valid policies are none, rr, fixed-domain, fixed-domain-rr,
-first-touch, and first-touch-rr.
-A memdomain argument is required for fixed-domain and
-fixed-domain-rr.
-.It Fl -pid Ar pid , Fl p Ar pid
-Operate on the given pid.
-.It Fl -tid Ar tid , Fl t Ar tid
-Operate on the given tid.
-.El
-.Sh EXIT STATUS
-.Ex -std
-.Sh EXAMPLES
-Create a
-.Pa /bin/sh
-process with memory coming from domain 0, but
-CPUs coming from domain 1:
-.Dl numactl --mempolicy=fixed-domain --memdomain=0 --cpudomain=1 /bin/sh
-.Pp
-Query the NUMA policy for the
-.Aq sh pid :
-.Dl numactl --get --pid=<sh pid>
-.Pp
-Set the NUMA policy for the given TID to round-robin:
-.Dl numactl --set --mempolicy=rr --tid=<tid>
-.Sh SEE ALSO
-.Xr cpuset 2 ,
-.Xr numa 4
-.Sh HISTORY
-The
-.Nm
-command first appeared in
-.Fx 11.0 .
-.Sh AUTHORS
-.An Adrian Chadd Aq Mt adrian@FreeBSD.org
Index: head/usr.bin/numactl/numactl.c
===================================================================
--- head/usr.bin/numactl/numactl.c
+++ head/usr.bin/numactl/numactl.c
@@ -1,314 +0,0 @@
-/*
- * Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>
- * 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.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/cpuset.h>
-#include <sys/domainset.h>
-#include <sys/resource.h>
-#include <sys/time.h>
-
-#include <ctype.h>
-#include <err.h>
-#include <errno.h>
-#include <getopt.h>
-#include <libgen.h>
-#include <limits.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sysexits.h>
-#include <unistd.h>
-
-static struct option longopts[] = {
- { "tid", required_argument, NULL, 't' },
- { "pid", required_argument, NULL, 'p' },
- { "memdomain", required_argument, NULL, 'm' },
- { "cpudomain", required_argument, NULL, 'c' },
- { "mempolicy", required_argument, NULL, 'l' },
- { "set", no_argument, NULL, 's' },
- { "get", no_argument, NULL, 'g' },
- { NULL, 0, NULL, 0 }
-};
-
-static const char *
-policy_to_str(int policy)
-{
-
- switch (policy) {
- case DOMAINSET_POLICY_INVALID:
- return ("invalid");
- case DOMAINSET_POLICY_ROUNDROBIN:
- return ("round-robin");
- case DOMAINSET_POLICY_FIRSTTOUCH:
- return ("first-touch");
- case DOMAINSET_POLICY_PREFER:
- return ("prefer");
- default:
- return ("unknown");
- }
-}
-
-static void
-domain_print(domainset_t *mask)
-{
- int once;
- int bit;
-
- for (once = 0, bit = 0; bit < DOMAINSET_SETSIZE; bit++) {
- if (DOMAINSET_ISSET(bit, mask)) {
- if (once == 0) {
- printf("%d", bit);
- once = 1;
- } else
- printf(", %d", bit);
- }
- }
- printf("\n");
-}
-
-static int
-parse_policy(int *policy, const char *str)
-{
-
- if (strcmp(str, "rr") == 0) {
- *policy = DOMAINSET_POLICY_ROUNDROBIN;
- return (0);
- }
-
- if (strcmp(str, "first-touch-rr") == 0) {
- *policy = DOMAINSET_POLICY_FIRSTTOUCH;
- return (0);
- }
-
- if (strcmp(str, "first-touch") == 0) {
- *policy = DOMAINSET_POLICY_FIRSTTOUCH;
- return (0);
- }
-
- if (strcmp(str, "fixed-domain") == 0) {
- *policy = DOMAINSET_POLICY_PREFER;
- return (0);
- }
-
- if (strcmp(str, "fixed-domain-rr") == 0) {
- *policy = DOMAINSET_POLICY_PREFER;
- return (0);
- }
-
- return (-1);
-}
-
-static void
-usage(void)
-{
-
- printf("usage: numactl --get [--tid/-t <tid>] [--pid/-p <pid>]\n");
- printf(" numactl --set [--tid=<tid>] [--pid/-p<pid>]\n");
- printf(" [--mempolicy/-l <policy>] [--memdomain/"
- "-m <domain>]\n");
- printf(" [--cpudomain/-c <domain>]\n");
- printf(" numactl [--mempolicy/-l <policy>] [--memdomain/-m "
- "<domain>]\n");
- printf(" [--cpudomain/-c <domain>] <cmd> ...\n");
-
- exit(EX_USAGE);
-}
-
-static int
-set_numa_domain_cpuaffinity(int cpu_domain, cpuwhich_t which, id_t id)
-{
- cpuset_t set;
- int error;
-
- error = cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_DOMAIN,
- cpu_domain, sizeof(set), &set);
- if (error != 0)
- err(1, "cpuset_getaffinity");
- error = cpuset_setaffinity(CPU_LEVEL_WHICH, which, id, sizeof(set),
- &set);
- if (error != 0)
- err(1, "cpuset_setaffinity");
-
- return (0);
-}
-
-/*
- * Attempt to maintain compatability with old style syscalls.
- */
-static int
-numa_setaffinity(cpuwhich_t which, id_t id, int policy, int domain)
-{
- domainset_t mask;
- int p;
-
- DOMAINSET_ZERO(&mask);
- if (policy == DOMAINSET_POLICY_PREFER)
- DOMAINSET_SET(domain, &mask);
- else if (cpuset_getdomain(CPU_LEVEL_ROOT, CPU_WHICH_PID, -1,
- sizeof(mask), &mask, &p) != 0)
- err(EXIT_FAILURE, "getdomain");
- return cpuset_setdomain(CPU_LEVEL_WHICH, which, id, sizeof(mask),
- &mask, policy);
-}
-
-int
-main(int argc, char *argv[])
-{
- lwpid_t tid;
- pid_t pid;
- cpuwhich_t which;
- id_t id;
- int error;
- int is_set, is_get;
- int mem_policy_set;
- int ch;
- int cpu_domain;
- int policy;
- int domain;
-
- id = -1;
- which = -1;
- is_set = 0;
- is_get = 0;
- mem_policy_set = 0;
- tid = -1;
- pid = -1;
- cpu_domain = -1;
- domain = -1;
- policy = DOMAINSET_POLICY_INVALID;
-
- while ((ch = getopt_long(argc, argv, "c:gl:m:p:st:", longopts,
- NULL)) != -1) {
- switch (ch) {
- case 'c':
- cpu_domain = atoi(optarg);
- break;
- case 'g':
- is_get = 1;
- break;
- case 'l':
- if (parse_policy(&policy, optarg) != 0) {
- fprintf(stderr,
- "Could not parse policy: '%s'\n", optarg);
- exit(1);
- }
- mem_policy_set = 1;
- break;
- case 'm':
- domain = atoi(optarg);
- break;
- case 'p':
- pid = atoi(optarg);
- break;
- case 's':
- is_set = 1;
- break;
- case 't':
- tid = atoi(optarg);
- break;
- default:
- usage();
- }
- }
- argc -= optind;
- argv += optind;
-
- /* Handle the user wishing to run a command */
- if (argc) {
- /* Ensure that a policy was set */
- if (mem_policy_set == 0) {
- fprintf(stderr, "Error: no policy given\n");
- usage();
- }
-
- /* Set current memory process policy, will be inherited */
- if (numa_setaffinity(CPU_WHICH_PID, -1, policy, domain) != 0)
- err(1, "numa_setaffinity");
-
- /* If a CPU domain policy was given, include that too */
- if (cpu_domain != -1)
- (void) set_numa_domain_cpuaffinity(cpu_domain,
- CPU_WHICH_PID, -1);
-
- errno = 0;
- execvp(*argv, argv);
- err(errno == ENOENT ? 127 : 126, "%s", *argv);
- }
-
- /* Figure out which */
- if (tid != -1) {
- which = CPU_WHICH_TID;
- id = tid;
- } else if (pid != -1) {
- which = CPU_WHICH_PID;
- id = pid;
- } else {
- fprintf(stderr, "Error: one of tid or pid must be given\n");
- usage();
- }
-
- /* Sanity checks */
- if (is_set && is_get) {
- fprintf(stderr, "Error: can't set both 'set' and 'get'\n");
- usage();
- }
-
- if (is_set && ! mem_policy_set) {
- fprintf(stderr, "Error: --set given, but no policy\n");
- usage();
- }
-
- /* If it's get, then get the policy and return */
- if (is_get) {
- domainset_t mask;
-
- error = cpuset_getdomain(CPU_LEVEL_WHICH, which, id,
- sizeof(mask), &mask, &policy);
- if (error != 0)
- err(1, "cpuset_getdomain");
- printf(" Policy: %s; domain: ",
- policy_to_str(policy));
- domain_print(&mask);
- exit(0);
- }
-
- /* Assume it's set */
-
- /* Syscall */
- error = numa_setaffinity(which, id, policy, domain);
- if (error != 0)
- err(1, "numa_setaffinity");
-
- /* If a CPU domain policy was given, include that too */
- if (cpu_domain != -1)
- (void) set_numa_domain_cpuaffinity(cpu_domain, which, id);
-
- exit(0);
-}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 18, 12:05 AM (14 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27701528
Default Alt Text
D16142.diff (25 KB)
Attached To
Mode
D16142: Get rid of some remnants of the old numa.
Attached
Detach File
Event Timeline
Log In to Comment