<div dir="ltr"><div>I have just used a simple PAM script to apply cgroup rules to every user who logs into a CentOS7 login node<br>Something like this:</div><div><br></div><div>#!/bin/sh -e<br><br>PAM_UID=$(getent passwd "${PAM_USER}" | cut -d: -f3)<br><br>if [ "${PAM_UID}" -ge 1000 ]; then<br>    /bin/systemctl set-property "user-${PAM_UID}.slice" \<br>                   CPUQuota=100% MemoryLimit=2G<br>fi<br></div><div><br></div><div>This is not as sophisticated or does not change parameters depending on dynamic load, But it does set static limits for every user as per cgroups.</div><div><br></div><div>However, the above does not cover every scenario, and does not restrict the number of threads, network load, network file system load ( NFS/GPFS/Lustre). or paging etc.</div><div>I have actually seen cases where cgroups were causing more stress trying to limit resources such as memory for users, who happen to run hundreds of threads and still be able to stay within the memory/cpu limit. It so happens that Cgroup does not kill every application that goes beyond limits, as long as the application tries to stay within its limits. </div><div>I tried limiting the number of threads with cgroups, and it caused issues where it kills ssh connections when threads go beyond a limit.<br>Also, I recently realized about how Java does not recognize cgroups for its garbage collection, and instead assumes that all of physical memory is available.</div><div><br></div><div>I do not know if Arbiter somehow resolved the above issues, and behaves much better than simple cgroup limits, or if Redhat 8 happens to be better.</div><div><br></div><div>I do want to mention that for an ideal solution - i go with Chris Dagdigian response, that it is best to educate users and follow up respectively.  </div><div><br></div><div>At the same time, I do wish there was a good solution. I also thought about cases, where i could write an ssh wrapper with bsub/qsub interactive job command that will allow users to use compute nodes as interactive nodes for a while, to compile/edit or submit there scripts but this would only be easy if all the compute nodes can be directly reachable over network, and not be restricted on a private network. </div><div><br></div><div>Thank you,</div><div>Lohit</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 26, 2021 at 10:27 AM Prentice Bisbal via Beowulf <<a href="mailto:beowulf@beowulf.org">beowulf@beowulf.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Yes, there's a tool developed specifically for this called Arbiter that <br>
uses Linux cgroups to dynamically limit resources on a login node based <br>
on it's current load. It was developed at the University of Utah:<br>
<br>
<a href="https://dylngg.github.io/resources/arbiterTechPaper.pdf" rel="noreferrer" target="_blank">https://dylngg.github.io/resources/arbiterTechPaper.pdf</a><br>
<br>
<a href="https://gitlab.chpc.utah.edu/arbiter2/arbiter2" rel="noreferrer" target="_blank">https://gitlab.chpc.utah.edu/arbiter2/arbiter2</a><br>
<br>
Prentice<br>
<br>
On 3/26/21 9:56 AM, Michael Di Domenico wrote:<br>
> does anyone have a recipe for limiting the damage people can do on<br>
> login nodes on rhel7.  i want to limit the allocatable cpu/mem per<br>
> user to some low value.  that way if someone kicks off a program but<br>
> forgets to 'srun' it first, they get bound to a single core and don't<br>
> bump anyone else.<br>
><br>
> i've been poking around the net, but i can't find a solution, i don't<br>
> understand what's being recommended, and/or i'm implementing the<br>
> suggestions wrong.  i haven't been able to get them working.  the most<br>
> succinct answer i found is that per user cgroup controls have been<br>
> implemented in systemd v239/240, but since rhel7 is still on v219<br>
> that's not going to help.  i also found some wonkiness that runs a<br>
> program after a user logs in and hacks at the cgroup files directly,<br>
> but i couldn't get that to work.<br>
><br>
> supposedly you can override the user-{UID}.slice unit file and jam in<br>
> the cgroup restrictions, but I have hundreds of users clearly that's<br>
> not maintainable<br>
><br>
> i'm sure others have already been down this road.  any suggestions?<br>
> _______________________________________________<br>
> Beowulf mailing list, <a href="mailto:Beowulf@beowulf.org" target="_blank">Beowulf@beowulf.org</a> sponsored by Penguin Computing<br>
> To change your subscription (digest mode or unsubscribe) visit <a href="https://beowulf.org/cgi-bin/mailman/listinfo/beowulf" rel="noreferrer" target="_blank">https://beowulf.org/cgi-bin/mailman/listinfo/beowulf</a><br>
_______________________________________________<br>
Beowulf mailing list, <a href="mailto:Beowulf@beowulf.org" target="_blank">Beowulf@beowulf.org</a> sponsored by Penguin Computing<br>
To change your subscription (digest mode or unsubscribe) visit <a href="https://beowulf.org/cgi-bin/mailman/listinfo/beowulf" rel="noreferrer" target="_blank">https://beowulf.org/cgi-bin/mailman/listinfo/beowulf</a><br>
</blockquote></div>