Issue #21797 has been updated by moznion (Taiki Kawakami).
What would be the value of nprocessor in this case?, e.g. if cpu_quotais 0.5, what does nprocessors return? cpu_quota.ceil?
I think it depends on the decision, but either floor or ceil should be fine (for reference, Go’s `GOMAXPROCS` has used ceil since 1.25). In any case, it would be better if the logic were configurable.
Which is preferred: pure Ruby as a part of ruby/etc or C?
I agree with this. It sounds like it should be implemented under `ruby/etc`. By the way, @osyoyu was interested in using this function in `ruby/thread_pthread.c`, but is it sufficient for Ruby to set the value in the `RUBY_MAX_CPU` environment variable automatically? In other words, do we actually need to use this function directly in the C layer? ---------------------------------------- Feature #21797: Make Etc.nprocessors cgroup-aware on Linux https://bugs.ruby-lang.org/issues/21797#change-115889 * Author: moznion (Taiki Kawakami) * Status: Open ---------------------------------------- Currently, `Etc.nprocessors` ignores cgroup CPU quotas. This causes issues in containers where CPU limits differ from the host CPU count. I have written a gem for this purpose (https://github.com/moznion/maxprocs-ruby), but it would be preferable if the Ruby core implementation respected cgroup configuration. Additionally, concurrent-ruby provides similar functionality, but if the language itself offered this capability, language users would not need to implement it individually. And some parts of the Ruby language handle the number of processors using hard-coded values (e.g., https://github.com/ruby/ruby/blob/8efaf5e6b6a25e0d237f3d71b75865661ae98268/t...), so this could also be useful for Ruby language development. Extending `Etc.nprocessors` to respect cgroups is one option, but that would be a breaking change, so adding a new API (e.g., `Etc.cpu_quota` or something?) might be a better approach. ## Prior Art - Go 1.25: runtime GOMAXPROCS (Issue [#73193](https://github.com/golang/go/issues/73193)) - [uber-go/automaxprocs](https://github.com/uber-go/automaxprocs) - [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby): https://github.com/ruby-concurrency/concurrent-ruby/blob/129cf004294af68ac53... -- https://bugs.ruby-lang.org/