Re: [slurm-users] spart: A user-oriented partition info command for slurm

2019-05-03 Thread Kilian Cavalotti
Hi Ahmet,

Very useful tool for us, we've adopted it!
https://news.sherlock.stanford.edu/posts/a-better-view-at-sherlock-s-resources

Thank you very much for writing it.

Cheers,
-- 
Kilian

On Wed, Mar 27, 2019, 02:53 mercan  wrote:

> Hi;
>
> Except sjstat script, Slurm does not contains a command to show
> user-oriented partition info. I wrote a command. I hope you will find it
> useful.
>
> https://github.com/mercanca/spart
>
> Regards,
>
> Ahmet M.
>
>
>
>


Re: [slurm-users] Gentle memory limits in Slurm using cgroup?

2019-05-03 Thread Alexander Åhman

Thanks for the info!
Didn't know Slurm supported to set a soft limit. Did have a look in the 
code and found function "memcg_initialize" in file 
"plugins/task/cgroup/task_cgroup_memory.c".


It looks like in order to set both hard and soft limits you need to do:

ConstrainRAMSpace=yes
AllowedRAMSpace=200

This should allow jobs to use 200% the requested memory. So if a job 
request --mem=10G then it will be able to use 10G RAM but will not be 
killed unless it uses 20G (if there are free RAM available), but it will 
also consume all swap first.


After some testing, this works just fine if I have ConstrainSwapSpace=no 
but if I change that to yes I get strange behaviours. At least the 
output from sacct is not what I expect it to be. I'm running the exact 
same test program (just trying to get as much memory as possible) but in 
the second run I have ConstrainSwapSpace=yes. Why is it not recording 
the correct(?) amount of memory used?


ConstrainRAMSpace=yes
AllowedRAMSpace=150

    JobID  State ExitCode MaxRSS 
MaxVMSize    AllocTRES
- --  -- -- 


   911124 OUT_OF_ME+    0:125 billing=1,cpu=1,mem=2G,node=1
911124.extern  COMPLETED  0:0  1104K    171896K 
billing=1,cpu=1,mem=2G,node=1
 911124.0 OUT_OF_ME+    0:125   3141964K 14340268K  
cpu=1,mem=2G,node=1



ConstrainRAMSpace=yes
AllowedRAMSpace=150
ConstrainSwapSpace=yes
AllowedSwapSpace=200

    JobID  State ExitCode MaxRSS 
MaxVMSize    AllocTRES
- --  -- -- 


   911081 OUT_OF_ME+    0:125 billing=1,cpu=1,mem=2G,node=1
911081.extern  COMPLETED  0:0  1096K    171896K 
billing=1,cpu=1,mem=2G,node=1
 911081.0 OUT_OF_ME+    0:125  1216K    240648K  
cpu=1,mem=2G,node=1



Memory is complicated stuff...

Regards,
Alexander


On 03/05/2019 08:20, Janne Blomqvist wrote:

On 02/05/2019 17.53, Alexander Åhman wrote:

Hi,
Is it possible to configure slurm/cgroups in such way that jobs that are
using more memory than they asked for are not killed if there still are
free memory available on the compute node? When free memory gets low
these jobs can be killed as usual.

Today when a job has exceeded its limits it is killed immediately. Since
the applications only requires maximum memory for a short period of time
we can often not run as many concurrent jobs as we want.

Maybe I can rephrase the question a bit: How can you configure memory
limits for a job when the job only needs maximum memory during a short
time? Example: Job1 needs 80G RAM but only during 15% of the execution
time, during the remaining 85% it only needs 30G.

I guess the obvious thing is to use "CR_Core" instead of
"CR_Core_Memory" we use today. But we have to constrain memory in some
way because the nodes are also running daemons for the distributed file
system and that must not be affected by running jobs.

Any ideas?

Regards,
Alexander



It's possible by setting the cgroup soft and hard limits appropriately.
See https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt for
details.

Unfortunately the way the slurm cgroup.conf configuration maps to the
actual cgroups is not exactly intuitive (one can hope that when
eventually slurm starts to support cgroupsv2 this would be fixed...).

For example, if you want to set the cgroup soft limit to the amount of
memory that the job requests with --mem= or --mem-per-core= options, and
then set the hard limit (when the job will be killed) to 5x the soft limit:

ConstrainRAMSpace=no
ConstrainSwapSpace=yes
AllowedSwapSpace=400

(Note that it's not possible to separately set the maximum swap usage.
If you instead limit only the memory and not mem+swap, it will limit
memory but swap usage will be unlimited.)

As for you second part of the question, no, it's not possible to have
varying limits during a job.






Re: [slurm-users] Gentle memory limits in Slurm using cgroup?

2019-05-03 Thread Janne Blomqvist
On 02/05/2019 17.53, Alexander Åhman wrote:
> Hi,
> Is it possible to configure slurm/cgroups in such way that jobs that are
> using more memory than they asked for are not killed if there still are
> free memory available on the compute node? When free memory gets low
> these jobs can be killed as usual.
> 
> Today when a job has exceeded its limits it is killed immediately. Since
> the applications only requires maximum memory for a short period of time
> we can often not run as many concurrent jobs as we want.
> 
> Maybe I can rephrase the question a bit: How can you configure memory
> limits for a job when the job only needs maximum memory during a short
> time? Example: Job1 needs 80G RAM but only during 15% of the execution
> time, during the remaining 85% it only needs 30G.
> 
> I guess the obvious thing is to use "CR_Core" instead of
> "CR_Core_Memory" we use today. But we have to constrain memory in some
> way because the nodes are also running daemons for the distributed file
> system and that must not be affected by running jobs.
> 
> Any ideas?
> 
> Regards,
> Alexander
> 
> 

It's possible by setting the cgroup soft and hard limits appropriately.
See https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt for
details.

Unfortunately the way the slurm cgroup.conf configuration maps to the
actual cgroups is not exactly intuitive (one can hope that when
eventually slurm starts to support cgroupsv2 this would be fixed...).

For example, if you want to set the cgroup soft limit to the amount of
memory that the job requests with --mem= or --mem-per-core= options, and
then set the hard limit (when the job will be killed) to 5x the soft limit:

ConstrainRAMSpace=no
ConstrainSwapSpace=yes
AllowedSwapSpace=400

(Note that it's not possible to separately set the maximum swap usage.
If you instead limit only the memory and not mem+swap, it will limit
memory but swap usage will be unlimited.)

As for you second part of the question, no, it's not possible to have
varying limits during a job.

-- 
Janne Blomqvist, D.Sc. (Tech.), Scientific Computing Specialist
Aalto University School of Science, PHYS & NBE
+358503841576 || janne.blomqv...@aalto.fi