17857: Fix bsub args so containers can use multiple CPU cores.
authorTom Clegg <tom@curii.com>
Thu, 9 Sep 2021 13:24:59 +0000 (09:24 -0400)
committerTom Clegg <tom@curii.com>
Thu, 9 Sep 2021 13:24:59 +0000 (09:24 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/lsf/dispatch.go
lib/lsf/dispatch_test.go

index 7461597c45c8e48cee3d105877dc1d16abd7cf0c..d3ba605abac12ae3f24a28ce9bdfe056c8744c7c 100644 (file)
@@ -288,7 +288,9 @@ func (disp *dispatcher) bsubConstraintArgs(container arvados.Container) []string
                container.RuntimeConstraints.KeepCacheRAM+
                int64(disp.Cluster.Containers.ReserveExtraRAM)) / 1048576))
        return []string{
-               "-R", fmt.Sprintf("rusage[mem=%dMB:tmp=%dMB] affinity[core(%d)]", mem, tmp, vcpus),
+               "-n", fmt.Sprintf("%d", vcpus),
+               "-D", fmt.Sprintf("%dMB", mem), // ulimit -d (note this doesn't limit the total container memory usage)
+               "-R", fmt.Sprintf("rusage[mem=%dMB:tmp=%dMB] span[hosts=1]", mem, tmp),
        }
 }
 
index 96151fa8da9bc546c39a59479d06065da188cef0..44a1a3d8cb316bece57378f358b43b922df4963d 100644 (file)
@@ -72,20 +72,28 @@ func (stub lsfstub) stubCommand(s *suite, c *check.C) func(prog string, args ...
                switch prog {
                case "bsub":
                        defaultArgs := s.disp.Cluster.Containers.LSF.BsubArgumentsList
-                       c.Assert(args, check.HasLen, 4+len(defaultArgs))
+                       c.Assert(len(args) > len(defaultArgs), check.Equals, true)
                        c.Check(args[:len(defaultArgs)], check.DeepEquals, defaultArgs)
                        args = args[len(defaultArgs):]
 
                        c.Check(args[0], check.Equals, "-J")
                        switch args[1] {
                        case arvadostest.LockedContainerUUID:
-                               c.Check(args, check.DeepEquals, []string{"-J", arvadostest.LockedContainerUUID, "-R", "rusage[mem=11701MB:tmp=0MB] affinity[core(4)]"})
+                               c.Check(args, check.DeepEquals, []string{
+                                       "-J", arvadostest.LockedContainerUUID,
+                                       "-n", "4",
+                                       "-D", "11701MB",
+                                       "-R", "rusage[mem=11701MB:tmp=0MB] span[hosts=1]"})
                                mtx.Lock()
                                fakejobq[nextjobid] = args[1]
                                nextjobid++
                                mtx.Unlock()
                        case arvadostest.QueuedContainerUUID:
-                               c.Check(args, check.DeepEquals, []string{"-J", arvadostest.QueuedContainerUUID, "-R", "rusage[mem=11701MB:tmp=45777MB] affinity[core(4)]"})
+                               c.Check(args, check.DeepEquals, []string{
+                                       "-J", arvadostest.QueuedContainerUUID,
+                                       "-n", "4",
+                                       "-D", "11701MB",
+                                       "-R", "rusage[mem=11701MB:tmp=45777MB] span[hosts=1]"})
                                mtx.Lock()
                                fakejobq[nextjobid] = args[1]
                                nextjobid++