.\" $NetBSD: sched.3,v 1.18 2016/09/15 07:53:59 njoly Exp $ .\" .\" Copyright (c) 2008, 2016 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Mindaugas Rasiukevicius . .\" .\" 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. .\" .Dd August 5, 2016 .Dt SCHED 3 .Os .Sh NAME .Nm sched_setparam , .Nm sched_getparam , .Nm sched_setscheduler , .Nm sched_getscheduler , .Nm sched_get_priority_max , .Nm sched_get_priority_min , .Nm sched_rr_get_interval , .Nm sched_yield , .Nm sched_protect , .Nm sched_setaffinity_np , .Nm sched_getaffinity_np .Nd process scheduling .Sh LIBRARY .Lb librt .Sh SYNOPSIS .In sched.h .Ft int .Fn sched_setparam "pid_t pid" "const struct sched_param *param" .Ft int .Fn sched_getparam "pid_t pid" "struct sched_param *param" .Ft int .Fn sched_setscheduler "pid_t pid" "int policy" "const struct sched_param *param" .Ft int .Fn sched_getscheduler "pid_t pid" .Ft int .Fn sched_get_priority_max "int policy" .Ft int .Fn sched_get_priority_min "int policy" .Ft int .Fn sched_rr_get_interval "pid_t pid" "struct timespec *interval" .Ft int .Fn sched_yield "void" .Ft int .Fn sched_setaffinity_np "pid_t pid" "size_t size" "cpuset_t *cpuset" .Ft int .Fn sched_getaffinity_np "pid_t pid" "size_t size" "cpuset_t *cpuset" .Ft int .Fn sched_protect "int priority" .Sh DESCRIPTION This section describes the functions used to get scheduling information about processes, and control the scheduling of processes. .Pp Available scheduling policies (classes) are: .Bl -tag -width SCHED_OTHER .It Dv SCHED_OTHER Time-sharing (TS) scheduling policy. The default policy in .Nx . .It Dv SCHED_FIFO First in, first out (FIFO) scheduling policy. .It Dv SCHED_RR Round robin scheduling policy. .El .Pp The .Fa struct sched_param contains at least one member: .Bl -tag -width flags .It Fa sched_priority Specifies the priority of the process. For .Dv SCHED_OTHER , must be .Dv PRI_NONE ; the kernel will dynamically assign priorities to the thread based on CPU load. .El .Sh FUNCTIONS .Bl -tag -width compact .It Fn sched_setparam pid param Sets the scheduling parameters for the process specified by .Fa pid to .Fa param . If the value of .Fa pid is equal to zero, then the calling process is used. .It Fn sched_getparam pid param Gets the scheduling parameters of the process specified by .Fa pid into the structure .Fa param . If the value of .Fa pid is equal to zero, then the calling process is used. .It Fn sched_setscheduler pid policy param Set the scheduling policy and parameters for the process specified by .Fa pid . If the value of .Fa pid is equal to zero, then the calling process is used. .It Fn sched_getscheduler pid Returns the scheduling policy of the process specified by .Fa pid . If the value of .Fa pid is equal to zero, then the calling process is used. .It Fn sched_get_priority_max policy Returns the maximal priority which may be used for the scheduling policy specified by .Fa policy . .It Fn sched_get_priority_min policy Returns the minimal priority which may be used for the scheduling policy specified by .Fa policy . .It Fn sched_rr_get_interval pid interval Returns the time quantum into the structure .Fa interval of the process specified by .Fa pid . If the value of .Fa pid is equal to zero, then the calling process is used. The process must be running at .Fa SCHED_RR scheduling policy. .It Fn sched_yield Yields a processor voluntarily and gives other threads a chance to run without waiting for an involuntary preemptive switch. .It Fn sched_setaffinity_np pid size cpuset Set the affinity mask specified by .Fa cpuset for the process specified by .Fa pid . At least one valid CPU must be set in the mask. .It Fn sched_getaffinity_np pid size cpuset Get the affinity mask of the process specified by .Fa pid into the .Fa cpuset . .It Fn sched_protect priority Performs priority protection using the .Dv PTHREAD_PRIO_PROTECT protocol. This function will increase the protected priority of the caller thread to .Fa priority if the current thread's protected priority is smaller than .Fa priority . Multiple calls to .Fn sched_protect with a positive priority will .Dq push a priority level to the current thread, whereas calling .Fn sched_protect with a .Fa priority level of .Dv \-1 will .Dq pop a priority level. When the level reaches .Dv 0 (the same number of .Dq pushes and .Dq pops have been issued) the original thread priority will be restored. .El .Sh IMPLEMENTATION NOTES Setting CPU .Xr affinity 3 requires super-user privileges. Ordinary users can be allowed to control CPU affinity of their threads via the .Pa security.models.extensions.user_set_cpu_affinity .Xr sysctl 7 . See .Xr secmodel_extensions 9 . .Pp Portable applications should not use the .Fn sched_setaffinity_np and .Fn sched_getaffinity_np functions. .Sh RETURN VALUES .Fn sched_protect , .Fn sched_setparam , .Fn sched_getparam , .Fn sched_rr_get_interval , and .Fn sched_yield return 0 on success. Otherwise, \-1 is returned and .Va errno is set to indicate the error. .Pp .Fn sched_setscheduler returns the previously used scheduling policy on success. Otherwise, \-1 is returned and .Va errno is set to indicate the error. .Pp .Fn sched_getscheduler returns the scheduling policy on success. Otherwise, \-1 is returned and .Va errno is set to indicate the error. .Pp .Fn sched_get_priority_max and .Fn sched_get_priority_min return the maximal/minimal priority value on success. Otherwise, \-1 is returned and .Va errno is set to indicate the error. .Pp .Fn sched_setaffinity_np and .Fn sched_getaffinity_np return 0 on success. Otherwise, \-1 is returned and .Va errno is set to indicate the error. .Sh ERRORS The .Fn sched_setparam and .Fn sched_setscheduler functions fail if: .Bl -tag -width Er .It Bq Er EINVAL At least one of the specified scheduling parameters was invalid. .It Bq Er EPERM The calling process has no appropriate privileges to perform the operation. .It Bq Er ESRCH No process can be found corresponding to the PID specified by .Fa pid , and the value of .Fa pid is not zero. .El .Pp The .Fn sched_getparam and .Fn sched_getscheduler functions fail if: .Bl -tag -width Er .It Bq Er EPERM The calling process is not a super-user and its effective user id does not match the effective user-id of the specified process. .It Bq Er ESRCH No process can be found corresponding to that specified by .Fa pid , and the value of .Fa pid is not zero. .El .Pp The .Fn sched_get_priority_max and .Fn sched_get_priority_min functions fail if: .Bl -tag -width Er .It Bq Er EINVAL The specified scheduling policy is invalid. .El .Pp The .Fn sched_rr_get_interval function fails if: .Bl -tag -width Er .It Bq Er ESRCH No process can be found corresponding to that specified by .Fa pid , and the value of .Fa pid is not zero. .El .Pp The .Fn sched_protect function fails if: .Bl -tag -width Er .It Bq Er EINVAL The thread was not priority protected. .It Bq Er EPERM The .Fa priority parameter was out of range (not in the range between .Dv SCHED_PRIO_MIN and .Dv SCHED_PRIO_MAX ) . .El .Sh SEE ALSO .Xr affinity 3 , .Xr cpuset 3 , .Xr pset 3 , .Xr schedctl 8 .Sh STANDARDS These functions, except .Fn sched_setaffinity_np and .Fn sched_getaffinity_np , are expected to conform the .St -p1003.1-2001 standard. .Sh HISTORY The scheduling functions appeared in .Nx 5.0 .