Levin,<div><br></div><div>Would you mind explaining why I would want to do this?  We are starting to use cgroups at the OS level to make sure that all user processes (sum) cannot blow out physical memory (as the nodes are diskless and have no swap).  Does your patches just make sure that cgroups are used to restrict memory usage from processes launched from the pbs_mom?  </div>
<div><br></div><div>What if the process launched ssh, which ran a process?  Would the process still be constrained under cgroups?</div><div><br></div><div>Thanks,</div><div>Craig</div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, Nov 20, 2012 at 2:02 AM, levin li <span dir="ltr">&lt;<a href="mailto:levin108@gmail.com" target="_blank">levin108@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
We&#39;re using torque for a while, but it doesn&#39;t have memory isolation at present,<br>
since cgroup is now widely used for resource isolation, I wrote this pathset for<br>
torque to isolate cpuset and memory between jobs, we can use cgroup to replace<br>
libcpuset, which is more complicated to use than cgroup.<br>
<br>
With this patchset, we can use qmgr to enable/disable cgroup:<br>
<br>
Enable:<br>
<br>
qmgr -c &quot;set server cgroup_enable = True&quot;<br>
<br>
Disable:<br>
<br>
qmgr -c &quot;set server cgroup_enable = False&quot;<br>
<br>
Before we want to use cgroup in torque, we should mount cgroup first:<br>
<br>
mkdir /dev/torque<br>
mount -t cgroup -o cpuset,memory torque /dev/torque<br>
<br>
I wrote a MPI program to test this function, the job script:<br>
<br>
-------------------------------------<br>
#!/bin/bash<br>
<br>
#PBS -l nodes=11:ppn=1,pmem=60<br>
<br>
mpirun --hostfile $PBS_NODEFILE ./mpi<br>
------------------------------------<br>
<br>
Then we submit two jobs like this, and in every MPI process, we malloc 100M memory<br>
and in order to make it filled by physical memory, we write 100M data to this<br>
memory chunk, let&#39;s see the test result:<br>
<br>
Before cgroup is enabled:<br>
<br>
[root@vkvm050]# ps -e -o args,psr,rss<br>
orted -mca ess env -mca ort   0  2292<br>
./mpi                         1 106504<br>
orted -mca ess env -mca ort   0  2292<br>
./mpi                         0 106500<br>
<br>
After cgroup is enabled:<br>
<br>
[root@vkvm050]# ps -e -o args,psr,rss<br>
orted -mca ess env -mca ort   1  1860<br>
./mpi                         1 46448<br>
orted -mca ess env -mca ort   0  1860<br>
./mpi                         0 59856<br>
<br>
<br>
Thanks,<br>
<br>
levin<br>
<br>
levin li (3):<br>
  pbs_server: add cgroup_enable to server attribute<br>
  resmom: add mom_cgroup.[c|h] to repo<br>
  resmom: create cgroup for jobs to limit cpu and mem usage<br>
<br>
 src/include/pbs_ifl.h         |    2 +<br>
 src/include/pbs_job.h         |    1 +<br>
 src/include/qmgr_svr_public.h |    1 +<br>
 src/include/server.h          |    1 +<br>
 src/resmom/Makefile.am        |    4 +-<br>
 src/resmom/Makefile.in        |    9 +-<br>
 src/resmom/catch_child.c      |    4 +<br>
 src/resmom/mom_cgroup.c       |  445 +++++++++++++++++++++++++++++++++++++++++<br>
 src/resmom/mom_cgroup.h       |   14 ++<br>
 src/resmom/mom_comm.c         |   10 +-<br>
 src/resmom/mom_main.c         |   21 ++-<br>
 src/resmom/start_exec.c       |   19 ++-<br>
 src/server/job_attr_def.c     |   13 ++<br>
 src/server/req_quejob.c       |    7 +<br>
 src/server/svr_attr_def.c     |   13 ++<br>
 15 files changed, 554 insertions(+), 10 deletions(-)<br>
 create mode 100644 src/resmom/mom_cgroup.c<br>
 create mode 100644 src/resmom/mom_cgroup.h<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
1.7.6.1<br>
<br>
_______________________________________________<br>
torqueusers mailing list<br>
<a href="mailto:torqueusers@supercluster.org">torqueusers@supercluster.org</a><br>
<a href="http://www.supercluster.org/mailman/listinfo/torqueusers" target="_blank">http://www.supercluster.org/mailman/listinfo/torqueusers</a><br>
</font></span></blockquote></div><br></div>