linux上cgconfig服务,Linux资源管理与crgoups

cgroups 或Control Groups是Linux内核的一项功能,它允许管理员分配或限制系统资源以用于服务和组。

要列出正在运行的活动 控制组 ,我们可以使用以下 ps 命令 -

[root@localhost]# ps xawf -eo pid,user,cgroup,args

8362 root - \_ [kworker/1:2]

1 root - /usr/lib/systemd/systemd --switched-

root --system -- deserialize 21

507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald

527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f

540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd

715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n

731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd

734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch

737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug

738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon

740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --

address=systemd: --nofork --nopidfile --systemd-activation

资源管理,从CentOS 6.X开始,已经通过 systemd init 实现进行了重新定义。在思考资源管理服务时,主要关注的是 cgroup 。

cgroups 在功能和简单性方面都采用了 systemd 。

cgroups在资源管理中的目标是 -

没有任何一项服务可以将整个系统从整体上降低。或者没有一个单独的服务过程(可能是写得不好的PHP脚本)会通过消耗太多资源来削弱服务器功能。

cgroups 允许单位资源控制以下资源 -

CPU - 限制cpu密集型任务与其他不太密集型任务不重要

内存 - 限制服务可消耗的内存量

磁盘 - 限制磁盘I / O

CPU时间:

需要较少CPU优先级的任务可以具有自定义配置的CPU片。

例如,我们来看看以下两个服务。

Polite CPU Service 1

[root@localhost]# systemctl cat polite.service

# /etc/systemd/system/polite.service

[Unit]

Description = Polite service limits CPU Slice and Memory

After=remote-fs.target nss-lookup.target

[Service]

MemoryLimit = 1M

ExecStart = /usr/bin/sha1sum /dev/zero

ExecStop = /bin/kill -WINCH ${MAINPID}

WantedBy=multi-user.target

# /etc/systemd/system/polite.service.d/50-CPUShares.conf

[Service]

CPUShares = 1024

[root@localhost]#

Evil CPU Service 2

[root@localhost]# systemctl cat evil.service

# /etc/systemd/system/evil.service

[Unit]

Description = I Eat You CPU

After=remote-fs.target nss-lookup.target

[Service]

ExecStart = /usr/bin/md5sum /dev/zero

ExecStop = /bin/kill -WINCH ${MAINPID}

WantedBy=multi-user.target

# /etc/systemd/system/evil.service.d/50-CPUShares.conf

[Service]

CPUShares = 1024

[root@localhost]#

让我们使用较低的CPU优先级设置礼让服务 -

systemctl set-property polite.service CPUShares = 20

/system.slice/polite.service

1 70.5 124.0K - -

/system.slice/evil.service

1 99.5 304.0K - -

正如我们所看到的,在正常的系统空闲时间内,两个流氓进程仍在使用CPU周期。但是,设置时间片较少的那个是使用较少的CPU时间。考虑到这一点,我们可以看到如何使用较短时间的时间片来允许基本任务更好地访问系统资源。

为了为每个资源设置服务, set-property 方法定义了以下参数 -

systemctl set-property name parameter=value

CPU Slices

CPUShares

Memory Limit

MemoryLimit

Soft Memory Limit

MemorySoftLimit

Block IO Weight

BlockIOWeight

Block Device Limit (specified in /volume/path) )

BlockIODeviceWeight

Read IO

BlockIOReadBandwidth

Disk Write IO

BlockIOReadBandwidth

最常见的服务将受到 CPU使用 , 内存限制 和 读/写IO的 限制 。

每次更改后,都需要重新加载systemd并重新启动服务 -

systemctl set-property foo.service CPUShares = 250

systemctl daemon-reload

systemctl restart foo.service

在CentOS Linux中配置CGroups

要在CentOS Linux中创建自定义cgroup,我们需要先安装服务并配置它们。

第1步 - 安装libcgroup(如果尚未安装)。

[root@localhost]# yum install libcgroup

Package libcgroup-0.41-11.el7.x86_64 already installed and latest version

Nothing to do

[root@localhost]#

正如我们所看到的,默认情况下CentOS 7已经安装了 所有 安装程序的libcgroup 。使用最小安装程序将要求我们安装 libcgroup

实用程序以及任何依赖项。

第2步 - 启动并启用cgconfig服务。

[root@localhost]# systemctl enable cgconfig

Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service

to /usr/lib/systemd/system/cgconfig.service.

[root@localhost]# systemctl start cgconfig

[root@localhost]# systemctl status cgconfig

● cgconfig.service - Control Group configuration service

Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor

preset: disabled)

Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago

Main PID: 4692 (code=exited, status = 0/SUCCESS)

Memory: 0B

CGroup: /system.slice/cgconfig.service

Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group

configuration service...

Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group

configuration service.

[root@localhost]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Slurm 中,可以使用 cgroups(control groups)来限制一个任务(包括内存,CPU,IO 等资源)的使用。当一个任务超出了分配给它的资源限制时,它将被挂起或终止,以避免对系统的影响。 下面是如何配置跟踪内存的步骤: 1. 确保您的系统已安装 cgroups 相关软件包。您可以使用以下命令检查: ``` $ yum search cgroups ``` 2. 配置 cgroups。您需要配置 /etc/cgconfig.conf 文件和 /etc/cgrules.conf 文件。这些文件中的详细信息可以在 cgroups 的官方文档中找到。 3. 配置 Slurm,以便它能够使用 cgroups。您需要编辑 /etc/slurm/slurm.conf 文件,将以下行添加到文件末尾: ``` # Use cgroups for resource limits TaskPlugin=task/cgroup ``` 4. 启用 cgroups 功能。您可以使用以下命令启用: ``` $ systemctl enable cgconfig.service $ systemctl start cgconfig.service $ systemctl enable cgred.service $ systemctl start cgred.service ``` 5. 确认 cgroups 功能是否已启用。您可以使用以下命令检查: ``` $ systemctl status cgconfig.service $ systemctl status cgred.service ``` 6. 现在您可以在 Slurm 中使用 SUSPEND 抢占模式并跟踪内存资源。您可以使用以下命令提交一个任务并使用 SUSPEND 抢占模式: ``` $ sbatch --mem-per-cpu=1000M --cpus-per-task=2 --gres=gpu:1 --partition=gpu --job-name=myjob --signal=B:USR1@60 --requeue --wrap="python myscript.py" ``` 在这个例子中,我们使用了 `--mem-per-cpu` 标志来限制每个 CPU 的内存使用量,使用了 `--signal` 标志来设置一个信号,在任务运行 60 秒后发送该信号,使用了 `--requeue` 标志使任务在被挂起后自动重新排队,使用了 `--wrap` 标志来指定要运行的脚本。 如果任务超出了内存限制,它将被挂起。您可以使用以下命令来恢复任务: ``` $ scontrol update jobid=<jobid> state=running ``` 其中 `<jobid>` 是任务的 ID。 希望这能帮助您配置跟踪内存资源并在 Slurm 中使用 SUSPEND 抢占模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值