intelrdt: add update command support
Add runc update command support for Intel RDT/CAT. for example: runc update --l3-cache-schema "L3:0=f;1=f" <container-id> Signed-off-by: Xiaochen Shen <xiaochen.shen@intel.com>
This commit is contained in:
parent
2549545df5
commit
65918b02a9
34
update.go
34
update.go
|
@ -9,6 +9,8 @@ import (
|
|||
"strconv"
|
||||
|
||||
"github.com/docker/go-units"
|
||||
"github.com/opencontainers/runc/libcontainer/configs"
|
||||
"github.com/opencontainers/runc/libcontainer/intelrdt"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
@ -112,6 +114,10 @@ other options are ignored.
|
|||
Name: "pids-limit",
|
||||
Usage: "Maximum number of pids allowed in the container",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "l3-cache-schema",
|
||||
Usage: "The string of Intel RDT/CAT L3 cache schema",
|
||||
},
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
if err := checkArgs(context, 1, exactArgs); err != nil {
|
||||
|
@ -254,6 +260,34 @@ other options are ignored.
|
|||
config.Cgroups.Resources.MemorySwap = *r.Memory.Swap
|
||||
config.Cgroups.Resources.PidsLimit = r.Pids.Limit
|
||||
|
||||
// Update Intel RDT/CAT
|
||||
if val := context.String("l3-cache-schema"); val != "" {
|
||||
if !intelrdt.IsEnabled() {
|
||||
return fmt.Errorf("Intel RDT: l3 cache schema is not enabled")
|
||||
}
|
||||
|
||||
// If intelRdt is not specified in original configuration, we just don't
|
||||
// Apply() to create intelRdt group or attach tasks for this container.
|
||||
// In update command, we could re-enable through IntelRdtManager.Apply()
|
||||
// and then update intelrdt constraint.
|
||||
if config.IntelRdt == nil {
|
||||
state, err := container.State()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
config.IntelRdt = &configs.IntelRdt{}
|
||||
intelRdtManager := intelrdt.IntelRdtManager{
|
||||
Config: &config,
|
||||
Id: container.ID(),
|
||||
Path: state.IntelRdtPath,
|
||||
}
|
||||
if err := intelRdtManager.Apply(state.InitProcessPid); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
config.IntelRdt.L3CacheSchema = val
|
||||
}
|
||||
|
||||
return container.Set(config)
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue