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

fix(core): remove blocking to avoid deadlock for multi compiler #9587

Merged
merged 4 commits into from
Mar 11, 2025

Conversation

hardfist
Copy link
Contributor

@hardfist hardfist commented Mar 7, 2025

Summary

FutureResults will call blocking_in_place to support non 'static future parallel, but if there're multi compilers call it multi times, it will cause all tokio runtime working blocking and other spawned task can't be scheduled, which will cause deadlock.

Unfortunately there're no safe way to implement parallel future which is proved in https://tmandry.gitlab.io/blog/posts/2023-03-01-scoped-tasks/

so we need choose use unsafe code or sacrifice parallel(which means sacrifice performance), for us performance is important so I choose use unsafe code.

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).

Sorry, something went wrong.

@github-actions github-actions bot added team The issue/pr is created by the member of Rspack. release: bug fix release: bug related release(mr only) labels Mar 7, 2025
Copy link

netlify bot commented Mar 7, 2025

Deploy Preview for rspack canceled.

Name Link
🔨 Latest commit 7e2d818
🔍 Latest deploy log https://app.netlify.com/sites/rspack/deploys/67d00970d6c9dc00087bfc84

Copy link

codspeed-hq bot commented Mar 7, 2025

CodSpeed Performance Report

Merging #9587 will not alter performance

Comparing fix-deadlock (7e2d818) with main (9fdb06f)

🎉 Hooray! codspeed-node just leveled up to 4.0.0!

A heads-up, this is a breaking change and it might affect your current performance baseline a bit. But here's the exciting part - it's packed with new, cool features and promises improved result stability 🥳!
Curious about what's new? Visit our releases page to delve into all the awesome details about this new version.

Summary

✅ 8 untouched benchmarks

Copy link
Contributor

github-actions bot commented Mar 7, 2025

📝 Benchmark detail: Open

Name Base (2025-03-07 358200c) Current Change
10000_big_production-mode_disable-minimize + exec 36.2 s ± 409 ms 36.9 s ± 719 ms +1.84 %
10000_development-mode + exec 1.82 s ± 21 ms 1.74 s ± 64 ms -4.09 %
10000_development-mode_hmr + exec 710 ms ± 19 ms 693 ms ± 6.4 ms -2.39 %
10000_production-mode + exec 2.2 s ± 58 ms 2.15 s ± 87 ms -2.26 %
10000_production-mode_persistent-cold + exec 2.34 s ± 17 ms 2.3 s ± 131 ms -1.44 %
10000_production-mode_persistent-hot + exec 1.65 s ± 94 ms 1.58 s ± 35 ms -4.32 %
arco-pro_development-mode + exec 1.73 s ± 101 ms 1.76 s ± 121 ms +1.56 %
arco-pro_development-mode_hmr + exec 376 ms ± 1.4 ms 375 ms ± 3.2 ms -0.08 %
arco-pro_production-mode + exec 3.5 s ± 183 ms 3.47 s ± 130 ms -0.77 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.55 s ± 238 ms 3.51 s ± 218 ms -1.06 %
arco-pro_production-mode_persistent-cold + exec 3.63 s ± 314 ms 3.55 s ± 87 ms -2.13 %
arco-pro_production-mode_persistent-hot + exec 2.2 s ± 86 ms 2.31 s ± 98 ms +4.87 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.55 s ± 146 ms 3.5 s ± 105 ms -1.50 %
large-dyn-imports_development-mode + exec 2.02 s ± 28 ms 1.96 s ± 63 ms -3.16 %
large-dyn-imports_production-mode + exec 2.04 s ± 48 ms 2 s ± 64 ms -1.86 %
threejs_development-mode_10x + exec 1.49 s ± 26 ms 1.47 s ± 25 ms -1.29 %
threejs_development-mode_10x_hmr + exec 837 ms ± 18 ms 826 ms ± 23 ms -1.37 %
threejs_production-mode_10x + exec 5.02 s ± 85 ms 4.97 s ± 126 ms -0.96 %
threejs_production-mode_10x_persistent-cold + exec 5.13 s ± 434 ms 5.02 s ± 34 ms -2.28 %
threejs_production-mode_10x_persistent-hot + exec 4.41 s ± 371 ms 4.32 s ± 37 ms -2.01 %
10000_big_production-mode_disable-minimize + rss memory 9556 MiB ± 101 MiB 9408 MiB ± 240 MiB -1.55 %
10000_development-mode + rss memory 660 MiB ± 22.6 MiB 708 MiB ± 47.5 MiB +7.36 %
10000_development-mode_hmr + rss memory 1363 MiB ± 344 MiB 1417 MiB ± 261 MiB +3.93 %
10000_production-mode + rss memory 640 MiB ± 35.9 MiB 690 MiB ± 41.2 MiB +7.73 %
10000_production-mode_persistent-cold + rss memory 750 MiB ± 42.1 MiB 793 MiB ± 53.1 MiB +5.71 %
10000_production-mode_persistent-hot + rss memory 728 MiB ± 47.6 MiB 760 MiB ± 51.3 MiB +4.34 %
arco-pro_development-mode + rss memory 579 MiB ± 50.8 MiB 591 MiB ± 35.7 MiB +2.09 %
arco-pro_development-mode_hmr + rss memory 631 MiB ± 46.5 MiB 634 MiB ± 74.5 MiB +0.47 %
arco-pro_production-mode + rss memory 741 MiB ± 88.5 MiB 726 MiB ± 50.4 MiB -1.98 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 746 MiB ± 24 MiB 735 MiB ± 84.9 MiB -1.40 %
arco-pro_production-mode_persistent-cold + rss memory 817 MiB ± 79.8 MiB 810 MiB ± 54.6 MiB -0.81 %
arco-pro_production-mode_persistent-hot + rss memory 642 MiB ± 33 MiB 745 MiB ± 122 MiB +16.12 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 761 MiB ± 144 MiB 709 MiB ± 35.5 MiB -6.77 %
large-dyn-imports_development-mode + rss memory 677 MiB ± 5.66 MiB 692 MiB ± 16.7 MiB +2.11 %
large-dyn-imports_production-mode + rss memory 555 MiB ± 7.98 MiB 562 MiB ± 10.2 MiB +1.34 %
threejs_development-mode_10x + rss memory 606 MiB ± 9.48 MiB 634 MiB ± 26.7 MiB +4.65 %
threejs_development-mode_10x_hmr + rss memory 1029 MiB ± 242 MiB 786 MiB ± 82.7 MiB -23.62 %
threejs_production-mode_10x + rss memory 860 MiB ± 75.7 MiB 927 MiB ± 27.7 MiB +7.75 %
threejs_production-mode_10x_persistent-cold + rss memory 1001 MiB ± 55 MiB 1052 MiB ± 94.3 MiB +5.08 %
threejs_production-mode_10x_persistent-hot + rss memory 866 MiB ± 53.1 MiB 875 MiB ± 32.2 MiB +0.98 %

Copy link
Contributor

github-actions bot commented Mar 11, 2025

📝 Benchmark detail: Open

Name Base (2025-03-11 a110f48) Current Change
10000_big_production-mode_disable-minimize + exec 36.3 s ± 789 ms 36.8 s ± 884 ms +1.47 %
10000_development-mode + exec 1.81 s ± 17 ms 1.73 s ± 31 ms -4.34 %
10000_development-mode_hmr + exec 710 ms ± 19 ms 700 ms ± 16 ms -1.44 %
10000_production-mode + exec 2.2 s ± 53 ms 2.14 s ± 40 ms -2.89 %
10000_production-mode_persistent-cold + exec 2.37 s ± 184 ms 2.29 s ± 21 ms -3.34 %
10000_production-mode_persistent-hot + exec 1.62 s ± 30 ms 1.63 s ± 181 ms +0.70 %
arco-pro_development-mode + exec 1.76 s ± 130 ms 1.77 s ± 99 ms +0.81 %
arco-pro_development-mode_hmr + exec 376 ms ± 1.5 ms 377 ms ± 4 ms +0.10 %
arco-pro_production-mode + exec 3.55 s ± 183 ms 3.46 s ± 192 ms -2.44 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.59 s ± 233 ms 3.52 s ± 83 ms -2.07 %
arco-pro_production-mode_persistent-cold + exec 3.6 s ± 73 ms 3.54 s ± 119 ms -1.59 %
arco-pro_production-mode_persistent-hot + exec 2.2 s ± 141 ms 2.28 s ± 68 ms +3.72 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.54 s ± 144 ms 3.52 s ± 208 ms -0.61 %
large-dyn-imports_development-mode + exec 2.04 s ± 57 ms 1.97 s ± 52 ms -3.14 %
large-dyn-imports_production-mode + exec 2.06 s ± 21 ms 2.01 s ± 42 ms -2.07 %
threejs_development-mode_10x + exec 1.51 s ± 108 ms 1.47 s ± 22 ms -2.53 %
threejs_development-mode_10x_hmr + exec 824 ms ± 13 ms 827 ms ± 19 ms +0.29 %
threejs_production-mode_10x + exec 5.02 s ± 101 ms 4.99 s ± 61 ms -0.55 %
threejs_production-mode_10x_persistent-cold + exec 5.03 s ± 54 ms 4.99 s ± 91 ms -0.76 %
threejs_production-mode_10x_persistent-hot + exec 4.36 s ± 242 ms 4.32 s ± 51 ms -0.91 %
10000_big_production-mode_disable-minimize + rss memory 9454 MiB ± 176 MiB 9457 MiB ± 136 MiB +0.03 %
10000_development-mode + rss memory 657 MiB ± 9.64 MiB 705 MiB ± 19 MiB +7.30 %
10000_development-mode_hmr + rss memory 1316 MiB ± 520 MiB 1404 MiB ± 380 MiB +6.73 %
10000_production-mode + rss memory 634 MiB ± 48.7 MiB 672 MiB ± 20.6 MiB +6.11 %
10000_production-mode_persistent-cold + rss memory 736 MiB ± 53.4 MiB 794 MiB ± 49.9 MiB +7.84 %
10000_production-mode_persistent-hot + rss memory 732 MiB ± 39 MiB 747 MiB ± 39.6 MiB +1.99 %
arco-pro_development-mode + rss memory 573 MiB ± 52.1 MiB 569 MiB ± 28.9 MiB -0.66 %
arco-pro_development-mode_hmr + rss memory 596 MiB ± 56.4 MiB 627 MiB ± 53.5 MiB +5.12 %
arco-pro_production-mode + rss memory 743 MiB ± 78 MiB 735 MiB ± 95.6 MiB -1.07 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 721 MiB ± 70.4 MiB 718 MiB ± 39 MiB -0.40 %
arco-pro_production-mode_persistent-cold + rss memory 809 MiB ± 92.1 MiB 770 MiB ± 54 MiB -4.89 %
arco-pro_production-mode_persistent-hot + rss memory 585 MiB ± 56.3 MiB 716 MiB ± 90.2 MiB +22.45 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 740 MiB ± 97.4 MiB 711 MiB ± 43.2 MiB -3.98 %
large-dyn-imports_development-mode + rss memory 652 MiB ± 2.27 MiB 691 MiB ± 12.6 MiB +5.91 %
large-dyn-imports_production-mode + rss memory 527 MiB ± 2.8 MiB 560 MiB ± 13.7 MiB +6.10 %
threejs_development-mode_10x + rss memory 588 MiB ± 18.3 MiB 613 MiB ± 25.5 MiB +4.39 %
threejs_development-mode_10x_hmr + rss memory 1001 MiB ± 84.4 MiB 739 MiB ± 21 MiB -26.21 %
threejs_production-mode_10x + rss memory 888 MiB ± 78.2 MiB 913 MiB ± 51.9 MiB +2.81 %
threejs_production-mode_10x_persistent-cold + rss memory 992 MiB ± 52.1 MiB 1028 MiB ± 54.2 MiB +3.61 %
threejs_production-mode_10x_persistent-hot + rss memory 860 MiB ± 60.9 MiB 892 MiB ± 24 MiB +3.72 %

@hardfist hardfist requested a review from h-a-n-a March 11, 2025 07:51
Copy link
Contributor

github-actions bot commented Mar 11, 2025

📝 Benchmark detail: Open

task failure

@hardfist hardfist requested a review from jerrykingxyz as a code owner March 11, 2025 09:59
@hardfist hardfist enabled auto-merge (squash) March 11, 2025 10:28
@hardfist hardfist merged commit eea429a into main Mar 11, 2025
31 checks passed
@hardfist hardfist deleted the fix-deadlock branch March 11, 2025 10:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release: bug fix release: bug related release(mr only) team The issue/pr is created by the member of Rspack.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants