Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4310 from egernst/core-sched
shim: add support for core scheduling
- Loading branch information
Showing
4 changed files
with
61 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# Core scheduling | ||
|
||
Core scheduling is a Linux kernel feature that allows only trusted tasks to run concurrently on | ||
CPUs sharing compute resources (for example, hyper-threads on a core). | ||
|
||
Containerd versions >= 1.6.4 leverage this to treat all of the processes associated with a | ||
given pod or container to be a single group of trusted tasks. To indicate this should be carried | ||
out, containerd sets the `SCHED_CORE` environment variable for each shim it spawns. When this is | ||
set, the Kata Containers shim implementation uses the `prctl` syscall to create a new core scheduling | ||
domain for the shim process itself as well as future VMM processes it will start. | ||
|
||
For more details on the core scheduling feature, see the [Linux documentation](https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/core-scheduling.html). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Copyright (c) 2022 Apple Inc. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
|
||
package utils | ||
|
||
import ( | ||
"golang.org/x/sys/unix" | ||
) | ||
|
||
// PidType is the type of provided pid value and how it should be treated | ||
type PidType int | ||
|
||
const ( | ||
pidTypePid = 0 | ||
pidTypeThreadGroupId = 1 | ||
pidTypeProcessGroupId = 2 | ||
|
||
// Pid affects the current pid | ||
Pid PidType = pidTypePid | ||
// ThreadGroup affects all threads in the group | ||
ThreadGroup PidType = pidTypeThreadGroupId | ||
// ProcessGroup affects all processes in the group | ||
ProcessGroup PidType = pidTypeProcessGroupId | ||
) | ||
|
||
// Create a new sched core domain | ||
func Create(t PidType) error { | ||
return unix.Prctl(unix.PR_SCHED_CORE, unix.PR_SCHED_CORE_CREATE, 0, uintptr(t), 0) | ||
} | ||
|
||
// ShareFrom shares the sched core domain from the provided pid | ||
func ShareFrom(pid uint64, t PidType) error { | ||
return unix.Prctl(unix.PR_SCHED_CORE, unix.PR_SCHED_CORE_SHARE_FROM, uintptr(pid), uintptr(t), 0) | ||
} |