Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-109595: Add -Xcpu_count=<n> cmdline for container users #109667

Merged
merged 71 commits into from
Oct 10, 2023

Conversation

corona10
Copy link
Member

@corona10 corona10 commented Sep 21, 2023

@corona10
Copy link
Member Author

cc @indygreg

@corona10
Copy link
Member Author

corona10 commented Sep 21, 2023

Please read the issue of why this flag is needed and see also actual use-case from #109595 (comment)

Even if the container system is important these days, there is no way to limit CPU resources for the container environment from Python program side.
JDK provides -XX:ActiveProcessorCount=<n> from JDK 21 instead of supporting cgroup, this patch will provide identical feature to Python user and super useful :)

Doc/library/os.rst Outdated Show resolved Hide resolved
Doc/using/cmdline.rst Outdated Show resolved Hide resolved
Doc/using/cmdline.rst Outdated Show resolved Hide resolved
Doc/using/cmdline.rst Outdated Show resolved Hide resolved
Include/cpython/initconfig.h Show resolved Hide resolved
Doc/using/cmdline.rst Outdated Show resolved Hide resolved
Python/initconfig.c Outdated Show resolved Hide resolved
Python/initconfig.c Outdated Show resolved Hide resolved
Python/initconfig.c Outdated Show resolved Hide resolved
Python/initconfig.c Outdated Show resolved Hide resolved
@corona10 corona10 requested a review from vstinner September 21, 2023 17:48
@@ -715,6 +715,7 @@ static int test_init_from_config(void)

putenv("PYTHONINTMAXSTRDIGITS=6666");
config.int_max_str_digits = 31337;
config.cpu_count = -1;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please set a more interesting value like 1234?

Copy link
Member

@vstinner vstinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please document the change in Doc/whatsnew/3.13.rst?

Comment on lines 549 to 551
* :samp:`-X cpu_count={n}` will override the number of CPU count from system.
If this option is provided, :func:`os.cpu_count` will return the overrided value.
And *n* must be greater equal then 1.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* :samp:`-X cpu_count={n}` will override the number of CPU count from system.
If this option is provided, :func:`os.cpu_count` will return the overrided value.
And *n* must be greater equal then 1.
* :samp:`-X cpu_count={n}` overrides the number of CPU count from system:
:func:`os.cpu_count` returns *n*. The value *n* must be greater than
or equal to 1.

Doc/using/cmdline.rst Outdated Show resolved Hide resolved
Python/initconfig.c Show resolved Hide resolved
static PyStatus
config_init_cpu_count(PyConfig *config)
{
int cpu_count = -1;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can move the variable declaration inside the "if (sep)" block. Does it have to be initialized?

If you are afraid of undefined behavior, maybe config_wstr_to_int() should set *result to 0 on error.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now I added PYTHONCPUCOUNT envvar, so the current structure will be needed.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want, you can move the variable declaration inside each "if (env)" block and duplicate the variable, to better show its scope. But well, that's just a personal preference. Feel free to ignore my coding style remark ;-)

Python/initconfig.c Outdated Show resolved Hide resolved
corona10 and others added 3 commits September 22, 2023 03:13
Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Victor Stinner <vstinner@python.org>
Modules/posixmodule.c Outdated Show resolved Hide resolved
@vstinner
Copy link
Member

vstinner commented Oct 2, 2023

I'm fine with os._get_cpu_count_config() returning a string.

For the env var, apparently, using an underscore or not became a hot debate: see https://discuss.python.org/t/change-environment-variable-style/35180 discussion. Maybe we should wait a few days until the dust settle down to see if a consensus is reached? Python 3.13.0 alpha 1 is scheduled for Tuesday, 2023-10-17, we will have time. Also, it may wait for alpha 2 ;-)

Lib/os.py Outdated Show resolved Hide resolved
Modules/posixmodule.c Outdated Show resolved Hide resolved
@corona10 corona10 requested a review from gpshead October 3, 2023 02:12
@gpshead gpshead added type-feature A feature request or enhancement docs Documentation in the Doc dir 3.13 bugs and security fixes labels Oct 3, 2023
@vstinner
Copy link
Member

vstinner commented Oct 9, 2023

The majority wants PYTHON_CPU_COUNT env name: https://discuss.python.org/t/change-environment-variable-style/35180

@corona10
Copy link
Member Author

corona10 commented Oct 9, 2023

@gpshead I will merge this PR by tomorrow. Please let me know if there needs more change. :)
cc @vstinner

Copy link
Member

@vstinner vstinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. I see that you addressed the two @gpshead's comments. You can merge.

@corona10 corona10 merged commit 0362cbf into python:main Oct 10, 2023
@corona10 corona10 deleted the gh-109595 branch October 10, 2023 10:00
@vstinner
Copy link
Member

Congrats.

@gpshead
Copy link
Member

gpshead commented Oct 10, 2023

🎉 thanks everybody!

@corona10
Copy link
Member Author

Thanks @vstinner and @gpshead for all your efforts to consider every use case!!

@vstinner
Copy link
Member

Follow-up: issue #110649 to add -X cpu_count=process.

Glyphack pushed a commit to Glyphack/cpython that referenced this pull request Sep 2, 2024
…hon#109667)


---------

Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Gregory P. Smith [Google LLC] <greg@krypto.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.13 bugs and security fixes docs Documentation in the Doc dir type-feature A feature request or enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants