X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f1adedeba07502273d39084d4ff3645b30067579..48c0b2f90d232d1508f1a6c8214c1b8e33c78795:/services/crunch-dispatch-slurm/crunch-dispatch-slurm.go diff --git a/services/crunch-dispatch-slurm/crunch-dispatch-slurm.go b/services/crunch-dispatch-slurm/crunch-dispatch-slurm.go index 07653b1de1..8c3f5c99fc 100644 --- a/services/crunch-dispatch-slurm/crunch-dispatch-slurm.go +++ b/services/crunch-dispatch-slurm/crunch-dispatch-slurm.go @@ -6,6 +6,7 @@ import ( "git.curoverse.com/arvados.git/sdk/go/arvadosclient" "io/ioutil" "log" + "math" "os" "os/exec" "os/signal" @@ -107,10 +108,10 @@ func runQueuedContainers(pollInterval, priorityPollInterval int, crunchRunComman // Container data type Container struct { - UUID string `json:"uuid"` - State string `json:"state"` - Priority int `json:"priority"` - RuntimeConstraints map[string]int `json:"runtime_constraints"` + UUID string `json:"uuid"` + State string `json:"state"` + Priority int `json:"priority"` + RuntimeConstraints map[string]int64 `json:"runtime_constraints"` } // ContainerList is a list of the containers from api @@ -140,10 +141,11 @@ func dispatchSlurm(priorityPollInterval int, crunchRunCommand, finishCommand str // sbatchCmd func sbatchFunc(container Container) *exec.Cmd { + memPerCPU := math.Ceil(float64(container.RuntimeConstraints["ram"]) / float64(container.RuntimeConstraints["vcpus"]*1048576)) return exec.Command("sbatch", "--share", "--parsable", "--job-name="+container.UUID, - "--mem="+strconv.Itoa(container.RuntimeConstraints["ram"]), - "--cpus-per-task="+strconv.Itoa(container.RuntimeConstraints["vcpus"])) + "--mem-per-cpu="+strconv.Itoa(int(memPerCPU)), + "--cpus-per-task="+strconv.Itoa(int(container.RuntimeConstraints["vcpus"]))) } var sbatchCmd = sbatchFunc