I want to be able to set up memory requirements per job.
For instance:
to run 5 jobs, for which I know each will need 4 GB memory. I have 16 GB RAM on the Ubuntu server and 16 GB swap. I want to avoid using the swap. Can I do something like:
qsub -l mem_required_for_my_job=4G job1
qsub -l mem_required_for_my_job=4G job2
qsub -l mem_required_for_my_job=4G job3
qsub -l mem_required_for_my_job=4G job4
qsub -l mem_required_for_my_job=4G job5
? The jobs will require 4 GB at some moment, but not in the beginning.
How to tell SGE what my requirements are? How to avoid scheduling 5 x 4 GB when only 16 GB available?
I read the user guide and tried s_vmem, h_vmem, mem_free, mem_used
. None of them is what I want. I do not want my jobs to get killed in the middle of the processing. I want them not to be scheduled, unless the maximum resources needed are available.
Can I do this?
Thank you all!
Best Answer
On our cluster we use
h_vmem
to enforce job memory allocation.The thing you appear to be missing is setting the available amount as a consumable resource. In
qconf -mc
or in theqmon
complexes dialog you need to set the resource as requestable and consumable.Then, on each host with
qconf -me
you need to set the amount of available memory incomplex_values
.For example we have host definitions that look like: