From 85430be6dd48574124567211cacf4367b58fb2fb Mon Sep 17 00:00:00 2001 From: Piotr Kazmierczak <470696+pkazmierczak@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:36:27 +0200 Subject: [PATCH] raw_exec: oom_score_adj support (#23308) --- .changelog/23308.txt | 3 + drivers/rawexec/driver.go | 9 + drivers/shared/executor/executor.go | 4 + .../executor/executor_universal_linux.go | 10 +- .../executor/executor_universal_linux_test.go | 28 ++++ drivers/shared/executor/grpc_client.go | 1 + drivers/shared/executor/grpc_server.go | 1 + drivers/shared/executor/proto/executor.pb.go | 158 ++++++++++-------- drivers/shared/executor/proto/executor.proto | 1 + plugins/drivers/driver.go | 7 +- website/content/docs/drivers/raw_exec.mdx | 5 +- 11 files changed, 145 insertions(+), 82 deletions(-) create mode 100644 .changelog/23308.txt diff --git a/.changelog/23308.txt b/.changelog/23308.txt new file mode 100644 index 000000000..9362291fd --- /dev/null +++ b/.changelog/23308.txt @@ -0,0 +1,3 @@ +```release-note:improvement +raw_exec: Added support for oom_score_adj +``` diff --git a/drivers/rawexec/driver.go b/drivers/rawexec/driver.go index f1816e240..9e59488a9 100644 --- a/drivers/rawexec/driver.go +++ b/drivers/rawexec/driver.go @@ -90,6 +90,7 @@ var ( "args": hclspec.NewAttr("args", "list(string)", false), "cgroup_v2_override": hclspec.NewAttr("cgroup_v2_override", "string", false), "cgroup_v1_override": hclspec.NewAttr("cgroup_v1_override", "list(map(string))", false), + "oom_score_adj": hclspec.NewAttr("oom_score_adj", "number", false), }) // capabilities is returned by the Capabilities RPC and indicates what @@ -156,6 +157,9 @@ type TaskConfig struct { // // * All resource isolation guarantees are lost FOR ALL TASKS if set * OverrideCgroupV1 hclutils.MapStrStr `codec:"cgroup_v1_override"` + + // OOMScoreAdj sets the oom_score_adj on Linux systems + OOMScoreAdj int `codec:"oom_score_adj"` } // TaskState is the state which is encoded in the handle returned in @@ -324,6 +328,10 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive return nil, nil, fmt.Errorf("failed to decode driver config: %v", err) } + if driverConfig.OOMScoreAdj < 0 { + return nil, nil, fmt.Errorf("oom_score_adj must not be negative") + } + d.logger.Info("starting task", "driver_cfg", hclog.Fmt("%+v", driverConfig)) handle := drivers.NewTaskHandle(taskHandleVersion) handle.Config = cfg @@ -353,6 +361,7 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive Resources: cfg.Resources.Copy(), OverrideCgroupV2: cgroupslib.CustomPathCG2(driverConfig.OverrideCgroupV2), OverrideCgroupV1: driverConfig.OverrideCgroupV1, + OOMScoreAdj: int32(driverConfig.OOMScoreAdj), } // ensure only one of cgroups_v1_override and cgroups_v2_override have been diff --git a/drivers/shared/executor/executor.go b/drivers/shared/executor/executor.go index 71897b541..6f2422660 100644 --- a/drivers/shared/executor/executor.go +++ b/drivers/shared/executor/executor.go @@ -163,6 +163,10 @@ type ExecCommand struct { // // * All resource isolation guarantees are lost FOR ALL TASKS if set * OverrideCgroupV1 map[string]string + + // OOMScoreAdj allows setting oom_score_adj (likelihood of process being + // OOM killed) on Linux systems + OOMScoreAdj int32 } func (c *ExecCommand) getCgroupOr(controller, fallback string) string { diff --git a/drivers/shared/executor/executor_universal_linux.go b/drivers/shared/executor/executor_universal_linux.go index b42a44235..1ce8615c2 100644 --- a/drivers/shared/executor/executor_universal_linux.go +++ b/drivers/shared/executor/executor_universal_linux.go @@ -121,8 +121,8 @@ func (e *UniversalExecutor) statCG(cgroup string) (int, func(), error) { func (e *UniversalExecutor) configureResourceContainer(command *ExecCommand, pid int) (func(), error) { cgroup := command.StatsCgroup() - // ensure tasks do not inherit Nomad agent oom_score_adj value - if err := e.setOomAdj(); err != nil { + // ensure tasks get the desired oom_score_adj value set + if err := e.setOomAdj(command.OOMScoreAdj); err != nil { return nil, err } @@ -280,12 +280,10 @@ func (e *UniversalExecutor) configureCG2(cgroup string, command *ExecCommand) { _ = ed.Write("cpuset.cpus", cpusetCpus) } -func (e *UniversalExecutor) setOomAdj() error { - // children should not inherit Nomad agent oom_score_adj value - // +func (e *UniversalExecutor) setOomAdj(oomScore int32) error { // /proc/self/oom_score_adj should work on both cgroups v1 and v2 systems // range is -1000 to 1000; 0 is the default - return os.WriteFile("/proc/self/oom_score_adj", []byte("0"), 0644) + return os.WriteFile("/proc/self/oom_score_adj", []byte(strconv.Itoa(int(oomScore))), 0644) } func (*UniversalExecutor) computeCPU(command *ExecCommand) uint64 { diff --git a/drivers/shared/executor/executor_universal_linux_test.go b/drivers/shared/executor/executor_universal_linux_test.go index c40ee32dd..5ff033ef9 100644 --- a/drivers/shared/executor/executor_universal_linux_test.go +++ b/drivers/shared/executor/executor_universal_linux_test.go @@ -7,6 +7,9 @@ package executor import ( "fmt" + "os" + "strconv" + "strings" "testing" "github.com/hashicorp/nomad/ci" @@ -99,3 +102,28 @@ func TestExecutor_InvalidCgroup(t *testing.T) { must.ErrorContains(t, err, "unable to configure cgroups: no such file or directory") } + +func TestUniversalExecutor_setOomAdj(t *testing.T) { + ci.Parallel(t) + + factory := universalFactory + testExecCmd := testExecutorCommand(t) + execCmd, allocDir := testExecCmd.command, testExecCmd.allocDir + execCmd.Cmd = "sleep" + execCmd.Args = []string{"infinity"} + execCmd.OOMScoreAdj = 1000 + + factory.configureExecCmd(t, execCmd) + defer allocDir.Destroy() + executor := factory.new(testlog.HCLogger(t), compute) + defer executor.Shutdown("", 0) + + p, err := executor.Launch(execCmd) + must.NoError(t, err) + + oomScore, err := os.ReadFile(fmt.Sprintf("/proc/%d/oom_score_adj", p.Pid)) + must.NoError(t, err) + + oomScoreInt, _ := strconv.Atoi(strings.TrimSuffix(string(oomScore), "\n")) + must.Eq(t, execCmd.OOMScoreAdj, int32(oomScoreInt)) +} diff --git a/drivers/shared/executor/grpc_client.go b/drivers/shared/executor/grpc_client.go index e5abace38..2f55bc65a 100644 --- a/drivers/shared/executor/grpc_client.go +++ b/drivers/shared/executor/grpc_client.go @@ -54,6 +54,7 @@ func (c *grpcExecutorClient) Launch(cmd *ExecCommand) (*ProcessState, error) { Capabilities: cmd.Capabilities, CgroupV2Override: cmd.OverrideCgroupV2, CgroupV1Override: cmd.OverrideCgroupV1, + OomScoreAdj: cmd.OOMScoreAdj, } resp, err := c.client.Launch(ctx, req) if err != nil { diff --git a/drivers/shared/executor/grpc_server.go b/drivers/shared/executor/grpc_server.go index 82474cd67..7811e7bbd 100644 --- a/drivers/shared/executor/grpc_server.go +++ b/drivers/shared/executor/grpc_server.go @@ -43,6 +43,7 @@ func (s *grpcExecutorServer) Launch(ctx context.Context, req *proto.LaunchReques Capabilities: req.Capabilities, OverrideCgroupV2: req.CgroupV2Override, OverrideCgroupV1: req.CgroupV1Override, + OOMScoreAdj: req.OomScoreAdj, }) if err != nil { diff --git a/drivers/shared/executor/proto/executor.pb.go b/drivers/shared/executor/proto/executor.pb.go index 3e1c1b3ea..7515b8c65 100644 --- a/drivers/shared/executor/proto/executor.pb.go +++ b/drivers/shared/executor/proto/executor.pb.go @@ -48,6 +48,7 @@ type LaunchRequest struct { Capabilities []string `protobuf:"bytes,19,rep,name=capabilities,proto3" json:"capabilities,omitempty"` CgroupV2Override string `protobuf:"bytes,20,opt,name=cgroup_v2_override,json=cgroupV2Override,proto3" json:"cgroup_v2_override,omitempty"` CgroupV1Override map[string]string `protobuf:"bytes,21,rep,name=cgroup_v1_override,json=cgroupV1Override,proto3" json:"cgroup_v1_override,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OomScoreAdj int32 `protobuf:"varint,22,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -226,6 +227,13 @@ func (m *LaunchRequest) GetCgroupV1Override() map[string]string { return nil } +func (m *LaunchRequest) GetOomScoreAdj() int32 { + if m != nil { + return m.OomScoreAdj + } + return 0 +} + type LaunchResponse struct { Process *ProcessState `protobuf:"bytes,1,opt,name=process,proto3" json:"process,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -900,80 +908,82 @@ func init() { } var fileDescriptor_66b85426380683f3 = []byte{ - // 1163 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x6b, 0x8f, 0xdb, 0x44, - 0x17, 0xae, 0x37, 0xbb, 0xb9, 0x9c, 0x24, 0xbb, 0xe9, 0xbc, 0x6d, 0x5f, 0x37, 0x08, 0x75, 0x31, - 0x12, 0x8d, 0xa0, 0x78, 0xdb, 0xf4, 0x2a, 0x90, 0x28, 0xea, 0xb6, 0xa0, 0xaa, 0x17, 0x56, 0xde, - 0xd2, 0x4a, 0x7c, 0xc0, 0x4c, 0xed, 0x69, 0x32, 0x8a, 0xe3, 0x31, 0x33, 0xe3, 0x74, 0x57, 0x42, - 0xe2, 0x4f, 0x80, 0xc4, 0x0f, 0xe0, 0x33, 0xbf, 0x11, 0xcd, 0xcd, 0x9b, 0x6c, 0x4b, 0xe5, 0x14, - 0xf1, 0x29, 0x33, 0x8f, 0x9f, 0x73, 0x9b, 0x33, 0xe7, 0x99, 0xc0, 0x95, 0x94, 0xd3, 0x05, 0xe1, - 0x62, 0x4f, 0x4c, 0x31, 0x27, 0xe9, 0x1e, 0x39, 0x22, 0x49, 0x29, 0x19, 0xdf, 0x2b, 0x38, 0x93, - 0xac, 0xda, 0x86, 0x7a, 0x8b, 0x3e, 0x99, 0x62, 0x31, 0xa5, 0x09, 0xe3, 0x45, 0x98, 0xb3, 0x39, - 0x4e, 0xc3, 0x22, 0x2b, 0x27, 0x34, 0x17, 0xe1, 0x2a, 0x6f, 0x78, 0x69, 0xc2, 0xd8, 0x24, 0x23, - 0xc6, 0xc9, 0xcb, 0xf2, 0xd5, 0x9e, 0xa4, 0x73, 0x22, 0x24, 0x9e, 0x17, 0x96, 0x10, 0x58, 0xc3, - 0x3d, 0x17, 0xde, 0x84, 0x33, 0x3b, 0xc3, 0x09, 0xfe, 0x6a, 0x43, 0xff, 0x31, 0x2e, 0xf3, 0x64, - 0x1a, 0x91, 0x9f, 0x4b, 0x22, 0x24, 0x1a, 0x40, 0x23, 0x99, 0xa7, 0xbe, 0xb7, 0xeb, 0x8d, 0x3a, - 0x91, 0x5a, 0x22, 0x04, 0x9b, 0x98, 0x4f, 0x84, 0xbf, 0xb1, 0xdb, 0x18, 0x75, 0x22, 0xbd, 0x46, - 0x4f, 0xa1, 0xc3, 0x89, 0x60, 0x25, 0x4f, 0x88, 0xf0, 0x1b, 0xbb, 0xde, 0xa8, 0x3b, 0xbe, 0x1a, - 0xfe, 0x53, 0xe2, 0x36, 0xbe, 0x09, 0x19, 0x46, 0xce, 0x2e, 0x3a, 0x71, 0x81, 0x2e, 0x41, 0x57, - 0xc8, 0x94, 0x95, 0x32, 0x2e, 0xb0, 0x9c, 0xfa, 0x9b, 0x3a, 0x3a, 0x18, 0xe8, 0x00, 0xcb, 0xa9, - 0x25, 0x10, 0xce, 0x0d, 0x61, 0xab, 0x22, 0x10, 0xce, 0x35, 0x61, 0x00, 0x0d, 0x92, 0x2f, 0xfc, - 0xa6, 0x4e, 0x52, 0x2d, 0x55, 0xde, 0xa5, 0x20, 0xdc, 0x6f, 0x69, 0xae, 0x5e, 0xa3, 0x8b, 0xd0, - 0x96, 0x58, 0xcc, 0xe2, 0x94, 0x72, 0xbf, 0xad, 0xf1, 0x96, 0xda, 0xdf, 0xa7, 0x1c, 0x5d, 0x86, - 0x1d, 0x97, 0x4f, 0x9c, 0xd1, 0x39, 0x95, 0xc2, 0xef, 0xec, 0x7a, 0xa3, 0x76, 0xb4, 0xed, 0xe0, - 0xc7, 0x1a, 0x45, 0x37, 0xe0, 0xdc, 0x4b, 0x2c, 0x68, 0x12, 0x17, 0x9c, 0x25, 0x44, 0x88, 0x38, - 0x99, 0x70, 0x56, 0x16, 0x3e, 0x28, 0xf6, 0xbd, 0x0d, 0xdf, 0x8b, 0x90, 0xfe, 0x7e, 0x60, 0x3e, - 0xef, 0xeb, 0xaf, 0xe8, 0x3e, 0x34, 0xe7, 0xac, 0xcc, 0xa5, 0xf0, 0xbb, 0xbb, 0x8d, 0x51, 0x77, - 0x7c, 0xa5, 0xe6, 0x71, 0x3d, 0x51, 0x46, 0x91, 0xb5, 0x45, 0xdf, 0x42, 0x2b, 0x25, 0x0b, 0xaa, - 0x4e, 0xbd, 0xa7, 0xdd, 0x7c, 0x5e, 0xd3, 0xcd, 0x7d, 0x6d, 0x15, 0x39, 0x6b, 0x34, 0x85, 0xb3, - 0x39, 0x91, 0xaf, 0x19, 0x9f, 0xc5, 0x54, 0xb0, 0x0c, 0x4b, 0xca, 0x72, 0xbf, 0xaf, 0x1b, 0xf9, - 0x65, 0x4d, 0x97, 0x4f, 0x8d, 0xfd, 0x43, 0x67, 0x7e, 0x58, 0x90, 0x24, 0x1a, 0xe4, 0xa7, 0x50, - 0x14, 0x40, 0x3f, 0x67, 0x71, 0x41, 0x17, 0x4c, 0xc6, 0x9c, 0x31, 0xe9, 0x6f, 0xeb, 0x53, 0xed, - 0xe6, 0xec, 0x40, 0x61, 0x11, 0x63, 0x12, 0x8d, 0x60, 0x90, 0x92, 0x57, 0xb8, 0xcc, 0x64, 0x5c, - 0xd0, 0x34, 0x9e, 0xb3, 0x94, 0xf8, 0x3b, 0xba, 0x3d, 0xdb, 0x16, 0x3f, 0xa0, 0xe9, 0x13, 0x96, - 0x92, 0x65, 0x26, 0x2d, 0x12, 0xc3, 0x1c, 0xac, 0x30, 0x1f, 0x16, 0x89, 0x66, 0x7e, 0x0c, 0xfd, - 0xa4, 0x28, 0x05, 0x91, 0xae, 0x3f, 0x67, 0x35, 0xad, 0x67, 0x40, 0xdb, 0x95, 0x0f, 0x01, 0x70, - 0x96, 0xb1, 0xd7, 0x71, 0x82, 0x0b, 0xe1, 0x23, 0x7d, 0x79, 0x3a, 0x1a, 0xd9, 0xc7, 0x85, 0x40, - 0x01, 0xf4, 0x12, 0x5c, 0xe0, 0x97, 0x34, 0xa3, 0x92, 0x12, 0xe1, 0xff, 0x4f, 0x13, 0x56, 0x30, - 0x74, 0x05, 0x90, 0x09, 0x10, 0x2f, 0xc6, 0x31, 0x5b, 0x10, 0xce, 0x69, 0x4a, 0xfc, 0x73, 0x3a, - 0xd8, 0xc0, 0x7c, 0x79, 0x3e, 0xfe, 0xce, 0xe2, 0xe8, 0xf8, 0x84, 0x7d, 0xed, 0x84, 0x7d, 0x5e, - 0xf7, 0xf2, 0x51, 0x58, 0x6f, 0xf4, 0xc3, 0x95, 0x89, 0x0d, 0x4d, 0x29, 0xcf, 0xaf, 0xb9, 0x18, - 0x0f, 0x72, 0xc9, 0x8f, 0xab, 0xd0, 0x15, 0x3c, 0xdc, 0x87, 0xf3, 0x6f, 0xa5, 0xaa, 0xd1, 0x99, - 0x91, 0x63, 0x37, 0xf2, 0x33, 0x72, 0x8c, 0xce, 0xc1, 0xd6, 0x02, 0x67, 0x25, 0xf1, 0x37, 0x34, - 0x66, 0x36, 0x5f, 0x6c, 0xdc, 0xf1, 0x82, 0x9f, 0x60, 0xdb, 0x45, 0x17, 0x05, 0xcb, 0x05, 0x41, - 0x4f, 0xa1, 0x65, 0x07, 0x41, 0x7b, 0xe8, 0x8e, 0x6f, 0xd4, 0x2d, 0xc3, 0x0e, 0xc8, 0xa1, 0xc4, - 0x92, 0x44, 0xce, 0x49, 0xd0, 0x87, 0xee, 0x0b, 0x4c, 0xa5, 0xad, 0x2e, 0xf8, 0x11, 0x7a, 0x66, - 0xfb, 0x1f, 0x85, 0x7b, 0x0c, 0x3b, 0x87, 0xd3, 0x52, 0xa6, 0xec, 0x75, 0xee, 0x24, 0xf0, 0x02, - 0x34, 0x05, 0x9d, 0xe4, 0x38, 0xb3, 0x47, 0x62, 0x77, 0xe8, 0x23, 0xe8, 0x4d, 0x38, 0x4e, 0x48, - 0x5c, 0x10, 0x4e, 0x59, 0xaa, 0x0f, 0xa7, 0x11, 0x75, 0x35, 0x76, 0xa0, 0xa1, 0x00, 0xc1, 0xe0, - 0xc4, 0x9b, 0xc9, 0x38, 0x98, 0xc2, 0x85, 0xef, 0x8b, 0x54, 0x05, 0xad, 0x94, 0xcf, 0x06, 0x5a, - 0x51, 0x51, 0xef, 0x5f, 0xab, 0x68, 0x70, 0x11, 0xfe, 0xff, 0x46, 0x24, 0x9b, 0xc4, 0x00, 0xb6, - 0x9f, 0x13, 0x2e, 0x28, 0x73, 0x55, 0x06, 0x9f, 0xc1, 0x4e, 0x85, 0xd8, 0xb3, 0xf5, 0xa1, 0xb5, - 0x30, 0x90, 0xad, 0xdc, 0x6d, 0x83, 0x4f, 0xa1, 0xa7, 0xce, 0xad, 0xca, 0x7c, 0x08, 0x6d, 0x9a, - 0x4b, 0xc2, 0x17, 0xf6, 0x90, 0x1a, 0x51, 0xb5, 0x0f, 0x5e, 0x40, 0xdf, 0x72, 0xad, 0xdb, 0x6f, - 0x60, 0x4b, 0x28, 0x60, 0xcd, 0x12, 0x9f, 0x61, 0x31, 0x33, 0x8e, 0x8c, 0x79, 0x70, 0x19, 0xfa, - 0x87, 0xba, 0x13, 0x6f, 0x6f, 0xd4, 0x96, 0x6b, 0x94, 0x2a, 0xd6, 0x11, 0x6d, 0xf9, 0x33, 0xe8, - 0x3e, 0x38, 0x22, 0x89, 0x33, 0xbc, 0x05, 0xed, 0x94, 0xe0, 0x34, 0xa3, 0x39, 0xb1, 0x49, 0x0d, - 0x43, 0xf3, 0x9c, 0x86, 0xee, 0x39, 0x0d, 0x9f, 0xb9, 0xe7, 0x34, 0xaa, 0xb8, 0xee, 0x71, 0xdc, - 0x78, 0xf3, 0x71, 0x6c, 0x9c, 0x3c, 0x8e, 0xc1, 0x3e, 0xf4, 0x4c, 0x30, 0x5b, 0xff, 0x05, 0x68, - 0xb2, 0x52, 0x16, 0xa5, 0xd4, 0xb1, 0x7a, 0x91, 0xdd, 0xa1, 0x0f, 0xa0, 0x43, 0x8e, 0xa8, 0x8c, - 0x13, 0x25, 0x62, 0x1b, 0xba, 0x82, 0xb6, 0x02, 0xf6, 0x59, 0x4a, 0x82, 0x3f, 0x3d, 0xe8, 0x2d, - 0xdf, 0x58, 0x15, 0xbb, 0xa0, 0xa9, 0xad, 0x54, 0x2d, 0xdf, 0x69, 0xbf, 0x74, 0x36, 0x8d, 0xe5, - 0xb3, 0x41, 0x21, 0x6c, 0xaa, 0x3f, 0x0a, 0xfa, 0x89, 0x7d, 0x77, 0xd9, 0x9a, 0xa7, 0x14, 0x92, - 0xb1, 0x79, 0x3c, 0xa3, 0x59, 0x46, 0x52, 0xfd, 0xee, 0xb6, 0xa3, 0x0e, 0x63, 0xf3, 0x47, 0x1a, - 0x18, 0xff, 0xde, 0x81, 0xf6, 0x03, 0x3b, 0x67, 0xe8, 0x18, 0x9a, 0x46, 0x1c, 0xd0, 0xcd, 0xf7, - 0x92, 0xb2, 0xe1, 0xad, 0x75, 0xcd, 0x6c, 0x7b, 0xcf, 0x20, 0x01, 0x9b, 0x4a, 0x26, 0xd0, 0xf5, - 0xba, 0x1e, 0x96, 0x34, 0x66, 0x78, 0x63, 0x3d, 0xa3, 0x2a, 0xe8, 0xaf, 0xd0, 0x76, 0xd3, 0x8e, - 0x6e, 0xd7, 0xf5, 0x71, 0x4a, 0x6d, 0x86, 0x77, 0xd6, 0x37, 0xac, 0x12, 0xf8, 0xcd, 0x83, 0x9d, - 0x53, 0x13, 0x8f, 0xbe, 0xaa, 0xeb, 0xef, 0xed, 0xa2, 0x34, 0xbc, 0xfb, 0xde, 0xf6, 0x55, 0x5a, - 0xbf, 0x40, 0xcb, 0x4a, 0x0b, 0xaa, 0xdd, 0xd1, 0x55, 0x75, 0x1a, 0xde, 0x5e, 0xdb, 0xae, 0x8a, - 0x7e, 0x04, 0x5b, 0x5a, 0x36, 0x50, 0xed, 0xb6, 0x2e, 0x4b, 0xdb, 0xf0, 0xe6, 0x9a, 0x56, 0x2e, - 0xee, 0x55, 0x4f, 0xdd, 0x7f, 0xa3, 0x3b, 0xf5, 0xef, 0xff, 0x8a, 0xa0, 0xd5, 0xbf, 0xff, 0xa7, - 0xe4, 0x4d, 0xdf, 0x7f, 0x35, 0x86, 0xf5, 0xef, 0xff, 0x92, 0x1c, 0xd6, 0xbf, 0xff, 0xcb, 0xb2, - 0x16, 0x9c, 0x41, 0x7f, 0x78, 0xd0, 0x57, 0xd0, 0xa1, 0xe4, 0x04, 0xcf, 0x69, 0x3e, 0x41, 0x77, - 0x6b, 0x6a, 0xbb, 0xb2, 0x32, 0xfa, 0x6e, 0x2d, 0x5d, 0x2a, 0x5f, 0xbf, 0xbf, 0x03, 0x97, 0xd6, - 0xc8, 0xbb, 0xea, 0xdd, 0x6b, 0xfd, 0xb0, 0x65, 0x24, 0xad, 0xa9, 0x7f, 0xae, 0xff, 0x1d, 0x00, - 0x00, 0xff, 0xff, 0x86, 0x06, 0x47, 0x8b, 0x85, 0x0d, 0x00, 0x00, + // 1187 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x7d, 0x6f, 0xdb, 0x44, + 0x1c, 0x9e, 0x9b, 0xa6, 0x49, 0x7e, 0x49, 0xda, 0xec, 0xd8, 0x8a, 0x17, 0x84, 0x56, 0x8c, 0xc4, + 0x22, 0x18, 0xee, 0xd6, 0xbd, 0x0a, 0x24, 0x06, 0xeb, 0x06, 0x9a, 0xf6, 0x42, 0xe5, 0x8e, 0x4d, + 0xe2, 0x0f, 0xcc, 0xcd, 0xbe, 0x25, 0xb7, 0x38, 0x3e, 0x73, 0x77, 0xce, 0x5a, 0x09, 0x89, 0x2f, + 0x01, 0x12, 0x1f, 0x80, 0x4f, 0xc4, 0x27, 0x42, 0xf7, 0xe6, 0x26, 0xdd, 0x98, 0xdc, 0x22, 0xfe, + 0xca, 0xdd, 0xe3, 0xe7, 0xf7, 0x7e, 0xf7, 0x5c, 0xe0, 0x72, 0xca, 0xe9, 0x9c, 0x70, 0xb1, 0x2d, + 0x26, 0x98, 0x93, 0x74, 0x9b, 0x1c, 0x90, 0xa4, 0x94, 0x8c, 0x6f, 0x17, 0x9c, 0x49, 0x56, 0x6d, + 0x43, 0xbd, 0x45, 0x9f, 0x4c, 0xb0, 0x98, 0xd0, 0x84, 0xf1, 0x22, 0xcc, 0xd9, 0x0c, 0xa7, 0x61, + 0x91, 0x95, 0x63, 0x9a, 0x8b, 0x70, 0x99, 0x37, 0xbc, 0x38, 0x66, 0x6c, 0x9c, 0x11, 0xe3, 0xe4, + 0x45, 0xf9, 0x72, 0x5b, 0xd2, 0x19, 0x11, 0x12, 0xcf, 0x0a, 0x4b, 0x08, 0xac, 0xe1, 0xb6, 0x0b, + 0x6f, 0xc2, 0x99, 0x9d, 0xe1, 0x04, 0x7f, 0xb7, 0xa1, 0xff, 0x08, 0x97, 0x79, 0x32, 0x89, 0xc8, + 0x2f, 0x25, 0x11, 0x12, 0x0d, 0xa0, 0x91, 0xcc, 0x52, 0xdf, 0xdb, 0xf2, 0x46, 0x9d, 0x48, 0x2d, + 0x11, 0x82, 0x55, 0xcc, 0xc7, 0xc2, 0x5f, 0xd9, 0x6a, 0x8c, 0x3a, 0x91, 0x5e, 0xa3, 0x27, 0xd0, + 0xe1, 0x44, 0xb0, 0x92, 0x27, 0x44, 0xf8, 0x8d, 0x2d, 0x6f, 0xd4, 0xdd, 0xb9, 0x12, 0xfe, 0x5b, + 0xe2, 0x36, 0xbe, 0x09, 0x19, 0x46, 0xce, 0x2e, 0x3a, 0x72, 0x81, 0x2e, 0x42, 0x57, 0xc8, 0x94, + 0x95, 0x32, 0x2e, 0xb0, 0x9c, 0xf8, 0xab, 0x3a, 0x3a, 0x18, 0x68, 0x0f, 0xcb, 0x89, 0x25, 0x10, + 0xce, 0x0d, 0xa1, 0x59, 0x11, 0x08, 0xe7, 0x9a, 0x30, 0x80, 0x06, 0xc9, 0xe7, 0xfe, 0x9a, 0x4e, + 0x52, 0x2d, 0x55, 0xde, 0xa5, 0x20, 0xdc, 0x6f, 0x69, 0xae, 0x5e, 0xa3, 0x0b, 0xd0, 0x96, 0x58, + 0x4c, 0xe3, 0x94, 0x72, 0xbf, 0xad, 0xf1, 0x96, 0xda, 0xdf, 0xa3, 0x1c, 0x5d, 0x82, 0x0d, 0x97, + 0x4f, 0x9c, 0xd1, 0x19, 0x95, 0xc2, 0xef, 0x6c, 0x79, 0xa3, 0x76, 0xb4, 0xee, 0xe0, 0x47, 0x1a, + 0x45, 0xd7, 0xe1, 0xdc, 0x0b, 0x2c, 0x68, 0x12, 0x17, 0x9c, 0x25, 0x44, 0x88, 0x38, 0x19, 0x73, + 0x56, 0x16, 0x3e, 0x28, 0xf6, 0xdd, 0x15, 0xdf, 0x8b, 0x90, 0xfe, 0xbe, 0x67, 0x3e, 0xef, 0xea, + 0xaf, 0xe8, 0x1e, 0xac, 0xcd, 0x58, 0x99, 0x4b, 0xe1, 0x77, 0xb7, 0x1a, 0xa3, 0xee, 0xce, 0xe5, + 0x9a, 0xed, 0x7a, 0xac, 0x8c, 0x22, 0x6b, 0x8b, 0xbe, 0x83, 0x56, 0x4a, 0xe6, 0x54, 0x75, 0xbd, + 0xa7, 0xdd, 0x7c, 0x5e, 0xd3, 0xcd, 0x3d, 0x6d, 0x15, 0x39, 0x6b, 0x34, 0x81, 0xb3, 0x39, 0x91, + 0xaf, 0x19, 0x9f, 0xc6, 0x54, 0xb0, 0x0c, 0x4b, 0xca, 0x72, 0xbf, 0xaf, 0x07, 0xf9, 0x65, 0x4d, + 0x97, 0x4f, 0x8c, 0xfd, 0x03, 0x67, 0xbe, 0x5f, 0x90, 0x24, 0x1a, 0xe4, 0xc7, 0x50, 0x14, 0x40, + 0x3f, 0x67, 0x71, 0x41, 0xe7, 0x4c, 0xc6, 0x9c, 0x31, 0xe9, 0xaf, 0xeb, 0xae, 0x76, 0x73, 0xb6, + 0xa7, 0xb0, 0x88, 0x31, 0x89, 0x46, 0x30, 0x48, 0xc9, 0x4b, 0x5c, 0x66, 0x32, 0x2e, 0x68, 0x1a, + 0xcf, 0x58, 0x4a, 0xfc, 0x0d, 0x3d, 0x9e, 0x75, 0x8b, 0xef, 0xd1, 0xf4, 0x31, 0x4b, 0xc9, 0x22, + 0x93, 0x16, 0x89, 0x61, 0x0e, 0x96, 0x98, 0x0f, 0x8a, 0x44, 0x33, 0x3f, 0x86, 0x7e, 0x52, 0x94, + 0x82, 0x48, 0x37, 0x9f, 0xb3, 0x9a, 0xd6, 0x33, 0xa0, 0x9d, 0xca, 0x87, 0x00, 0x38, 0xcb, 0xd8, + 0xeb, 0x38, 0xc1, 0x85, 0xf0, 0x91, 0x3e, 0x3c, 0x1d, 0x8d, 0xec, 0xe2, 0x42, 0xa0, 0x00, 0x7a, + 0x09, 0x2e, 0xf0, 0x0b, 0x9a, 0x51, 0x49, 0x89, 0xf0, 0xdf, 0xd3, 0x84, 0x25, 0x0c, 0x5d, 0x06, + 0x64, 0x02, 0xc4, 0xf3, 0x9d, 0x98, 0xcd, 0x09, 0xe7, 0x34, 0x25, 0xfe, 0x39, 0x1d, 0x6c, 0x60, + 0xbe, 0x3c, 0xdb, 0xf9, 0xde, 0xe2, 0xe8, 0xf0, 0x88, 0x7d, 0xf5, 0x88, 0x7d, 0x5e, 0xcf, 0xf2, + 0x61, 0x58, 0xef, 0xea, 0x87, 0x4b, 0x37, 0x36, 0x34, 0xa5, 0x3c, 0xbb, 0xea, 0x62, 0xdc, 0xcf, + 0x25, 0x3f, 0xac, 0x42, 0x57, 0xb0, 0x1a, 0x04, 0x63, 0xb3, 0x58, 0x24, 0x8c, 0x93, 0x18, 0xa7, + 0xaf, 0xfc, 0xcd, 0x2d, 0x6f, 0xd4, 0x8c, 0xba, 0x8c, 0xcd, 0xf6, 0x15, 0xf6, 0x4d, 0xfa, 0x6a, + 0xb8, 0x0b, 0xe7, 0xdf, 0xea, 0x4e, 0x5d, 0xaf, 0x29, 0x39, 0x74, 0xb2, 0x30, 0x25, 0x87, 0xe8, + 0x1c, 0x34, 0xe7, 0x38, 0x2b, 0x89, 0xbf, 0xa2, 0x31, 0xb3, 0xf9, 0x62, 0xe5, 0xb6, 0x17, 0xfc, + 0x0c, 0xeb, 0x2e, 0x43, 0x51, 0xb0, 0x5c, 0x10, 0xf4, 0x04, 0x5a, 0xf6, 0xb2, 0x68, 0x0f, 0xdd, + 0x9d, 0xeb, 0x75, 0x4b, 0xb5, 0x97, 0x68, 0x5f, 0x62, 0x49, 0x22, 0xe7, 0x24, 0xe8, 0x43, 0xf7, + 0x39, 0xa6, 0xd2, 0x76, 0x20, 0xf8, 0x09, 0x7a, 0x66, 0xfb, 0x3f, 0x85, 0x7b, 0x04, 0x1b, 0xfb, + 0x93, 0x52, 0xa6, 0xec, 0x75, 0xee, 0x64, 0x72, 0x13, 0xd6, 0x04, 0x1d, 0xe7, 0x38, 0xb3, 0x2d, + 0xb1, 0x3b, 0xf4, 0x11, 0xf4, 0xc6, 0x1c, 0x27, 0x24, 0x2e, 0x08, 0xa7, 0x2c, 0xd5, 0xcd, 0x69, + 0x44, 0x5d, 0x8d, 0xed, 0x69, 0x28, 0x40, 0x30, 0x38, 0xf2, 0x66, 0x32, 0x0e, 0x26, 0xb0, 0xf9, + 0x43, 0x91, 0xaa, 0xa0, 0x95, 0x3a, 0xda, 0x40, 0x4b, 0x4a, 0xeb, 0xfd, 0x67, 0xa5, 0x0d, 0x2e, + 0xc0, 0xfb, 0x6f, 0x44, 0xb2, 0x49, 0x0c, 0x60, 0xfd, 0x19, 0xe1, 0x82, 0x32, 0x57, 0x65, 0xf0, + 0x19, 0x6c, 0x54, 0x88, 0xed, 0xad, 0x0f, 0xad, 0xb9, 0x81, 0x6c, 0xe5, 0x6e, 0x1b, 0x7c, 0x0a, + 0x3d, 0xd5, 0xb7, 0x2a, 0xf3, 0x21, 0xb4, 0x69, 0x2e, 0x09, 0x9f, 0xdb, 0x26, 0x35, 0xa2, 0x6a, + 0x1f, 0x3c, 0x87, 0xbe, 0xe5, 0x5a, 0xb7, 0xdf, 0x42, 0x53, 0x28, 0xe0, 0x84, 0x25, 0x3e, 0xc5, + 0x62, 0x6a, 0x1c, 0x19, 0xf3, 0xe0, 0x12, 0xf4, 0xf7, 0xf5, 0x24, 0xde, 0x3e, 0xa8, 0xa6, 0x1b, + 0x94, 0x2a, 0xd6, 0x11, 0x6d, 0xf9, 0x53, 0xe8, 0xde, 0x3f, 0x20, 0x89, 0x33, 0xbc, 0x09, 0xed, + 0x94, 0xe0, 0x34, 0xa3, 0x39, 0xb1, 0x49, 0x0d, 0x43, 0xf3, 0xe4, 0x86, 0xee, 0xc9, 0x0d, 0x9f, + 0xba, 0x27, 0x37, 0xaa, 0xb8, 0xee, 0x01, 0x5d, 0x79, 0xf3, 0x01, 0x6d, 0x1c, 0x3d, 0xa0, 0xc1, + 0x2e, 0xf4, 0x4c, 0x30, 0x5b, 0xff, 0x26, 0xac, 0xb1, 0x52, 0x16, 0xa5, 0xd4, 0xb1, 0x7a, 0x91, + 0xdd, 0xa1, 0x0f, 0xa0, 0x43, 0x0e, 0xa8, 0x8c, 0x13, 0x25, 0x74, 0x2b, 0xba, 0x82, 0xb6, 0x02, + 0x76, 0x59, 0x4a, 0x82, 0xbf, 0x3c, 0xe8, 0x2d, 0x9e, 0x58, 0x15, 0xbb, 0xa0, 0xa9, 0xad, 0x54, + 0x2d, 0xdf, 0x69, 0xbf, 0xd0, 0x9b, 0xc6, 0x62, 0x6f, 0x50, 0x08, 0xab, 0xea, 0xcf, 0x84, 0x7e, + 0x86, 0xdf, 0x5d, 0xb6, 0xe6, 0x29, 0x15, 0x55, 0xca, 0x32, 0xa5, 0x59, 0x46, 0x52, 0xfd, 0x36, + 0xb7, 0xa3, 0x0e, 0x63, 0xb3, 0x87, 0x1a, 0xd8, 0xf9, 0xa3, 0x03, 0xed, 0xfb, 0xf6, 0x9e, 0xa1, + 0x43, 0x58, 0x33, 0xe2, 0x80, 0x6e, 0x9c, 0x4a, 0xee, 0x86, 0x37, 0x4f, 0x6a, 0x66, 0xc7, 0x7b, + 0x06, 0x09, 0x58, 0x55, 0x32, 0x81, 0xae, 0xd5, 0xf5, 0xb0, 0xa0, 0x31, 0xc3, 0xeb, 0x27, 0x33, + 0xaa, 0x82, 0xfe, 0x06, 0x6d, 0x77, 0xdb, 0xd1, 0xad, 0xba, 0x3e, 0x8e, 0xa9, 0xcd, 0xf0, 0xf6, + 0xc9, 0x0d, 0xab, 0x04, 0x7e, 0xf7, 0x60, 0xe3, 0xd8, 0x8d, 0x47, 0x5f, 0xd5, 0xf5, 0xf7, 0x76, + 0x51, 0x1a, 0xde, 0x39, 0xb5, 0x7d, 0x95, 0xd6, 0xaf, 0xd0, 0xb2, 0xd2, 0x82, 0x6a, 0x4f, 0x74, + 0x59, 0x9d, 0x86, 0xb7, 0x4e, 0x6c, 0x57, 0x45, 0x3f, 0x80, 0xa6, 0x96, 0x0d, 0x54, 0x7b, 0xac, + 0x8b, 0xd2, 0x36, 0xbc, 0x71, 0x42, 0x2b, 0x17, 0xf7, 0x8a, 0xa7, 0xce, 0xbf, 0xd1, 0x9d, 0xfa, + 0xe7, 0x7f, 0x49, 0xd0, 0xea, 0x9f, 0xff, 0x63, 0xf2, 0xa6, 0xcf, 0xbf, 0xba, 0x86, 0xf5, 0xcf, + 0xff, 0x82, 0x1c, 0xd6, 0x3f, 0xff, 0x8b, 0xb2, 0x16, 0x9c, 0x41, 0x7f, 0x7a, 0xd0, 0x57, 0xd0, + 0xbe, 0xe4, 0x04, 0xcf, 0x68, 0x3e, 0x46, 0x77, 0x6a, 0x6a, 0xbb, 0xb2, 0x32, 0xfa, 0x6e, 0x2d, + 0x5d, 0x2a, 0x5f, 0x9f, 0xde, 0x81, 0x4b, 0x6b, 0xe4, 0x5d, 0xf1, 0xee, 0xb6, 0x7e, 0x6c, 0x1a, + 0x49, 0x5b, 0xd3, 0x3f, 0xd7, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x85, 0x8d, 0xe6, 0xa9, + 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/drivers/shared/executor/proto/executor.proto b/drivers/shared/executor/proto/executor.proto index b1e948608..55863968f 100644 --- a/drivers/shared/executor/proto/executor.proto +++ b/drivers/shared/executor/proto/executor.proto @@ -52,6 +52,7 @@ message LaunchRequest { repeated string capabilities = 19; string cgroup_v2_override = 20; map cgroup_v1_override = 21; + int32 oom_score_adj = 22; } message LaunchResponse { diff --git a/plugins/drivers/driver.go b/plugins/drivers/driver.go index c41289209..15a00d549 100644 --- a/plugins/drivers/driver.go +++ b/plugins/drivers/driver.go @@ -408,7 +408,12 @@ type LinuxResources struct { CPUQuota int64 CPUShares int64 MemoryLimitBytes int64 - OOMScoreAdj int64 + + // OOMScoreAdj field in LinuxResources is never used and left for + // compatibility reasons. Docker, raw_exec and exec2 drivers allow tasks to + // set per-task oom_score_adj values using their own TaskConfig OOMScoreAdj + // fields + OOMScoreAdj int64 CpusetCpus string CpusetCgroupPath string diff --git a/website/content/docs/drivers/raw_exec.mdx b/website/content/docs/drivers/raw_exec.mdx index f625da2aa..b69807186 100644 --- a/website/content/docs/drivers/raw_exec.mdx +++ b/website/content/docs/drivers/raw_exec.mdx @@ -50,6 +50,9 @@ The `raw_exec` driver supports the following configuration in the job spec: ~> The `task.user` field cannot be set on a Task using the `raw_exec` driver if the Nomad client has been hardened according to the [production][hardening] guide. +- `oom_score_adj` - (Optional) A positive integer to indicate the likelihood of + the task being OOM killed (valid only for Linux). Defaults to 0. + ## Examples To run a binary present on the Node: @@ -152,7 +155,7 @@ manage the process tree. Cgroups are used on Linux when Nomad is being run with appropriate privileges, and the cgroup system is mounted. If the cluster is configured with memory oversubscription enabled, a task using -the `raw_exec` driver can be configured to have no maximum memory limit by +the `raw_exec` driver can be configured to have no maximum memory limit by setting `memory_max = -1`. ```hcl