diff options
| author | bors <bors@rust-lang.org> | 2022-07-23 13:33:56 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-07-23 13:33:56 +0000 |
| commit | e55c53c57e953a4f5716461dbaf4af5d623d80da (patch) | |
| tree | 8b73737293b99669118647a024ceb51c2e2ee047 /library/std/src/thread | |
| parent | 2e43d068ced2162bc57da332094c06604bc1b191 (diff) | |
| parent | 2e33c812e8b1bea563893f17ff5edcb7023d5d41 (diff) | |
| download | rust-e55c53c57e953a4f5716461dbaf4af5d623d80da.tar.gz rust-e55c53c57e953a4f5716461dbaf4af5d623d80da.zip | |
Auto merge of #97925 - the8472:cgroupv1, r=joshtriplett
Add cgroupv1 support to available_parallelism
Fixes #97549
My dev machine uses cgroup v2 so I was only able to test that code path. So the v1 code path is written only based on documentation. I could use some help testing that it works on a machine with cgroups v1:
```
$ x.py build --stage 1
# quota.rs
fn main() {
println!("{:?}", std::thread::available_parallelism());
}
# assuming stage1 is linked in rustup
$ rust +stage1 quota.rs
# spawn a new cgroup scope for the current user
$ sudo systemd-run -p CPUQuota="300%" --uid=$(id -u) -tdS
# should print Ok(3)
$ ./quota
```
If it doesn't work as expected an strace, the contents of `/proc/self/cgroups` and the structure of `/sys/fs/cgroups` would help.
Diffstat (limited to 'library/std/src/thread')
| -rw-r--r-- | library/std/src/thread/mod.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/library/std/src/thread/mod.rs b/library/std/src/thread/mod.rs index d28c7b58b20..44c8a50fd86 100644 --- a/library/std/src/thread/mod.rs +++ b/library/std/src/thread/mod.rs @@ -1577,10 +1577,15 @@ fn _assert_sync_and_send() { /// /// On Linux: /// - It may overcount the amount of parallelism available when limited by a -/// process-wide affinity mask or cgroup quotas and cgroup2 fs or `sched_getaffinity()` can't be +/// process-wide affinity mask or cgroup quotas and `sched_getaffinity()` or cgroup fs can't be /// queried, e.g. due to sandboxing. /// - It may undercount the amount of parallelism if the current thread's affinity mask /// does not reflect the process' cpuset, e.g. due to pinned threads. +/// - If the process is in a cgroup v1 cpu controller, this may need to +/// scan mountpoints to find the corresponding cgroup v1 controller, +/// which may take time on systems with large numbers of mountpoints. +/// (This does not apply to cgroup v2, or to processes not in a +/// cgroup.) /// /// On all targets: /// - It may overcount the amount of parallelism available when running in a VM |
