rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
93.58k stars 12.05k forks source link

[WIP] Improve VecCache under parallel frontend #124780

Open Mark-Simulacrum opened 1 week ago

Mark-Simulacrum commented 1 week ago

This replaces the single Vec allocation with a series of progressively larger buckets. With the cfg for parallel enabled but with -Zthreads=1, this looks like a slight regression in i-count and cycle counts (<0.1%).

With the parallel frontend at -Zthreads=4, this is an improvement (-5% wall-time from 5.788 to 5.4688 on libcore) than our current Lock-based approach, likely due to reducing the bouncing of the cache line holding the lock. At -Zthreads=32 it's a huge improvement (-46%: 8.829 -> 4.7319 seconds).

FIXME: Extract the internals to rustc_data_structures, safety comments, etc.

r? @Mark-Simulacrum -- opening for perf first.

Mark-Simulacrum commented 1 week ago

@bors try @rust-timer queue

rust-timer commented 1 week ago

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

bors commented 1 week ago

:hourglass: Trying commit 206251b04f5b0f8623209af6caab2a515c71eb9f with merge 15ee67784efd5d46670c56f52fd618a4a00771e5...

rust-log-analyzer commented 1 week ago

The job mingw-check-tidy failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot) ```plain Getting action download info Download action repository 'msys2/setup-msys2@v2.22.0' (SHA:cc11e9188b693c2b100158c3322424c4cc1dadea) Download action repository 'actions/checkout@v4' (SHA:0ad4b8fadaa221de15dcec353f45205ec38ea70b) Download action repository 'actions/upload-artifact@v4' (SHA:65462800fd760344b1a7b4382951275a0abb4808) Complete job name: PR - mingw-check-tidy git config --global core.autocrlf false shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} --- COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/ RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \ && pip3 install virtualenv COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/ COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/ # NOTE: intentionally uses python2 for x.py so we can test it still works. # NOTE: intentionally uses python2 for x.py so we can test it still works. # validate-toolstate only runs in our CI, so it's ok for it to only support python3. ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \ --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # pip-compile --allow-unsafe --generate-hashes reuse-requirements.in --- #12 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/ #12 DONE 0.0s #13 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt && pip3 install virtualenv #13 0.436 Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB) #13 0.455 Collecting boolean-py==4.0 #13 0.463 Downloading boolean.py-4.0-py3-none-any.whl (25 kB) #13 0.481 Collecting chardet==5.1.0 --- #13 3.781 Building wheels for collected packages: reuse #13 3.782 Building wheel for reuse (pyproject.toml): started #13 4.110 Building wheel for reuse (pyproject.toml): finished with status 'done' #13 4.111 Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269 #13 4.111 Stored in directory: /tmp/pip-ephem-wheel-cache-6x0haqun/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d #13 4.113 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet #13 4.136 Attempting uninstall: setuptools #13 4.137 Found existing installation: setuptools 59.6.0 #13 4.138 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr #13 4.138 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr #13 4.138 Can't uninstall 'setuptools'. No files were found to uninstall. #13 4.828 Successfully installed binaryornot-0.4.4 boolean-py-4.0 chardet-5.1.0 jinja2-3.1.2 license-expression-30.0.0 markupsafe-2.1.1 python-debian-0.1.49 reuse-1.1.0 setuptools-66.0.0 #13 4.828 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv #13 5.361 Collecting virtualenv #13 5.427 Downloading virtualenv-20.26.1-py3-none-any.whl (3.9 MB) #13 5.486 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 70.0 MB/s eta 0:00:00 #13 5.538 Collecting platformdirs<5,>=3.9.1 #13 5.546 Downloading platformdirs-4.2.1-py3-none-any.whl (17 kB) #13 5.584 Collecting filelock<4,>=3.12.2 #13 5.592 Downloading filelock-3.14.0-py3-none-any.whl (12 kB) #13 5.614 Collecting distlib<1,>=0.3.7 #13 5.622 Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB) #13 5.628 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 468.9/468.9 KB 125.0 MB/s eta 0:00:00 #13 5.714 Installing collected packages: distlib, platformdirs, filelock, virtualenv #13 5.878 Successfully installed distlib-0.3.8 filelock-3.14.0 platformdirs-4.2.1 virtualenv-20.26.1 #13 DONE 6.0s #14 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/ #14 DONE 0.0s --- DirectMap4k: 184256 kB DirectMap2M: 6107136 kB DirectMap1G: 12582912 kB ##[endgroup] Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint + TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint Finished `dev` profile [unoptimized] target(s) in 0.04s ##[endgroup] downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/9c9b568792ef20d8459c745345dd3e79b7c7fa8c/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz extracting /checkout/obj/build/cache/llvm-9c9b568792ef20d8459c745345dd3e79b7c7fa8c-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm --- ##[endgroup] fmt check tidy check tidy: Skipping binary file check, read-only filesystem tidy error: `/checkout/compiler/rustc_query_system/src/query/caches.rs:369` contains `#[test]`; unit tests and benchmarks must be placed into separate files or directories named `tests.rs`, `benches.rs`, `tests` or `benches` ##[error]tidy error: /checkout/compiler/rustc_query_system/src/query/caches.rs:163: comment with odd number of backticks removing old virtual environment creating virtual environment at '/checkout/obj/build/venv' using 'python3.10' Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (24.0) Collecting black==23.3.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 7)) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 40.3 MB/s eta 0:00:00 Collecting click==8.1.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 34)) Downloading click-8.1.3-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 34.5 MB/s eta 0:00:00 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 34.5 MB/s eta 0:00:00 Collecting importlib-metadata==6.7.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 38)) Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB) Collecting mypy-extensions==1.0.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 42)) Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB) Collecting packaging==23.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 46)) Downloading packaging-23.1-py3-none-any.whl (48 kB) Collecting pathspec==0.11.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 50)) Downloading pathspec-0.11.1-py3-none-any.whl (29 kB) Collecting platformdirs==3.6.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 54)) Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB) Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB) Collecting ruff==0.0.272 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 58)) Downloading ruff-0.0.272-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB) Collecting tomli==2.0.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 77)) Downloading tomli-2.0.1-py3-none-any.whl (12 kB) Collecting typed-ast==1.5.4 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 81)) Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB) Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.7/877.7 kB 114.2 MB/s eta 0:00:00 Collecting typing-extensions==4.6.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 107)) Downloading typing_extensions-4.6.3-py3-none-any.whl (31 kB) Collecting zipp==3.15.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 114)) Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB) Installing collected packages: zipp, typing-extensions, typed-ast, tomli, ruff, platformdirs, pathspec, packaging, mypy-extensions, click, importlib-metadata, black Successfully installed black-23.3.0 click-8.1.3 importlib-metadata-6.7.0 mypy-extensions-1.0.0 packaging-23.1 pathspec-0.11.1 platformdirs-3.6.0 ruff-0.0.272 tomli-2.0.1 typed-ast-1.5.4 typing-extensions-4.6.3 zipp-3.15.0 some tidy checks failed Build completed unsuccessfully in 0:00:59 local time: Mon May 6 00:24:25 UTC 2024 network time: Mon, 06 May 2024 00:24:25 GMT ```
bors commented 1 week ago

:sunny: Try build successful - checks-actions Build commit: 15ee67784efd5d46670c56f52fd618a4a00771e5 (15ee67784efd5d46670c56f52fd618a4a00771e5)

rust-timer commented 1 week ago

Queued 15ee67784efd5d46670c56f52fd618a4a00771e5 with parent 9c9b568792ef20d8459c745345dd3e79b7c7fa8c, future comparison URL. There are currently 0 preceding artifacts in the queue. It will probably take at least ~1.2 hours until the benchmark run finishes.

rust-timer commented 1 week ago

Finished benchmarking commit (15ee67784efd5d46670c56f52fd618a4a00771e5): comparison URL.

Overall result: ❌✅ regressions and improvements - ACTION NEEDED

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please fix the regressions and do another perf run. If the next run shows neutral or positive results, the label will be automatically removed.

@bors rollup=never @rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.8% [0.2%, 2.9%] 169
Regressions ❌
(secondary)
0.9% [0.2%, 2.3%] 70
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.8% [-2.3%, -0.4%] 5
All ❌✅ (primary) 0.8% [0.2%, 2.9%] 169

Max RSS (memory usage)

Results This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment. | | mean | range | count | |:----------------------------------:|:-----:|:---------------:|:-----:| | Regressions ❌
(primary) | 1.8% | [1.8%, 1.8%] | 1 | | Regressions ❌
(secondary) | 3.0% | [2.6%, 3.8%] | 4 | | Improvements ✅
(primary) | -3.0% | [-7.1%, -1.1%] | 54 | | Improvements ✅
(secondary) | -8.2% | [-13.3%, -4.6%] | 22 | | All ❌✅ (primary) | -2.9% | [-7.1%, 1.8%] | 55 |

Cycles

Results This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment. | | mean | range | count | |:----------------------------------:|:----:|:------------:|:-----:| | Regressions ❌
(primary) | 1.2% | [0.8%, 2.1%] | 13 | | Regressions ❌
(secondary) | 2.4% | [1.4%, 3.2%] | 6 | | Improvements ✅
(primary) | - | - | 0 | | Improvements ✅
(secondary) | - | - | 0 | | All ❌✅ (primary) | 1.2% | [0.8%, 2.1%] | 13 |

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 676.55s -> 678.643s (0.31%) Artifact size: 315.72 MiB -> 316.01 MiB (0.09%)