You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
I couldn't find a direct way to create a parent cgroup, which was required for threaded cgroups to work properly. This was my first experience using cgroups, and it was mostly smooth besides this issue. Without the parent/child relationship, I got a 'operation not supported' error when writing to cgroup.threads, and tracked it down to this requirement with some help from ChatGPT.
The official docs say:
Once threaded, the cgroup can’t be made a domain again. To enable the thread mode, the following conditions must be met. As the cgroup will join the parent’s resource domain. The parent must either be a valid (threaded) domain or a threaded cgroup.
Initially, I just created the final cgroup off the root, which isn't a threaded parent.
Describe the solution you'd like
A more intentional and discoverable method to do what I did.
Describe alternatives you've considered
It could be covered in documentation or tests.
Additional context
Sample code of my work around:
// You can't actually control threads in subprocesses unless there's a threaded parent cgrouplet parent_cgroup = CgroupBuilder::new("load_test_parent").build(hierarchies::auto())?;
parent_cgroup
.set_cgroup_type(cgroup::CGROUP_MODE_THREADED).expect("Failed to set Threaded mode");// This is the part I think could be more ergonomiclet child = "load_test_parent/".to_owned() + cgroup_name;let cgroup = CgroupBuilder::new(child.as_str()).cpu().cpus("0-3".to_owned()).done().pid().maximum_number_of_processes(MaxValue::Value(thread_limit)).done().build(hierarchies::auto())?;
cgroup
.set_cgroup_type(cgroup::CGROUP_MODE_THREADED).expect("Failed to set Threaded mode");// Start subprocess within the cgrouplet subprocess = Command::new("mycommand").args(&["-v"]).spawn().expect("Failed to start subprocess");// These add_task functions were also unclear from looking at the impls. // The parent group should receive the pid to cgroup.procs, and the child should receive it to cgroup.threads. // If I do add_task here, I get 'Operation not supported'.
parent_cgroup
.add_task_by_tgid(CgroupPid::from(&subprocess)).expect("Failed to add subprocess to parent cgroup");
cgroup
.add_task(CgroupPid::from(&subprocess)).expect("Failed to add Jetty process threads to child cgroup");
The text was updated successfully, but these errors were encountered:
Is your feature request related to a problem? Please describe.
I couldn't find a direct way to create a parent cgroup, which was required for threaded cgroups to work properly. This was my first experience using cgroups, and it was mostly smooth besides this issue. Without the parent/child relationship, I got a 'operation not supported' error when writing to cgroup.threads, and tracked it down to this requirement with some help from ChatGPT.
The official docs say:
Initially, I just created the final cgroup off the root, which isn't a threaded parent.
Describe the solution you'd like
A more intentional and discoverable method to do what I did.
Describe alternatives you've considered
It could be covered in documentation or tests.
Additional context
Sample code of my work around:
The text was updated successfully, but these errors were encountered: