//po4a: entry man manual

= coresched(1)
:doctype: manpage
:man manual: User Commands
:man source: util-linux {release-version}
:page-layout: base
:command: coresched
:colon: :
:copyright: ©

== NAME

coresched - manage core scheduling cookies for tasks

== SYNOPSIS

*{command}* [*get*] [*-s* _pid_]

*{command}* *new* [*-t* _type_] *-d* _pid_

*{command}* *new* [*-t* _type_] \-- _command_ [_argument_...]

*{command}* *copy* [*-s* _pid_] [*-t* _type_] *-d* _pid_

*{command}* *copy* [*-s* _pid_] [*-t* _type_] \-- _command_ [_argument_...]

== DESCRIPTION
The *{command}* command is used to retrieve or modify the core scheduling cookies of a running process given its _pid_, or to spawn a new _command_ with core scheduling cookies.

Core scheduling permits the definition of groups of tasks that are allowed to share a physical core.
This is done by assigning a cookie to each task.
Only tasks have the same cookie are allowed to be scheduled on the same physical core.

It is possible to either assign a new random cookie to a task, or copy a cookie from another task. It is not possible to choose the value of the cookie.

== FUNCTIONS
*get*::
Retrieve the core scheduling cookie of the PID specified in *-s*.
If *-s* is omitted, it will get the cookie of the current *{command}* process.

*new*::
Assign a new cookie to an existing PID specified in *-d*, or execute _command_ with a new cookie.

*copy*::
Copy the cookie from an existing PID (*-s*) to another PID (*-d*), or execute _command_ with that cookie.
If *-s* is omitted, it will get the cookie of the current *{command}* process.

If no function is specified, it will run the *get* function.

== OPTIONS
*-s*, *--source* _PID_::
Which _PID_ to get the cookie from.
If this option is omitted, it will get the cookie from the current *{command}* process.

*-d*, *--dest* _PID_::
Which _PID_ to modify the cookie of.

*-t*, *--dest-type* _TYPE_::
The type of the PID whose cookie will be modified. This can be one of three values:
- *pid*, or process ID
- *tgid*, or thread group ID (default value)
- *pgid*, or process group ID

*-v*, *--verbose*::
Show extra information when modifying cookies of tasks.

include::man-common/help-version.adoc[]

== EXAMPLES
Get the core scheduling cookie of the {command} task itself, usually inherited from its parent{colon}::
*{command} get*

Get the core scheduling cookie of a task with PID _123_{colon}::
*{command} get -s* _123_

Give a task with PID _123_ a new core scheduling cookie{colon}::
*{command} new -d* _123_

Spawn a new task with a new core scheduling cookie{colon}::
*{command} new* \-- _command_ [_argument_...]

Copy the cookie from the current {command} process another task with pid _456_{colon}::
*{command} copy -d* _456_

Copy the cookie from a task with pid _123_ to another task with pid _456_{colon}::
*{command} copy -s* _123_ *-d* _456_

Copy the cookie from a task with pid _123_ to a new task _command_{colon}::
*{command} copy -s* _123_ \-- _command_ [_argument_...]

Copy the cookie from a task with pid _123_ to the process group ID _456_{colon}::
*{command} copy -s* _123_ *-t* _pgid_ *-d* _456_

== PERMISSIONS
Retrieving or modifying the core scheduling cookie of a process requires *PTRACE_MODE_READ_REALCREDS* ptrace access to that process.
See the section "Ptrace access mode checking" in *ptrace*(2) for more information.

== EXIT STATUS
On success, *{command}* returns 0.
If *{command}* fails, it will print an error and return 1.

If a _command_ is being executed, the return value of *{command}* will be the return value of _command_.

== NOTES
*{command}* requires core scheduling support in the kernel.
This can be enabled via the *CONFIG_SCHED_CORE* kernel config option.

== AUTHORS
mailto:thijs@raymakers.nl[Thijs Raymakers],
mailto:pauld@redhat.com[Phil Auld]

== COPYRIGHT

Copyright {copyright} 2024 Thijs Raymakers and Phil Auld. This is free software licensed under the EUPL.

== SEE ALSO
*chrt*(1),
*nice*(1),
*renice*(1),
*taskset*(1),
*ptrace*(2),
*sched*(7)

The Linux kernel source files _Documentation/admin-guide/hw-vuln/core-scheduling.rst_

include::man-common/bugreports.adoc[]

include::man-common/footer.adoc[]

ifdef::translation[]
include::man-common/translation.adoc[]
endif::[]
