标签: cgroups

如何在 Ubuntu 中启用 CONFIG_RT_GROUP_SCHED 以使其成为 RT

我需要在 Ubuntu RT Linux 上运行实时应用程序,并且正在阅读有关使 Linux 充当 RT 系统的方法,我学到了两种方法来做到这一点

  1. preemptive_rt 内核修补
  2. CONFIG_RT_GROUP_SCHED内核中的启用标志。

我已经尝试过第一种方法为 Ubuntu 安装 RT Linux 补丁

然而,除了uname -r表明#1 SMP PREEMPT RT我没有其他证据证明它实际上是一个 RT 系统,因此想尝试第二种方法。CONFIG_RT_GROUP_SCHED在内核中启用标志并查看其性能。

我读到我们可以通过以下命令确认内核是否已经具有该标志:

# zcat /proc/config.gz | grep RT_GROUP

CONFIG_RT_GROUP_SCHED=y
Run Code Online (Sandbox Code Playgroud)

但是,我的系统在 proc 中甚至没有 config.gz 文件,所以我相信我的内核没有启用此功能。我对 Linux 内核比较陌生,所以这可能很天真,但如何在内核中启用它?

linux ubuntu real-time cgroups

4
推荐指数
1
解决办法
7708
查看次数

使用 systemd-run 限制多个进程的 CPU 和内存使用的语法?

我想使用 Linux 控制组 (cgroups) 来限制多个进程的 CPU 和 RAM 使用。如果进程是Process 1Process 2带有子进程Process 2 Sub,这是否是正确的、最小的命令语法:

sudo systemd-run --scope -p MemoryHigh=200M Process\ 1
                         -p MemoryHigh=200M Process\ 2
                         -p MemoryHigh=200M Process\ 2\ Sub
                         -p MemoryMax=250M Process\ 1
                         -p MemoryMax=250M Process\ 2
                         -p MemoryMax=250M Process\ 2\ Sub
                         -p CPUQuota=10% Process\ 1
                         -p CPUQuota=10% Process\ 2
                         -p CPUQuota=10% Process\ 2\ Sub
Run Code Online (Sandbox Code Playgroud)

我不确定正确的进程 ID(完整路径?进程名称?)、选项的“链接”、区分大小写、转义空格、子进程(此处:)是否Process 2 Sub自动包含在施加的限制中或需要单独控制,以及是否需要在每次启动相关进程时运行此命令,或者设置是否永久。谢谢!

syntax terminal resources cgroups systemd

4
推荐指数
1
解决办法
5165
查看次数

获取有关 cgroup 流程更改的通知吗?

基本上,通常用于通知文件系统更改的 inotify 在 cgroup 虚拟文件系统中不起作用。

本质上,我想要一种在 cgroup 中的进程死亡或分叉时获得类似于 inotify 的通知的方法。我尝试将 inotify 附加到taskscgroup 文件系统内的虚拟文件,但是当进程自行分叉时,只有当 usespace 工具实际手动写入它以影响 cgroup 时,它才会执行任何操作。

linux inotify cgroups

3
推荐指数
1
解决办法
1778
查看次数

尝试将进程添加到 cgroup 时出现“cgroup 组更改失败”

我在安装了 libcgroup 的Ubuntu 14SUSE Linux Enterprise Server 11 (x86_64)上使用 root 执行了以下操作:

cgcreate -t​​ ngam:home -a ngam:home -g cpuset:/nadav2ndCpuSet

cgset -r cpuset.cpus=1 nadav2ndCpuSet

之后,如果你 cat /sys/fs/cgroup/cpuset/nadav2ndCpuSet/cpuset.cpus,你会得到: 1

这很好!因为它应该工作。

然后,从用户ngam,我运行了以下 cmd:

cgexec -g cpuset:nadav2ndCpuSet ~/whileLoop

其中whileLoop只是一个简单的程序,它在循环中运行,执行 sqrt。

之后,我收到以下错误消息:

cgroup 更改组失败

为什么会发生?谢谢!

cgroups

3
推荐指数
1
解决办法
4719
查看次数

为什么 cAdvisor 指标中的容器内存使用量翻倍?

我测试了这些查询。第一个查询的值是第二个查询的一半:

sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*",pod=~"$pod"}) by (pod)

sum (container_memory_working_set_bytes{pod=~"$pod"}) by (pod)

为什么写作的image! = "", name = ~ "^ k8s_. *"价值会减半?

cgroups kubernetes prometheus cadvisor kubernetes-pod

3
推荐指数
1
解决办法
6068
查看次数

Ubuntu 22.04 上的 Docker jenkins ssh-agent“未在容器内运行”

现在 Ubuntu 22.04 已经发布了,我在我们的一位 jenkins-workers 上进行了全新安装来测试它,但我无法让 docker ssh-agent 正常工作。它无法再识别它是否在容器内运行,因此每当启动使用 docker 的作业时,我都可以在控制台中看到“Jenkins-worker-X 似乎没有在容器内运行”,然后管道失败。

我从之前就知道jenkins使用cgroup信息来检测它是否在容器中运行,因此例如cat /proc/self/cgroup在容器中执行应该会产生以 结尾的行列表/docker/<container-id>,然后Jenkins使用该列表来检测容器。但是,一旦我安装了 Ubuntu 22.04,cgroup 信息就不再包含 ,这/docker/<container-id>会导致 jenkins 代理认为它在裸机上运行。

即使执行官方镜像也有同样的问题,即docker run jenkins/ssh-agent:jdk11最后docker exec <container-id> cat /proc/self/cgroup会得到一个在我的机器上没有容器哈希的列表。

我该如何解决这个问题?从 Ubuntu 21.10 到 22.04 是否发生了某些变化导致了此问题?是否需要一些额外的配置?

我正在运行最新的 Ubuntu 22.04 (5.15.0-27-generic)、Docker 版本 20.10.12、内部版本 20.10.12-0ubuntu4。

任何帮助,将不胜感激!

编辑:我现在意识到,如果将所有软件包升级到最新版本(并使用最新的 jenkins/ssh-agent 映像),21.10 中也会发生同样的情况,因此原因可能出在升级的软件包之一中

jenkins cgroups docker

3
推荐指数
1
解决办法
1167
查看次数

无法写入 cgroup blkio 文件

我正在尝试使用cgroup blkio控制器来控制 I/O 带宽。

Cgroup已经设置并挂载成功,即调用 grep cgroup /proc/mounts

返回:

....
cgroup /sys/fs/cgroup/blkio cgroup rw,relatime,blkio 0 0
...
Run Code Online (Sandbox Code Playgroud)

然后我在blkio文件夹中创建一个新文件夹并写入文件blkio.throttle.read_bps_device,如下所示:

1. mkdir user1; cd user1
2. echo "8:5 10485760" > blkio.throtlle.read_bps_device
----> echo: write error: Invalid argument
Run Code Online (Sandbox Code Playgroud)

我的设备主要:次要编号在使用df -hls -l /dev/sda5用于存储设备时是正确的。

而且我仍然可以写入不需要设备主要:次要编号的文件,例如blkio.weight(但会引发相同的错误blkio.weigth_device

知道为什么我收到那个错误吗?

io operating-system linux-kernel cgroups

2
推荐指数
1
解决办法
2903
查看次数

在linux中,文件不为空,但大小为0

我在 Shell 中测试文件是否为空。 test -s /sys/fs/cgroup/systemd/docker/d4e311735706485e748513bad611070e223cba76fdf4c72a1102d14b653da750/tasks 它返回false,我使用时发现它的大小为0 ls -lh,但是当我使用时cat,我可以在这个文件中得到4071,这意味着该文件不为空。我想可能这个文件太小了,我在我的主目录中创建了一个文件,然后向它回显 4071,我发现它的大小不是 0。/sys/fs/cgroup 中的文件是否特殊?

shell file cgroups

2
推荐指数
1
解决办法
754
查看次数

无法挂载内存cgroup

我尝试使用以下命令挂载内存 cgroup:

sudo mount -t cgroup none /sys/fs/cgroup/memory -o memory

我收到错误:

mount: /sys/fs/cgroup/memory: wrong fs type, bad option, bad superblock on none, missing codepage or helper program, or other error.

我启用了所有 cgroup 内核配置选项,并且可以毫无问题地挂载 cpu、cpuset 和设备 cgroup。

我缺少什么?

操作系统: Raspberry Pi OS Lite(64位)

内核版本: 5.10.95

linux mount raspberry-pi cgroups

2
推荐指数
1
解决办法
1万
查看次数

Linux:如果进程打开文件进行写入,则让它失败

我希望命令行工具在打开特定文件进行写入时失败。

有没有办法可以修改命令行工具的环境(可能通过 cgroups),以便命令/进程(例如)“权限被拒绝”?

chmod a-w file不起作用。该过程似乎unlink()然后重新创建该文件。

我知道我可以使用 来观看进程的系统调用strace。但是有没有办法改变一些调用,以便该过程得到不同的结果?

背景:单元测试

linux system-calls cgroups

1
推荐指数
1
解决办法
123
查看次数