Skip to content

Commit

Permalink
perf(es): Reduce allocations for dynamic stacks (#9133)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Jul 5, 2024
1 parent 9372030 commit 648830a
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ env:
DIFF: 0
# For faster CI
RUST_LOG: "off"
# https://github.com/swc-project/swc/pull/3742
RUST_MIN_STACK: 4194304
# https://github.com/actions/setup-node/issues/899#issuecomment-1819151595
SKIP_YARN_COREPACK_CHECK: 1

Expand Down
16 changes: 7 additions & 9 deletions crates/swc_ecma_parser/src/parser/stmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ impl<'a, I: Tokens> Parser<I> {

let cons = {
// Prevent stack overflow
crate::maybe_grow(512 * 1024, 2 * 1024 * 1024, || {
crate::maybe_grow(256 * 1024, 1024 * 1024, || {
// Annex B
if !self.ctx().strict && is!(self, "function") {
// TODO: report error?
Expand Down Expand Up @@ -551,15 +551,13 @@ impl<'a, I: Tokens> Parser<I> {
}

if !is!(self, "if") {
// As we eat `else` above, we need to parse statement once.
let last = crate::maybe_grow(512 * 1024, 2 * 1024 * 1024, || {
let ctx = Context {
ignore_else_clause: false,
..self.ctx()
};
let ctx = Context {
ignore_else_clause: false,
..self.ctx()
};

self.with_ctx(ctx).parse_stmt(false)
})?;
// As we eat `else` above, we need to parse statement once.
let last = self.with_ctx(ctx).parse_stmt(false)?;
break Some(last);
}

Expand Down
8 changes: 7 additions & 1 deletion crates/swc_ecma_utils/src/stack_size.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,11 @@ pub fn maybe_grow<R, F: FnOnce() -> R>(red_zone: usize, stack_size: usize, callb
///
/// `maybe_grow` with default values.
pub fn maybe_grow_default<R, F: FnOnce() -> R>(callback: F) -> R {
maybe_grow(4 * 1024, 16 * 1024, callback)
let (red_zone, stack_size) = if cfg!(target_os = "linux") {
(4 * 1024, 16 * 1024)
} else {
(1024, 4 * 1024)
};

maybe_grow(red_zone, stack_size, callback)
}
7 changes: 6 additions & 1 deletion xtask/src/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ pub(super) struct BenchCmd {
#[clap(long)]
debug: bool,

/// Template to use while instrumenting
#[clap(short = 't')]
template: Option<String>,

#[clap(long)]
no_lib: bool,

Expand Down Expand Up @@ -50,7 +54,8 @@ impl BenchCmd {
// ddt profile instruments cargo -t time
let mut cmd = Command::new("ddt");
cmd.arg("profile").arg("instruments").arg("cargo");
cmd.arg("-t").arg("time");
cmd.arg("-t")
.arg(self.template.as_deref().unwrap_or("time"));

if !self.debug {
cmd.arg("--release");
Expand Down

1 comment on commit 648830a

@github-actions
Copy link

Choose a reason for hiding this comment

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

Benchmark

Benchmark suite Current: 648830a Previous: 42b4caf Ratio
es/full/bugs-1 273458 ns/iter (± 2515) 274496 ns/iter (± 2666) 1.00
es/full/minify/libraries/antd 1770859708 ns/iter (± 77956683) 1817395568 ns/iter (± 53548023) 0.97
es/full/minify/libraries/d3 346352491 ns/iter (± 5946405) 343266882 ns/iter (± 6273328) 1.01
es/full/minify/libraries/echarts 1470229933 ns/iter (± 41431908) 1565421886 ns/iter (± 33029260) 0.94
es/full/minify/libraries/jquery 101841081 ns/iter (± 140626) 103758849 ns/iter (± 204664) 0.98
es/full/minify/libraries/lodash 112930325 ns/iter (± 141754) 114874487 ns/iter (± 518618) 0.98
es/full/minify/libraries/moment 59058699 ns/iter (± 66670) 60093957 ns/iter (± 202499) 0.98
es/full/minify/libraries/react 18262325 ns/iter (± 44354) 18474274 ns/iter (± 98496) 0.99
es/full/minify/libraries/terser 270216193 ns/iter (± 1309033) 296141760 ns/iter (± 4047646) 0.91
es/full/minify/libraries/three 457866709 ns/iter (± 12016419) 543450972 ns/iter (± 15636503) 0.84
es/full/minify/libraries/typescript 3247242918 ns/iter (± 53803273) 3456995996 ns/iter (± 52274956) 0.94
es/full/minify/libraries/victory 729492702 ns/iter (± 27224813) 892735037 ns/iter (± 26511136) 0.82
es/full/minify/libraries/vue 143797838 ns/iter (± 157638) 150401165 ns/iter (± 1376340) 0.96
es/full/codegen/es3 58538 ns/iter (± 292) 59717 ns/iter (± 261) 0.98
es/full/codegen/es5 58416 ns/iter (± 318) 59326 ns/iter (± 830) 0.98
es/full/codegen/es2015 58247 ns/iter (± 381) 59477 ns/iter (± 312) 0.98
es/full/codegen/es2016 58363 ns/iter (± 256) 59424 ns/iter (± 83) 0.98
es/full/codegen/es2017 58445 ns/iter (± 288) 59253 ns/iter (± 156) 0.99
es/full/codegen/es2018 58336 ns/iter (± 611) 59519 ns/iter (± 221) 0.98
es/full/codegen/es2019 58226 ns/iter (± 316) 59420 ns/iter (± 179) 0.98
es/full/codegen/es2020 58249 ns/iter (± 136) 59405 ns/iter (± 252) 0.98
es/full/all/es3 163525596 ns/iter (± 818499) 161834659 ns/iter (± 468828) 1.01
es/full/all/es5 156307600 ns/iter (± 583753) 156428213 ns/iter (± 1399639) 1.00
es/full/all/es2015 115618105 ns/iter (± 1226515) 115449284 ns/iter (± 548840) 1.00
es/full/all/es2016 114498114 ns/iter (± 530003) 114220407 ns/iter (± 571007) 1.00
es/full/all/es2017 113641086 ns/iter (± 743295) 113185760 ns/iter (± 662036) 1.00
es/full/all/es2018 111617061 ns/iter (± 597848) 111658966 ns/iter (± 1208878) 1.00
es/full/all/es2019 110685694 ns/iter (± 412248) 111102001 ns/iter (± 580054) 1.00
es/full/all/es2020 106991238 ns/iter (± 1038597) 106875315 ns/iter (± 828383) 1.00
es/full/parser 450234 ns/iter (± 2967) 460211 ns/iter (± 2610) 0.98
es/full/base/fixer 14972 ns/iter (± 48) 16517 ns/iter (± 219) 0.91
es/full/base/resolver_and_hygiene 79622 ns/iter (± 406) 79013 ns/iter (± 240) 1.01
serialization of serde 278 ns/iter (± 9) 277 ns/iter (± 6) 1.00
css/minify/libraries/bootstrap 22163497 ns/iter (± 95103) 21767702 ns/iter (± 138062) 1.02
css/visitor/compare/clone 1363146 ns/iter (± 18606) 1361524 ns/iter (± 8698) 1.00
css/visitor/compare/visit_mut_span 1484304 ns/iter (± 5371) 1469549 ns/iter (± 6478) 1.01
css/visitor/compare/visit_mut_span_panic 1501762 ns/iter (± 33465) 1493003 ns/iter (± 18089) 1.01
css/visitor/compare/fold_span 1994548 ns/iter (± 6796) 1987588 ns/iter (± 3948) 1.00
css/visitor/compare/fold_span_panic 2124181 ns/iter (± 3522) 2141664 ns/iter (± 8358) 0.99
css/lexer/bootstrap_5_1_3 3455936 ns/iter (± 42346) 3507476 ns/iter (± 26327) 0.99
css/lexer/foundation_6_7_4 2807454 ns/iter (± 4172) 2819803 ns/iter (± 1841) 1.00
css/lexer/tailwind_3_1_1 539519 ns/iter (± 399) 538607 ns/iter (± 478) 1.00
css/parser/bootstrap_5_1_3 16512698 ns/iter (± 162154) 16190476 ns/iter (± 29830) 1.02
css/parser/foundation_6_7_4 13185028 ns/iter (± 19281) 13147701 ns/iter (± 26026) 1.00
css/parser/tailwind_3_1_1 2589731 ns/iter (± 4003) 2621664 ns/iter (± 4163) 0.99
es/codegen/colors 713407 ns/iter (± 388773) 728708 ns/iter (± 398732) 0.98
es/codegen/large 3071203 ns/iter (± 1595862) 2897984 ns/iter (± 1586581) 1.06
es/codegen/with-parser/colors 40561 ns/iter (± 318) 43565 ns/iter (± 744) 0.93
es/codegen/with-parser/large 449886 ns/iter (± 1661) 482209 ns/iter (± 2461) 0.93
es/minify/libraries/antd 1434271070 ns/iter (± 83861289) 1459734509 ns/iter (± 17159249) 0.98
es/minify/libraries/d3 281041364 ns/iter (± 9256937) 287316736 ns/iter (± 3113721) 0.98
es/minify/libraries/echarts 1170520197 ns/iter (± 6345398) 1227637900 ns/iter (± 13746611) 0.95
es/minify/libraries/jquery 82085767 ns/iter (± 520186) 82904584 ns/iter (± 106232) 0.99
es/minify/libraries/lodash 103780810 ns/iter (± 434544) 105344694 ns/iter (± 319628) 0.99
es/minify/libraries/moment 47878339 ns/iter (± 202603) 48529817 ns/iter (± 102175) 0.99
es/minify/libraries/react 16125402 ns/iter (± 19475) 16314144 ns/iter (± 18968) 0.99
es/minify/libraries/terser 217321034 ns/iter (± 1632066) 225803151 ns/iter (± 1559947) 0.96
es/minify/libraries/three 367226995 ns/iter (± 982198) 378679907 ns/iter (± 2849302) 0.97
es/minify/libraries/typescript 2727367081 ns/iter (± 11999405) 2804617497 ns/iter (± 19473258) 0.97
es/minify/libraries/victory 580700254 ns/iter (± 2479238) 605066641 ns/iter (± 9196189) 0.96
es/minify/libraries/vue 120341606 ns/iter (± 245584) 122396893 ns/iter (± 683329) 0.98
es/visitor/compare/clone 1700813 ns/iter (± 7138) 1729107 ns/iter (± 4952) 0.98
es/visitor/compare/visit_mut_span 2047491 ns/iter (± 4991) 2076432 ns/iter (± 25678) 0.99
es/visitor/compare/visit_mut_span_panic 2050167 ns/iter (± 5524) 2061056 ns/iter (± 48254) 0.99
es/visitor/compare/fold_span 2743846 ns/iter (± 21522) 2789331 ns/iter (± 8331) 0.98
es/visitor/compare/fold_span_panic 2801700 ns/iter (± 9501) 2807808 ns/iter (± 3833) 1.00
es/lexer/colors 9874 ns/iter (± 59) 9887 ns/iter (± 78) 1.00
es/lexer/angular 5141017 ns/iter (± 25059) 5214886 ns/iter (± 10176) 0.99
es/lexer/backbone 650723 ns/iter (± 5545) 668400 ns/iter (± 7242) 0.97
es/lexer/jquery 3656106 ns/iter (± 42593) 3510104 ns/iter (± 6613) 1.04
es/lexer/jquery mobile 5513101 ns/iter (± 15240) 5299855 ns/iter (± 77700) 1.04
es/lexer/mootools 2920670 ns/iter (± 21412) 2858150 ns/iter (± 3629) 1.02
es/lexer/underscore 530220 ns/iter (± 1126) 528124 ns/iter (± 774) 1.00
es/lexer/three 15995785 ns/iter (± 23201) 15992778 ns/iter (± 66921) 1.00
es/lexer/yui 2954828 ns/iter (± 11721) 3062752 ns/iter (± 27159) 0.96
es/lexer/cal-com 13442651 ns/iter (± 96296) 13525063 ns/iter (± 36629) 0.99
es/lexer/typescript 91792534 ns/iter (± 357915) 93395779 ns/iter (± 962331) 0.98
es/parser/colors 24019 ns/iter (± 94) 23688 ns/iter (± 96) 1.01
es/parser/angular 12816522 ns/iter (± 64147) 13505085 ns/iter (± 283886) 0.95
es/parser/backbone 1828680 ns/iter (± 6877) 1818494 ns/iter (± 9254) 1.01
es/parser/jquery 10093974 ns/iter (± 56358) 10182993 ns/iter (± 157712) 0.99
es/parser/jquery mobile 15283760 ns/iter (± 89692) 15579525 ns/iter (± 162930) 0.98
es/parser/mootools 7886228 ns/iter (± 18426) 7834130 ns/iter (± 27134) 1.01
es/parser/underscore 1595070 ns/iter (± 5893) 1589127 ns/iter (± 4167) 1.00
es/parser/three 44907312 ns/iter (± 363261) 45553019 ns/iter (± 291109) 0.99
es/parser/yui 7541745 ns/iter (± 38663) 7480586 ns/iter (± 76102) 1.01
es/parser/cal-com 40590071 ns/iter (± 293202) 41938084 ns/iter (± 429465) 0.97
es/parser/typescript 269537275 ns/iter (± 516075) 274252923 ns/iter (± 1230458) 0.98
es/preset-env/usage/builtin_type 135657 ns/iter (± 33889) 136937 ns/iter (± 33922) 0.99
es/preset-env/usage/property 16420 ns/iter (± 148) 17449 ns/iter (± 133) 0.94
es/resolver/typescript 103485237 ns/iter (± 2498633) 100510044 ns/iter (± 2281661) 1.03
es/fixer/typescript 82595442 ns/iter (± 2584173) 82583395 ns/iter (± 2112319) 1.00
es/hygiene/typescript 191377278 ns/iter (± 4792431) 187589099 ns/iter (± 2954928) 1.02
es/resolver_with_hygiene/typescript 316694111 ns/iter (± 4410263) 306891032 ns/iter (± 2298298) 1.03
es/visitor/base-perf/module_clone 56511 ns/iter (± 2151) 56686 ns/iter (± 1542) 1.00
es/visitor/base-perf/fold_empty 59598 ns/iter (± 949) 59797 ns/iter (± 285) 1.00
es/visitor/base-perf/fold_noop_impl_all 59965 ns/iter (± 1545) 59774 ns/iter (± 1973) 1.00
es/visitor/base-perf/fold_noop_impl_vec 59626 ns/iter (± 918) 60319 ns/iter (± 1503) 0.99
es/visitor/base-perf/boxing_boxed_clone 60 ns/iter (± 0) 60 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 47 ns/iter (± 0) 47 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 105 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 81 ns/iter (± 0) 80 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 2670 ns/iter (± 34) 2617 ns/iter (± 13) 1.02
es/base/parallel/resolver/typescript 2530510942 ns/iter (± 105358930) 2664808534 ns/iter (± 120201890) 0.95
es/base/parallel/hygiene/typescript 3340294291 ns/iter (± 39637267) 3270059232 ns/iter (± 27350423) 1.02
babelify-only 495439 ns/iter (± 2797) 490835 ns/iter (± 5791) 1.01
parse_and_babelify_angular 42252347 ns/iter (± 793116) 44521143 ns/iter (± 560966) 0.95
parse_and_babelify_backbone 4422637 ns/iter (± 164383) 4381091 ns/iter (± 238383) 1.01
parse_and_babelify_jquery 28142288 ns/iter (± 220807) 29047787 ns/iter (± 261911) 0.97
parse_and_babelify_jquery_mobile 48018438 ns/iter (± 865593) 50739894 ns/iter (± 703478) 0.95
parse_and_babelify_mootools 25219988 ns/iter (± 134165) 26222996 ns/iter (± 321868) 0.96
parse_and_babelify_underscore 3680344 ns/iter (± 29133) 3685228 ns/iter (± 15585) 1.00
parse_and_babelify_yui 23501594 ns/iter (± 590277) 24335300 ns/iter (± 343606) 0.97
html/minify/document/css_spec 45105331 ns/iter (± 136782) 45776146 ns/iter (± 146366) 0.99
html/minify/document/github 18019303 ns/iter (± 46760) 18423584 ns/iter (± 237759) 0.98
html/minify/document/stackoverflow 16497988 ns/iter (± 755320) 16525991 ns/iter (± 498895) 1.00
html/minify/document_fragment/css_spec 44352982 ns/iter (± 239301) 45100293 ns/iter (± 172401) 0.98
html/minify/document_fragment/github 17710953 ns/iter (± 56113) 18212283 ns/iter (± 30485) 0.97
html/minify/document_fragment/stackoverflow 16154035 ns/iter (± 30184) 16465736 ns/iter (± 382198) 0.98
html/document/visitor/compare/clone 166566 ns/iter (± 2426) 167919 ns/iter (± 2144) 0.99
html/document/visitor/compare/visit_mut_span 180689 ns/iter (± 1500) 183664 ns/iter (± 730) 0.98
html/document/visitor/compare/visit_mut_span_panic 184940 ns/iter (± 4728) 187966 ns/iter (± 1564) 0.98
html/document/visitor/compare/fold_span 229346 ns/iter (± 1390) 230315 ns/iter (± 1580) 1.00
html/document/visitor/compare/fold_span_panic 281340 ns/iter (± 1562) 282410 ns/iter (± 1498) 1.00
html/document_fragment/visitor/compare/clone 166450 ns/iter (± 1582) 167960 ns/iter (± 2355) 0.99
html/document_fragment/visitor/compare/visit_mut_span 182955 ns/iter (± 4262) 182420 ns/iter (± 1151) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 188707 ns/iter (± 806) 187486 ns/iter (± 851) 1.01
html/document_fragment/visitor/compare/fold_span 229735 ns/iter (± 1339) 229893 ns/iter (± 486) 1.00
html/document_fragment/visitor/compare/fold_span_panic 280458 ns/iter (± 1687) 280291 ns/iter (± 2691) 1.00
html/lexer/css_2021_spec 12901617 ns/iter (± 24218) 12885015 ns/iter (± 86871) 1.00
html/lexer/github_com_17_05_2022 4978719 ns/iter (± 11414) 4953146 ns/iter (± 21076) 1.01
html/lexer/stackoverflow_com_17_05_2022 4745049 ns/iter (± 14318) 4717467 ns/iter (± 49934) 1.01
html/parser/parser_document/css_2021_spec 26031057 ns/iter (± 152767) 25410398 ns/iter (± 406890) 1.02
html/parser/parser_document/github_com_17_05_2022 8628515 ns/iter (± 32437) 8482884 ns/iter (± 297778) 1.02
html/parser/parser_document/stackoverflow_com_17_05_2022 7626536 ns/iter (± 24859) 7435318 ns/iter (± 9841) 1.03
html/parser/parser_document_fragment/css_2021_spec 25501225 ns/iter (± 226725) 25135158 ns/iter (± 134654) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8467896 ns/iter (± 40022) 8420023 ns/iter (± 16549) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7406890 ns/iter (± 14359) 7419514 ns/iter (± 26153) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.