Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ The following pieces of container metadata are available to plugins in NRI:
- RDT class
- Unified cgroup v2 parameter map
- Linux seccomp profile and policy
- scheduling policy parameters
- container (init) process ID
- container (init process) exit status
- timestamp of container creation
Expand Down Expand Up @@ -258,6 +259,7 @@ container parameters:
- Unified cgroup v2 parameter map
- Linux seccomp policy
- Linux namespaces
- scheduling policy parameters

### Container Updates

Expand Down
37 changes: 37 additions & 0 deletions pkg/adaptation/adaptation_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,20 @@ var _ = Describe("Plugin container creation adjustments", func() {
Class: api.IOPrioClass_IOPRIO_CLASS_NONE,
})

case "linux scheduler":
a.SetLinuxScheduler(&api.LinuxScheduler{
Policy: api.LinuxSchedulerPolicy_SCHED_FIFO,
Priority: 10,
Flags: []api.LinuxSchedulerFlag{
api.LinuxSchedulerFlag_SCHED_FLAG_RESET_ON_FORK,
},
})

case "clear linux scheduler":
a.SetLinuxScheduler(&api.LinuxScheduler{
Policy: api.LinuxSchedulerPolicy_SCHED_NONE,
})

case "resources/cpu":
a.SetLinuxCPUShares(123)
a.SetLinuxCPUQuota(456)
Expand Down Expand Up @@ -758,13 +772,35 @@ var _ = Describe("Plugin container creation adjustments", func() {
},
},
),
Entry("adjust linux scheduler", "linux scheduler",
&api.ContainerAdjustment{
Linux: &api.LinuxContainerAdjustment{
Scheduler: &api.LinuxScheduler{
Policy: api.LinuxSchedulerPolicy_SCHED_FIFO,
Priority: 10,
Flags: []api.LinuxSchedulerFlag{
api.LinuxSchedulerFlag_SCHED_FLAG_RESET_ON_FORK,
},
},
},
},
),
Entry("clear I/O priority", "clear I/O priority",
&api.ContainerAdjustment{
Linux: &api.LinuxContainerAdjustment{
IoPriority: &api.LinuxIOPriority{},
},
},
),
Entry("clear linux scheduler", "clear linux scheduler",
&api.ContainerAdjustment{
Linux: &api.LinuxContainerAdjustment{
Scheduler: &api.LinuxScheduler{
Policy: api.LinuxSchedulerPolicy_SCHED_NONE,
},
},
},
),

Entry("adjust CPU resources", "resources/cpu",
&api.ContainerAdjustment{
Expand Down Expand Up @@ -1008,6 +1044,7 @@ var _ = Describe("Plugin container creation adjustments", func() {
),
Entry("adjust resources", "resources/classes", false, true, nil),
Entry("adjust I/O priority (conflicts)", "I/O priority", false, true, nil),
Entry("adjust linux scheduler (conflicts)", "linux scheduler", false, true, nil),
)
})

Expand Down
3 changes: 3 additions & 0 deletions pkg/adaptation/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ type (
LinuxDeviceCgroup = api.LinuxDeviceCgroup
LinuxIOPriority = api.LinuxIOPriority
LinuxSeccomp = api.LinuxSeccomp
LinuxScheduler = api.LinuxScheduler
LinuxSchedulerPolicy = api.LinuxSchedulerPolicy
LinuxSchedulerFlag = api.LinuxSchedulerFlag
CDIDevice = api.CDIDevice
HugepageLimit = api.HugepageLimit
Hooks = api.Hooks
Expand Down
20 changes: 20 additions & 0 deletions pkg/adaptation/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,9 @@ func (r *result) adjust(rpl *ContainerAdjustment, plugin string) error {
if err := r.adjustNamespaces(rpl.Linux.Namespaces, plugin); err != nil {
return err
}
if err := r.adjustLinuxScheduler(rpl.Linux.Scheduler, plugin); err != nil {
return err
}
}
if err := r.adjustRlimits(rpl.Rlimits, plugin); err != nil {
return err
Expand Down Expand Up @@ -858,6 +861,23 @@ func (r *result) adjustSeccompPolicy(adjustment *LinuxSeccomp, plugin string) er
return nil
}

func (r *result) adjustLinuxScheduler(sch *LinuxScheduler, plugin string) error {
if sch == nil {
return nil
}

create, id := r.request.create, r.request.create.Container.Id

if err := r.owners.ClaimLinuxScheduler(id, plugin); err != nil {
return err
}

create.Container.Linux.Scheduler = sch
r.reply.adjust.Linux.Scheduler = sch

return nil
}

func (r *result) adjustRlimits(rlimits []*POSIXRlimit, plugin string) error {
create, id, adjust := r.request.create, r.request.create.Container.Id, r.reply.adjust
for _, l := range rlimits {
Expand Down
6 changes: 6 additions & 0 deletions pkg/api/adjustment.go
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,12 @@ func (a *ContainerAdjustment) SetLinuxSeccompPolicy(seccomp *LinuxSeccomp) {
a.Linux.SeccompPolicy = seccomp
}

// SetLinuxScheduler records setting the Linux scheduler attributes for a container.
func (a *ContainerAdjustment) SetLinuxScheduler(sch *LinuxScheduler) {
a.initLinux()
a.Linux.Scheduler = sch
}

//
// Initializing a container adjustment and container update.
//
Expand Down
Loading
Loading