标签: cgroups

您可以将带宽限制到基于 tmpfs 的 ramdisk 吗?

我使用 tmpfs 创建了一个 ramdisk,如下所示:

sudo mount -t tmpfs -o size=1024m tmpfs /myramdisk
Run Code Online (Sandbox Code Playgroud)

我正在研究 cgroup blkio 子系统带宽限制“read_bps_device”和“write_bps_device”,但它们似乎需要您想要限制访问的块设备的主要和次要编号。

有没有办法实现与内存中 tmpfs ramdisk 类似的带宽限制?

更新:我找到了一种迂回的方法来完成这个。我先nfs 导出ramdisk 挂载。然后 nfs 在同一台机器上通过环回挂载它。然后我使用 linux 网络流量整形来设置带宽限制。这似乎提供了我需要的东西。我正在执行一些测量以查看这种可怕的分层所带来的损失。过几天我会更新这方面的信息。

io bandwidth limit cgroups ramdisk

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

nice level 和 systemctl CPUShares 属性之间的区别

据我所知(如果我错了,请纠正我),

systemctl set-property ... CPUShares=some_value
Run Code Online (Sandbox Code Playgroud)

限制整个 cgroup 单元的 CPU 时间。如果我们想限制该单元内进程的 CPU 时间,我们可以使用

systemd-run ... nice=some_value
Run Code Online (Sandbox Code Playgroud)

我想知道进程的 nice-value 和一组进程的 CPUShares-value 的概念之间是否存在一些内在差异?我们可以限制进程的 CPUShares 或设置 cgroup 单元的 nice-value 吗?我们什么时候想做一个或另一个?

systemd nice cgroups

9
推荐指数
2
解决办法
6627
查看次数

iptables 和 cgroups v2(netfilter 的 xt_cgroup)

我似乎无法匹配的cgroup V2层次结构与正在运行的进程cgroup的模块iptables。我正在运行带有所有必需模块的 Linux 4.13.0:

$ grep CGROUP <kernel_config>
CONFIG_CGROUPS=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
# CONFIG_CGROUP_RDMA is not set
CONFIG_CGROUP_FREEZER=y
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
# CONFIG_CGROUP_BPF is not set
# CONFIG_CGROUP_DEBUG is not set
CONFIG_SOCK_CGROUP_DATA=y
**CONFIG_NETFILTER_XT_MATCH_CGROUP=m**
CONFIG_NET_CLS_CGROUP=m
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y

$ lsmod | grep cgroup
xt_cgroup              16384  2
x_tables               36864  7 xt_LOG,xt_cgroup,iptable_mangle,ip_tables,iptable_filter,xt_mark,ipt_MASQUERADE
Run Code Online (Sandbox Code Playgroud)

它是一个基于 Debian 的发行版,带有 systemd-235,它挂载了以下 cgroup:

$ mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (rw,mode=755)
cgroup …
Run Code Online (Sandbox Code Playgroud)

networking iptables cgroups

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

为管理控制台保留资源

我的服务器经常被爬虫几乎 DOS 攻击。我还没有弄清楚究竟是什么导致了高负载。CPU、内存和磁盘 IO 未达到极限(可能是网络流量)。我的问题是,是否有人知道如何在系统中保留容量以运行 shell 会话(bash over ssh)。这可以使用 cgroups 来完成吗?现在加载值很容易达到 60,这使得输入任何命令变得困难。

load cgroups

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

使用 cgroup 控制应用程序的优先级

我想更好地了解 cgroups,并想了解应用 cgroups 的用例。

cgroups 是对不同应用程序进行优先级排序的好方法(即,给予特定类型的应用程序更高的优先级,如 Web 服务器)?

linux scheduling priority cgroups

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

达尔文中的 cgroups 类似物

达尔文中是否有类似于 cgroups 的类似方法,用于防止进程通过以下方式逃离其父进程的控制/监视fork()?如果是,那是什么?

对于某些背景,考虑一个进程 P、直接后代 Q 以及 Q 的后代 R:cgroups 允许 P 控制和监视 Q 和 R。如果 P 启动 Q,但 Q 生成一个进程(R 中的 r) ,如果没有类似于 cgroups 的东西,P 就无法监控 r。

一个现实世界的例子是 systemd (P) 生成 openssh 的 sshd (Q) 作为守护进程,然后生成 sshd (R) 的其他实例来处理每个打开的会话。如果没有 cgroup,systemd 将无法与每会话 sshd 进行交互。

(在 NT 环境中,cgroup 类似于Job 对象。)

cgroups darwin

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

如果内存不受限制/无限制,cgroup 的 limit_in_bytes 的值是多少?

打印无限制的 docker 容器的值我得到值 9223372036854771712,即 0x7FFFFFFFFFFFF000(这与 XUbuntu 主机的值相同)。我找不到一个参考,表明这是指示无限内存资源的 Docker 或 Linux 默认值。

这个价值从何而来?容器虚拟化或 Linux 发行版/位元之间有什么不同吗?

memory cgroups docker

8
推荐指数
2
解决办法
3568
查看次数

如何确定 systemd 是使用传统模式、混合模式还是统一模式(cgroupsv1 与 cgroupsv2)?

Systemd 可以使用以下三种模式之一来管理 cgroup:

  • 遗产
  • 杂交种
  • 统一

我如何检查它使用的是哪一个?

systemd cgroups

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

cgroups v2:cgroup 控制器未委托给 CentOS Stream 上的非特权用户 (8)

我目前正在尝试配置或多或少全新安装的 CentOS Stream (8),以将 cgroup 控制器委托给非特权用户。然而,我在这方面失败了,我已经在网上搜索了两天,但找不到有相同或类似问题的人。

我想使用 podman 运行无根容器。然而,我失败了,因为非特权用户需要拥有 cgroup control pids。然而,以下命令不会产生任何结果,表明没有可用的 cgroup 控制器:

$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
Run Code Online (Sandbox Code Playgroud)

据我了解,此命令应该在默认配置中产生如下所示的结果(请参阅docker.com):

$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
memory pids
Run Code Online (Sandbox Code Playgroud)

当然,我已经使用systemd.unified_cgroup_hierarchy=1in启用了 cgroups v2/etc/default/grub并使用grub2-mkconfig.

因此,我尝试了docker.com中描述的以下命令:

# mkdir -p /etc/systemd/system/user@.service.d
# cat > /etc/systemd/system/user@.service.d/delegate.conf << EOF
[Service]
Delegate=cpu cpuset io memory pids
EOF
# systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

最后,我重新启动,但没有效果。对于非特权用户来说,仍然没有 cgroup 控制器。

配置:CentOS Stream (8) 最新,Systemd v239

centos systemd container cgroups podman

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

当使用 cgroups 阻止对 tty 的访问时,Bash 如何仍然写入终端?

环境:

重现步骤:

  1. 创建设备新策略
cd /sys/fs/cgroup/devices
mkdir custom_poc
Run Code Online (Sandbox Code Playgroud)
  1. 验证哪个设备被用作 tty(多种方法):
  1. 将 tty 设备添加到devices.deny

linux cgroups

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