首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS/GCP上隔离CPU:错误安装cpuset

在AWS/GCP上隔离CPU:错误安装cpuset
EN

Server Fault用户
提问于 2022-11-27 22:51:45
回答 2查看 463关注 0票数 2

我在AWS/GCP上有两个32个vCPU实例。我试图设置cpu屏蔽,以便cpu 0、1被系统使用,cpu 2-31被屏蔽,并且仅由用户空间线程显式使用。

系统信息:

代码语言:javascript
复制
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy
代码语言:javascript
复制
$ cat /proc/filesystems | grep cpuset
nodev   cpuset

但是,当我尝试运行cset shield时,我遇到了一个与挂载有关的错误:

代码语言:javascript
复制
mount: /cpusets: none already mounted on /run/credentials/systemd-sysusers.service.
cset: **> mount of cpuset filesystem failed, do you have permission?

我已经深入研究了cset代码,似乎失败的调用是

代码语言:javascript
复制
$ sudo mount -t cpuset cpuset /cpusets
mount: /cpusets: cpuset already mounted or mount point busy.

/cpusets是一个新创建的文件夹,而$ cat /proc/mounts | grep cpuset是空的,因此似乎没有安装在其他地方。

也许是相关的:

代码语言:javascript
复制
$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot 0 0

我的猜测是AWS/GCP使用cpuset作为管理程序,或者类似的东西。是否有可能在AWS/GCP上分离cpus?我该怎么做呢?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2022-12-04 03:00:40

您使用的是已经挂载了v2 (“统一”)cgroup的systemd,所以它不是您管理的控制组--它的systemd。告诉它通过CPUAffinity= 中的相关选项。[Manager]A节/etc/systemd/system.conf.d/50-my-cpuset-options.conf文件这样做。然后,您可以使用CPUAffinity= (空到重置,非空添加)在那些特定的unit.service文件,您希望豁免全球默认。

您甚至可以使用systemd临时(直到重新启动)通过systemctl --runtime set-property example.service ExampleOption=Value命令修改已经运行的服务上的资源选项。使用它来确认产生的cgroup设置并度量它如何影响您的系统性能。我想,如果您没有破坏调度程序使用100% CPU的能力,而是提高了它的全部能力,那么在拥塞情况下,系统的可靠性将大大提高,而不是全局默认的。在那些特定的低优先级异步后台任务上,使用Nice=IOSchedulingClass=更紧密地匹配您的优先级,您确实希望运行这些任务,但不希望影响系统的其他部分--但是不使用关联大锤。

理论上,像cset这样的实用程序可以被更新为与这样的cgroup2系统管理器进行接口,并提供与以前相同的抽象,而在后台修改系统system.slice和单元默认值时,这个讨论听起来却是如此,但到目前为止还没有人这样做。而且,由于包罗万象提供了更丰富、更好的文档,并且可以说对内核已经学会的所有整洁的东西提供了更多的多功能控制,所以可能不再需要这样做。

票数 2
EN

Server Fault用户

发布于 2022-12-05 17:36:52

如前所述,systemd创建了自己的cgroup2层次结构,根据我的需要,这些层次结构并不能很好地使用cset。

我在/etc/ GRUB_CMDLINE_LINUX_DEFAULT /grub中添加了以下内容,以禁用Ubuntu22.10上的此行为。

在你做完之后,这一行会是这样的:

代码语言:javascript
复制
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unified_cgroup_hierarchy=false "

完成之后,您需要作为root运行:

代码语言:javascript
复制
update-grub
grub-install

然后重新启动。重新启动后,我成功地使用CSET在Ryzen CPU上屏蔽了CCX,并迁移了所有的用户和系统任务

下面是我遇到的更多关于这个问题的参考,以防您需要更多的背景:https://github.com/systemd/systemd/issues/13477#issuecomment-528113009 https://github.com/lxc/lxd/issues/10441

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1116756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档