HPC集群是一个多用户的操作环境。通常情况下,所有用户通过登录节点向调度器申请资源并运行作业。
但由于登录节点本身不处在调度器控制之下,当出现一些不规范的操作,例如长时间使用多核编译、在登陆节点运行MPI程序等,会导致占用大量的CPU、带宽和内存资源,进而影响其他用户正常使用HPC集群。
本文通过介绍一些Linux系统本身的特性,帮助HPC集群管理员了解如何在登录节点通过配置来限制用户可使用的资源。
假设需要限制每个登录用户只能使用100%的CPU资源 (如节点总核数为20,则总CPU资源为2000%)
/usr/lib/systemd/system/user-.slice.d
下添加配置文件11-limit-cpu.conf
[Slice]
CPUQuota=100%
xxxxxxxxxx
systemd daemon-reload
11-limit-cpu.conf
是否已经载入xxxxxxxxxx
systemdl status user-0.slice
xxxxxxxxxx
● user-0.slice - User Slice of UID 0
Loaded: loaded
Drop-In: /usr/lib/systemd/system/user-.slice.d
└─10-defaults.conf, 11-limit-cpu.conf
Active: active since Thu 2023-03-16 15:09:49 CST; 49min ago
Tasks: 17 (limit: 23634)
Memory: 156.7M
CGroup: /user.slice/user-0.slice
├─session-1.scope
│ ├─1310 sshd: root [priv]
│ ├─1580 sshd: root@pts/0,pts/1,pts/5,pts/4
│ ├─1581 -bash
│ ├─2149 -bash
│ ├─2458 ssh hpcadmin@localhost
│ ├─2877 -bash
│ ├─3012 man systemd.resource-control
│ ├─3024 less
│ ├─3175 -bash
│ ├─3304 su - hpcadmin
│ ├─3305 -bash
│ ├─3466 man systemd.resource-control
│ ├─3478 less
│ ├─3723 systemctl status user-0.slice
│ └─3724 less
└─user@0.service
└─init.scope
├─1564 /usr/lib/systemd/systemd --user
└─1570 (sd-pam)
可以看到系统已经加载了11-limit-cpu.conf
假设
hpcadmin
的uid
为1000,需要限制hpcadmin
只能使用400%的CPU
资源
/usr/lib/systemd/system/user-1000.slice.d
下添加配置文件limit-cpu.conf
xxxxxxxxxx
[Slice]
CPUQuota=400%
xxxxxxxxxx
systemd daemon-reload
limit-cpu.conf
是否已经载入xxxxxxxxxx
systemdl status user-1000.slice
xxxxxxxxxx
● user-1000.slice - User Slice of UID 1000
Loaded: loaded
Drop-In: /usr/lib/systemd/system/user-.slice.d
└─10-defaults.conf, 11-limit-cpu.conf
/etc/systemd/system/user-1000.slice.d
└─limit-cpu.conf
Active: active since Thu 2023-03-16 16:32:11 CST; 5min ago
Tasks: 5 (limit: 23634)
Memory: 16.6M
CGroup: /user.slice/user-1000.slice
├─session-3.scope
│ ├─2085 sshd: hpcadmin [priv]
│ ├─2105 sshd: hpcadmin@pts/2
│ └─2106 -bash
└─user@1000.service
└─init.scope
├─2095 /usr/lib/systemd/systemd --user
└─2097 (sd-pam)
配置项目可查询
man systemd.resource-control
CPU
时间占用率,取一个百分比数值,后缀为%
, 该百分比指, 相对于一个CPU
上可用的总CPU
时间,可以获得的最多CPU
时间。该配置不会限制使用CPU
核数,只能限制使用的总CPU
时间。K
、M
、G
、T
作为单位。MemoryHigh=
作为主要控制机制,并使用MemoryMax=
作为最后一道防线。可以使用后缀K
、M
、G
、T
作为单位。