From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from atuin.qyliss.net (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id 097F652A8; Fri, 21 Aug 2026 06:53:36 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 993) id 0AFD15294; Fri, 21 Aug 2026 06:53:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on atuin.qyliss.net X-Spam-Level: X-Spam-Status: No, score=-0.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DMARC_PASS,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 Received: from mail-yw1-x1135.google.com (mail-yw1-x1135.google.com [IPv6:2607:f8b0:4864:20::1135]) by atuin.qyliss.net (Postfix) with ESMTPS id 322F8528F for ; Fri, 21 Aug 2026 06:53:31 +0000 (UTC) Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-81f3b227a4aso11864937b3.1 for ; Thu, 20 Aug 2026 23:53:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787295208; x=1787900008; darn=spectrum-os.org; h=cc:to:references:in-reply-to:content-transfer-encoding:content-type :mime-version:message-id:date:subject:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QNCP7p6xZ4LARMSCIBHxbockRjyD2II/bk4rJuBDSH0=; b=JAYrQI+8bI/E6E5bgXSd9Dz9dKaYrXfikC93kBYrkYf9TtzgARnpUWNmnGdpTmdiEA V+kPCB7QkRggv2tuLD2ChC9sG2XoBrY+ywTQZ1j+MWq5nl35JmWEv95YSbTwPNjBvJmD ZTGZXV7S9ah6JfwWjNaDLOFdEiOkh6wiDbnerSBxBz6EJ0baqF4FHtcpHgENZXxL8tl8 0JYSDLoX7Bd+AHGHvEiMFbBvv08hEmd9/z4UNL01n4ZAo13C0F1rlfUcvJQpK8E0lvBQ pQeu3Svw230MEfAl2FTkePanJqs511Y6glzFJOLs/kuA308REH8v3otm/4XpsDg5XY3R FQPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787295208; x=1787900008; h=cc:to:references:in-reply-to:content-transfer-encoding:content-type :mime-version:message-id:date:subject:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QNCP7p6xZ4LARMSCIBHxbockRjyD2II/bk4rJuBDSH0=; b=BKHGJ3lDRE5jriE2vJ+CznpS3rnsvwQJ7rKkGKMc3GsvucLcBmBb3ZKFbslqUAUF58 0Giu0aibxea6yvuJDruI/1TnNlbL8zjhw3L0zSG5K7eXdlrD+8LnM9599rM43RCHq4uu klYSFW61FFm0IFYXl5aqphdX9Xnq2NdCG0kc3axCsSPRIWQFL2ouBzUSWH2jdPH4QmwH YSfExEmjpfb1Q7wolvYuNY1LjBrk+uSTZyFX4oUmV1K2jw8eOxw+H8oAT4KCtJClpslc 3EtK5mvvNmUk7pqhhfu+hM5cmugtvREry9r/FJKJHYjF0up3NusvaGkN7RsCMnO/RMXQ 2QAQ== X-Gm-Message-State: AFuF++mnhYfTatqsX9zoUh1JlylvVZZtaH8lXCHCz0xmLrQezt1+J0EU 43xmWNaFuajGFLRfEKiqXXi6kDEIyb7iCI0BGjSnbyRp7zdULvI1K7pB2FfYfdyC X-Gm-Gg: AR+sD10l5B/8RxSDpJ58qDwql1RkrngWy57OS1qizxTG4IXPOlpPIXAuC5kKXuC6wZD 1VsLNV2tYIBxirbL8NZ9qpWXKUDrUQqpCGiWU3UqabiALEqheSTNRE9NP1dTqTQTpTr46S1w4GX CM1yVeDLTE/+ehBbOnWFWaLG/IqjqZNsu73C8FLwgJIi6i/LgWmm3QAO8xJrmtpf9+p1HsIYc2m 6Z+HqqcIgZuPkdH8B7HR4J6GtlWw65aTE389weRZK2ubAsg2XMlnzrnHReWfdIKwGb1qeZNCZ9E jAIuwQ5PAZiwh3w5R594wmZMn5b67nP77imqv416B4iHVLDEMYaMhZdZ8hJWhBDq8gwKI78otMv +ifO48W4T/dHzRPRHZ7EfxVeQI7xYkruBh18oE4fh9kIRzIk8zcDuNZzOYzMUzvssM4dfJPd4pZ vBHHK4Nn7LAkPLOfwzAOEh4WY4fy98ZCd55zQCDarA3sTHrzcdTxPModP51vVEM7vjFaikRxLfO w== X-Received: by 2002:a05:690c:a7c5:b0:81e:5d2e:89c8 with SMTP id 00721157ae682-849f1b94944mr15433687b3.14.1787295207927; Thu, 20 Aug 2026 23:53:27 -0700 (PDT) Received: from localhost.localdomain ([185.98.168.14]) by smtp.gmail.com with UTF8SMTPSA id 00721157ae682-84512474dddsm35356077b3.11.2026.08.20.23.53.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 23:53:26 -0700 (PDT) From: Demi Marie Obenour Subject: [PATCH v7 00/19] Control group support Date: Fri, 21 Aug 2026 02:51:43 -0400 Message-Id: <20260821-cgroups-v7-0-7f1870dedefc@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-B4-Tracking: v=1; b=H4sIAAAAAAAC/3XNQWrDMBAF0KsErasyGmnGdle9R+lCkiVHpYmDl ZiE4LtXTqB2DV0NH/77cxc5DClk8ba7iyGMKaf+WEL1shN+b49dkKktWSAgA2EtfTf0l1OWLUM TsILAphGlfRpCTNfH0sfnM+eL+wr+PPO5sU/53A+3x6tRzb3nKiP8ro5KKgmBrIuaFCj33h1s+ n71/UHMqyP+47A4721ANI59TVunF1cptThdHHlnWVmEcrfOrByunJEgDTsMFGOsHG8drZxeOSr OaSRnfdNqE7eOF1cDLY6Lg5o9RIBI9MdN0/QDP7cZR8gBAAA= X-Change-ID: 20260528-cgroups-d609e270e649 In-Reply-To: <20260805-cgroups-v6-0-086c0f00f55f@gmail.com> References: <20260805-cgroups-v6-0-086c0f00f55f@gmail.com> To: Spectrum OS Development X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787295104; l=7412; i=demiobenour@gmail.com; s=20250729; h=from:subject:message-id; bh=JM5nBOvhy4sZThVA/Tgl0kajDsFDx3X9TnuAZjhtYkY=; b=RKT8ys68tL2yC6FLb9wuf3gYxCEy0Yy9H1G0Scuz4UBO9xAymWY+GyQJniVfcr0CgImQnBwvw 9eMMyFSrMtEAjpM51GDNQsh+2RluVQHz7U7iHjRuCwLE/xA+yPyejPB X-Developer-Key: i=demiobenour@gmail.com; a=ed25519; pk=X57Q4/YQDj9t4SBeKaDwvXYKB6quZJVx/DE2Ly2out0= Message-ID-Hash: K6B655EUJOZC4GQIJN3BYJTCUMPOTTH2 X-Message-ID-Hash: K6B655EUJOZC4GQIJN3BYJTCUMPOTTH2 X-MailFrom: demiobenour@gmail.com X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.spectrum-os.org-0; header-match-devel.spectrum-os.org-1; header-match-devel.spectrum-os.org-2; header-match-devel.spectrum-os.org-3; header-match-devel.spectrum-os.org-4; emergency CC: Demi Marie Obenour , Alyssa Ross , Valentin Gagarin X-Mailman-Version: 3.3.10 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Signed-off-by: Demi Marie Obenour --- Changes in v7: - Reformat comments to 83 columns. - Fix error messages to not use "make" to refer to cgroup creation. - Unconditionally enable delegation of controllers to sub-cgroups by writing to cgroup.subtree_control. - Unconditionally set the user.delegate xattr to 1. - Link to v6: https://spectrum-os.org/lists/archives/spectrum-devel/20260805-cgroups-v6-0-086c0f00f55f@gmail.com Changes in v6: - Simplify command-line argument parsing. - Place SPDX-FileCopyrightText before SPDX-License-Identifier, except in patches that already have Reviewed-by tags. - Clean up cgroup-setup. - Make openat2_simple() take an enum instead of a flags argument. - Use recursive function to remove directories. The standard library remove_dir_all() function is recursive, and the complexity of being more robust than the standard library is not worth it here. Spectrum does not allow code running as non-root to create cgroups, so there is no security concern. - Link to v5: https://spectrum-os.org/lists/archives/spectrum-devel/20260731-cgroups-v5-0-b325bac9d34f@gmail.com Changes in v5: - Rename open_subtree_raw() to open_beneath(). - Use consistent file modes. - Avoid using O_NOFOLLOW when RESOLVE_NO_SYMLINKS is also used. - Drop tracking of specific cgroup paths (at the cost of worse error messages). - Have functions take &dyn AsFd where that makes sense. - Drop exclusive vs shared lock tracking. - Remove vm-service-run wrapper script. - Use explicit cgroup names in VM service run and finish scripts. - Use sed to write to cgroup.subtree_control in the root cgroup, avoiding a special case in cgroup-setup. - Avoid mutating the Cgroup struct when creating child cgroups. - Avoid mutating the Cgroup struct when purging cgroups. - Improve documentation. - Drop cgroup-s6-finish and call cgroup-purge directly. - Remove support for operating on . or / in cgroup-setup. - Fix comments. - Link to v4: https://spectrum-os.org/lists/archives/spectrum-devel/20260721-cgroups-v4-0-46b2e5fff7b6@gmail.com Changes in v4: - Implement proper locking to make concurrent operations safe. - Purge VMM cgroup in vmm service finish script. - Delete /run/vsock/${VM}/vsock before running Cloud Hypervisor. - Massively refactor cgroup-setup tool. - Link to v3: https://spectrum-os.org/lists/archives/spectrum-devel/20260711-cgroups-v3-1-5cba61a20cba@gmail.com Changes in v3: - Remove the implicit .service suffix on leaf control groups. - Make cgroup-setup acts as an s6 finish script when called as "finish". - Put the VMMs in the same cgroups as the per-VM services. - Add common helper script for the per-VM services. - Significantly refactor the Rust code. - Link to v2: https://spectrum-os.org/lists/archives/spectrum-devel/20260620-cgroups-v2-1-ccae224b6c85@gmail.com Changes in v2: - Omit resource control support. It was completely broken, and the way Spectrum run scripts work means that it is better to setup resource controls just before the execve() into the final service process. This will be done by a separate tool. - Link to v1: https://spectrum-os.org/lists/archives/spectrum-devel/20260620-cgroups-v1-1-0e5abf35101b@gmail.com --- Demi Marie Obenour (19): host/rootfs: Mount filesystems before s6-rc-init tools: Add control group manager Documentation: Mention control groups Mount cgroup2 filesystem at /sys/fs/cgroup host/rootfs: Enable controllers in non-root cgroups host/rootfs: Add comments where cgroups are intentionally not used host/rootfs: serial-getty-generator: Use cgroups host/rootfs: systemd-udevd: Run in cgroup host/rootfs: weston: Run in cgroup host/rootfs: Set up parent cgroup for all per-VM services host/rootfs: Create per-VM cgroup for all of the VM's services host/rootfs: run-vmm: Create per-VM cgroup host/rootfs: run-appimage: Purge the per-VM cgroup host/rootfs: run-flatpak: Purge the per-VM cgroup host/rootfs: dbus: Run in cgroup host/rootfs: vhost-user-fs: Run in cgroup host/rootfs: vhost-user-gpu: Run in cgroup host/rootfs: xdg-desktop-portal-spectrum-host: Run in cgroup host/rootfs: spectrum-router: Run in cgroup .codespellrc | 2 +- Documentation/doc/development/control-groups.adoc | 108 ++++++++ host/rootfs/default.nix | 6 +- host/rootfs/file-list.mk | 10 + host/rootfs/image/etc/fstab | 1 + host/rootfs/image/etc/init | 14 +- .../s6-linux-init/run-image/service/getty-tty2/run | 1 + .../s6-linux-init/run-image/service/getty-tty3/run | 1 + .../s6-linux-init/run-image/service/getty-tty4/run | 1 + .../run-image/service/root-terminal/run | 1 + .../run-image/service/s6-linux-init-shutdownd/run | 1 + .../run-image/service/s6-svscan-log/run | 1 + .../service/serial-getty-generator/finish | 5 + .../run-image/service/serial-getty-generator/run | 4 +- .../run-image/service/serial-getty/run | 1 + .../run-image/service/serial-getty/template/run | 1 + .../run-image/service/vm-services/run | 3 + .../vm-services/template/data/service/dbus/finish | 5 + .../vm-services/template/data/service/dbus/run | 2 + .../template/data/service/spectrum-router/finish | 5 + .../template/data/service/spectrum-router/run | 2 + .../template/data/service/vhost-user-fs/finish | 5 + .../template/data/service/vhost-user-fs/run | 2 + .../template/data/service/vhost-user-gpu/finish | 5 + .../template/data/service/vhost-user-gpu/run | 2 + .../xdg-desktop-portal-spectrum-host/finish | 5 + .../service/xdg-desktop-portal-spectrum-host/run | 2 + .../run-image/service/vm-services/template/finish | 5 + .../run-image/service/vm-services/template/run | 4 + .../run-image/service/vmm/template/finish | 5 + .../rootfs/image/etc/s6-linux-init/scripts/rc.init | 7 - host/rootfs/image/etc/s6-rc/systemd-udevd/finish | 5 + host/rootfs/image/etc/s6-rc/systemd-udevd/run | 5 +- host/rootfs/image/etc/s6-rc/weston/finish | 5 + host/rootfs/image/etc/s6-rc/weston/run | 4 + host/rootfs/image/usr/bin/run-appimage | 7 +- host/rootfs/image/usr/bin/run-flatpak | 7 +- host/rootfs/image/usr/bin/run-vmm | 4 + host/rootfs/image/usr/bin/vm-stop | 5 +- pkgs/default.nix | 1 + tools/cgroup-setup/Cargo.lock | 67 +++++ tools/cgroup-setup/Cargo.lock.license | 2 + tools/cgroup-setup/Cargo.toml | 10 + tools/cgroup-setup/default.nix | 22 ++ tools/cgroup-setup/src/cgroup.rs | 289 +++++++++++++++++++++ tools/cgroup-setup/src/main.rs | 168 ++++++++++++ 46 files changed, 799 insertions(+), 19 deletions(-) --- base-commit: 77d2389874bb092b8dbf05ecc5b1030372e80e98 change-id: 20260528-cgroups-d609e270e649 -- Sincerely, Demi Marie Obenour (she/her/hers)