-
-
Notifications
You must be signed in to change notification settings - Fork 31.6k
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-128515: Add BOLT build to CI #128845
gh-128515: Add BOLT build to CI #128845
Changes from all commits
8699afc
254b553
9b179cb
684ece4
03be932
01cb8d8
5f9c410
6aa007c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -231,10 +231,14 @@ jobs: | |
name: >- | ||
Ubuntu | ||
${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} | ||
${{ fromJSON(matrix.bolt) && '(bolt)' || '' }} | ||
needs: check_source | ||
if: needs.check_source.outputs.run_tests == 'true' | ||
strategy: | ||
matrix: | ||
bolt: | ||
- false | ||
- true | ||
free-threading: | ||
- false | ||
- true | ||
|
@@ -246,9 +250,16 @@ jobs: | |
exclude: | ||
- os: ubuntu-24.04-aarch64 | ||
is-fork: true | ||
# Do not test BOLT with free-threading, to conserve resources | ||
- bolt: true | ||
free-threading: true | ||
# BOLT currently crashes during instrumentation on aarch64 | ||
- os: ubuntu-24.04-aarch64 | ||
bolt: true | ||
Comment on lines
+253
to
+258
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't have strong feelings about this pattern (using |
||
uses: ./.github/workflows/reusable-ubuntu.yml | ||
with: | ||
config_hash: ${{ needs.check_source.outputs.config_hash }} | ||
bolt-optimizations: ${{ matrix.bolt }} | ||
free-threading: ${{ matrix.free-threading }} | ||
os: ${{ matrix.os }} | ||
|
||
|
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -6,6 +6,11 @@ on: | |||||||||||||
config_hash: | ||||||||||||||
required: true | ||||||||||||||
type: string | ||||||||||||||
bolt-optimizations: | ||||||||||||||
description: Whether to enable BOLT optimizations | ||||||||||||||
required: false | ||||||||||||||
type: boolean | ||||||||||||||
default: false | ||||||||||||||
free-threading: | ||||||||||||||
description: Whether to use free-threaded mode | ||||||||||||||
required: false | ||||||||||||||
|
@@ -34,6 +39,12 @@ jobs: | |||||||||||||
run: echo "::add-matcher::.github/problem-matchers/gcc.json" | ||||||||||||||
- name: Install dependencies | ||||||||||||||
run: sudo ./.github/workflows/posix-deps-apt.sh | ||||||||||||||
- name: Install Clang and BOLT | ||||||||||||||
if: ${{ fromJSON(inputs.bolt-optimizations) }} | ||||||||||||||
run: | | ||||||||||||||
sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 19 | ||||||||||||||
sudo apt-get install bolt-19 | ||||||||||||||
echo PATH="$(llvm-config-19 --bindir):$PATH" >> $GITHUB_ENV | ||||||||||||||
- name: Configure OpenSSL env vars | ||||||||||||||
run: | | ||||||||||||||
echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV" | ||||||||||||||
|
@@ -73,14 +84,18 @@ jobs: | |||||||||||||
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ inputs.config_hash }} | ||||||||||||||
- name: Configure CPython out-of-tree | ||||||||||||||
working-directory: ${{ env.CPYTHON_BUILDDIR }} | ||||||||||||||
# `test_unpickle_module_race` writes to the source directory, which is | ||||||||||||||
# read-only during builds — so we exclude it from profiling with BOLT. | ||||||||||||||
run: >- | ||||||||||||||
PROFILE_TASK='-m test --pgo --ignore test_unpickle_module_race' | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Interesting, why doesn't it raise any issues while we build PGO build? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think there is a PGO build in CI There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (The read-only build file system looks specific to this CI setup) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
FYI, At Github Action there is no CI for PGO and LTO. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Let me take a look more detail. :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. https://github.com/python/cpython/actions/runs/12776586124/job/35615597427
I think it's fine to remove the test from the optimization suite. It seems likely for there to be some problems here due to the read-only setup. It's known that the tests require a writeable source directory cpython/.github/workflows/reusable-ubuntu.yml Lines 105 to 110 in ae31df3
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. #29904 added the read-only out of tree builds. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (We could disable the read-only builds for the BOLT job but it seems more painful than it's worth) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah okay let’s exclude the test with current way and let’s pile the issue about the test suite problem. Thank you for the investigation:) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Zanie found it was added in #29904, which gives this reason:
|
||||||||||||||
../cpython-ro-srcdir/configure | ||||||||||||||
--config-cache | ||||||||||||||
--with-pydebug | ||||||||||||||
--enable-slower-safety | ||||||||||||||
--enable-safety | ||||||||||||||
--with-openssl="$OPENSSL_DIR" | ||||||||||||||
${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} | ||||||||||||||
${{ fromJSON(inputs.bolt-optimizations) && '--enable-bolt' || '' }} | ||||||||||||||
- name: Build CPython out-of-tree | ||||||||||||||
if: ${{ inputs.free-threading }} | ||||||||||||||
working-directory: ${{ env.CPYTHON_BUILDDIR }} | ||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not a strong opinion, but I would prefer to have just 1, 2, or 3 jobs with bolt. unless it is absolutely needed.
We can move some very specific builds to buildbots, while maintatining the bare minimum in CI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is just one job with BOLT — I think in the future we'd want a second job for aarch64 once that's unblocked. Are you suggesting I should frame this as an
include
instead? ref #128845 (comment)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes! Sorry for not being clear :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll wait to change it until others have a chance to weigh in, but I'm not opposed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I started to do this but found it awkward since I know we want aarch64 testing here eventually. Since @hugovk 👍 my comment at #128845 (comment) I think I'll leave it for now.