Skip to content

Skip heap profile sampling unless profiling - #65338

Open
Jake Bailey (jakebailey) wants to merge 1 commit into
microsoft:mainfrom
jakebailey:perf/mem-profile-rate
Open

Jake Bailey (jakebailey) wants to merge 1 commit into
microsoft:mainfrom
jakebailey:perf/mem-profile-rate

Conversation

@jakebailey

Copy link
Copy Markdown
Member

This will probably be barely anything, but, might as well try.

Go samples allocations for the heap profile by default, walking the
stack every 512 KiB or so allocated, even though the command line only
writes a memory profile when --pprofDir is passed. Turn sampling off for
command line runs and turn it back on when profiling begins.

The language server and API can take heap profiles on demand at any
time, so they keep sampling.
Copilot AI balanced review requested due to automatic review settings November 5, 2026 17:45
@github-project-automation github-project-automation Bot moved this to Not started in PR Backlog Nov 5, 2026
@jakebailey
Jake Bailey (jakebailey) marked this pull request as draft November 5, 2026 17:46
@typescript-automation typescript-automation Bot added the For Uncommitted Bug PR for untriaged, rejected, closed or missing bug label Nov 5, 2026
@jakebailey

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test this faster

@typescript-automation

typescript-automation Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

No active review issues remain for the CLI heap-sampling changes.

No open issues 🎉

What changed in this PR

This PR reduces heap-profile sampling overhead during normal compiler CLI execution while preserving profiling support.

Changes:

  • Disable heap sampling for CLI execution, leaving language server and API modes unchanged.
  • Save the original sampling rate and restore it when profiling begins.
File Description
tsc/​internal/​pprof/​pprof.go Adds a helper to disable heap sampling and restores the original rate in BeginProfiling.
tsc/​cmd/​tsc/​main.go Disables sampling after dispatching language server and API modes.

Review effort: Balanced

@jakebailey Jake Bailey (jakebailey) added the Domain: Performance Reports of unusually slow behavior label Nov 5, 2026
@typescript-automation

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=20
Symbols 88,466 88,466 ~ ~ ~ p=1.000 n=20
Types 79,607 79,607 ~ ~ ~ p=1.000 n=20
Memory Used 106,421k (± 0.03%) 106,417k (± 0.03%) ~ 106,329k 106,534k p=0.644 n=20
Memory Allocs 1,261,900 (± 0.01%) 1,261,964 (± 0.01%) ~ 1,261,536 1,262,412 p=0.402 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.022s (± 3.47%) 0.022s (± 3.04%) ~ 0.020s 0.025s p=0.287 n=20
Bind Time 0.009s (± 7.01%) 0.009s (± 5.49%) ~ 0.007s 0.011s p=0.967 n=20
Check Time 0.217s (± 1.38%) 0.217s (± 1.60%) ~ 0.207s 0.231s p=0.663 n=20
Emit Time 0.142s (± 1.98%) 0.143s (± 1.58%) ~ 0.135s 0.151s p=0.559 n=20
Total Time 0.394s (± 1.34%) 0.394s (± 1.38%) ~ 0.381s 0.416s p=0.931 n=20
angular-1 - native
Errors 63 63 ~ ~ ~ p=1.000 n=20
Symbols 756,637 756,637 ~ ~ ~ p=1.000 n=20
Types 549,451 549,451 ~ ~ ~ p=1.000 n=20
Memory Used 644,100k (± 0.02%) 644,137k (± 0.02%) ~ 643,614k 644,583k p=0.445 n=20
Memory Allocs 9,551,319 (± 0.13%) 9,539,320 (± 0.04%) ~ 9,531,904 9,565,103 p=0.445 n=20
Config Time 0.008s (± 2.73%) 0.008s (± 2.82%) ~ 0.008s 0.009s p=0.748 n=20
Parse Time 0.122s (± 3.06%) 0.117s (± 3.02%) ~ 0.105s 0.132s p=0.092 n=20
Bind Time 0.042s (±10.94%) 0.041s (±12.97%) ~ 0.034s 0.082s p=0.296 n=20
Check Time 0.627s (± 1.62%) 0.631s (± 1.96%) ~ 0.589s 0.682s p=0.857 n=20
Emit Time 0.396s (± 1.13%) 0.395s (± 1.67%) ~ 0.381s 0.443s p=0.297 n=20
Total Time 1.210s (± 1.00%) 1.207s (± 1.70%) ~ 1.152s 1.305s p=0.351 n=20
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 686,116 686,116 ~ ~ ~ p=1.000 n=20
Types 939,797 939,797 ~ ~ ~ p=1.000 n=20
Memory Used 475,967k (± 0.01%) 476,012k (± 0.01%) ~ 475,673k 476,196k p=0.208 n=20
Memory Allocs 12,059,069 (± 0.02%) 12,059,247 (± 0.02%) ~ 12,054,763 12,069,877 p=0.925 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.039s (± 3.35%) 0.040s (± 3.66%) ~ 0.035s 0.047s p=0.221 n=20
Bind Time 0.013s (±10.59%) 0.012s (± 9.91%) ~ 0.011s 0.020s p=0.132 n=20
Check Time 0.869s (± 1.17%) 0.844s (± 1.16%) -0.025s (- 2.83%) 0.806s 0.884s p=0.001 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.950s (± 1.11%) 0.924s (± 1.07%) -0.025s (- 2.66%) 0.883s 0.967s p=0.001 n=20
class-transformer - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 45,376 45,376 ~ ~ ~ p=1.000 n=20
Types 7,573 7,573 ~ ~ ~ p=1.000 n=20
Memory Used 27,756k (± 0.02%) 27,745k (± 0.03%) -11k (- 0.04%) 27,716k 27,766k p=0.045 n=20
Memory Allocs 248,433 (± 0.06%) 248,525 (± 0.08%) ~ 248,005 249,597 p=0.723 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.012s (± 3.33%) 0.011s (± 3.08%) ~ 0.009s 0.012s p=0.511 n=20
Bind Time 0.003s (±11.32%) 0.003s (±10.38%) ~ 0.002s 0.005s p=0.912 n=20
Check Time 0.008s (± 5.35%) 0.008s (± 7.08%) ~ 0.006s 0.009s p=0.594 n=20
Emit Time 0.008s (± 7.47%) 0.007s (± 7.76%) ~ 0.006s 0.010s p=0.598 n=20
Total Time 0.031s (± 1.87%) 0.031s (± 1.81%) ~ 0.027s 0.032s p=0.071 n=20
effect - native
Errors 12 12 ~ ~ ~ p=1.000 n=20
Symbols 1,235,134 1,235,134 ~ ~ ~ p=1.000 n=20
Types 893,436 893,436 ~ ~ ~ p=1.000 n=20
Memory Used 941,647k (± 0.02%) 941,381k (± 0.02%) -266k (- 0.03%) 940,540k 941,957k p=0.043 n=20
Memory Allocs 12,626,291 (± 0.02%) 12,624,127 (± 0.04%) ~ 12,610,318 12,652,655 p=0.068 n=20
Config Time 0.002s 0.002s (± 7.95%) ~ 0.002s 0.003s p=0.231 n=20
Parse Time 0.151s (± 1.45%) 0.150s (± 3.87%) -0.001s (- 0.50%) 0.140s 0.191s p=0.048 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.883s (± 1.43%) 0.870s (± 0.76%) ~ 0.846s 0.900s p=0.103 n=20
Emit Time 0.492s (± 1.20%) 0.487s (± 2.13%) ~ 0.414s 0.519s p=0.417 n=20
Total Time 1.623s (± 0.65%) 1.604s (± 0.84%) -0.019s (- 1.17%) 1.531s 1.655s p=0.024 n=20
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=20
Symbols 3,782,394 3,782,394 ~ ~ ~ p=1.000 n=20
Types 1,355,778 1,355,778 ~ ~ ~ p=1.000 n=20
Memory Used 1,679,950k (± 0.07%) 1,679,016k (± 0.07%) ~ 1,674,375k 1,682,325k p=0.231 n=20
Memory Allocs 25,743,322 (± 0.13%) 25,740,012 (± 0.15%) ~ 25,639,092 25,988,515 p=0.698 n=20
Config Time 0.008s 0.008s ~ ~ ~ p=1.000 n=20
Parse Time 0.279s (± 1.89%) 0.275s (± 2.14%) ~ 0.246s 0.308s p=0.084 n=20
Bind Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Check Time 2.854s (± 0.58%) 2.830s (± 2.69%) -0.023s (- 0.82%) 2.751s 3.518s p=0.000 n=20
Emit Time 0.244s (± 2.18%) 0.240s (± 1.34%) ~ 0.227s 0.257s p=0.081 n=20
Total Time 3.866s (± 0.50%) 3.832s (± 2.04%) -0.034s (- 0.88%) 3.716s 4.532s p=0.000 n=20
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=20
Symbols 4,793,266 4,793,266 ~ ~ ~ p=1.000 n=20
Types 2,607,066 2,607,066 ~ ~ ~ p=1.000 n=20
Memory Used 2,799,207k (± 0.06%) 2,799,600k (± 0.04%) ~ 2,796,669k 2,804,002k p=0.414 n=20
Memory Allocs 75,034,934 (± 0.33%) 75,102,682 (± 0.42%) ~ 74,672,312 77,630,671 p=0.841 n=20
Config Time 0.025s (± 1.13%) 0.024s (± 1.06%) -0.000s (- 1.42%) 0.024s 0.026s p=0.046 n=20
Parse Time 0.472s (± 5.24%) 0.469s (± 4.75%) ~ 0.419s 0.593s p=0.857 n=20
Bind Time 0.148s (± 9.38%) 0.149s (±10.20%) ~ 0.113s 0.233s p=0.995 n=20
Check Time 6.459s (± 0.60%) 6.382s (± 0.59%) -0.077s (- 1.19%) 6.284s 6.598s p=0.004 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 7.158s (± 0.78%) 7.081s (± 0.53%) -0.077s (- 1.07%) 6.962s 7.290s p=0.018 n=20
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,883,060 1,883,060 ~ ~ ~ p=1.000 n=20
Types 1,158,093 1,158,093 ~ ~ ~ p=1.000 n=20
Memory Used 952,639k (± 0.02%) 952,828k (± 0.01%) ~ 952,200k 953,338k p=0.064 n=20
Memory Allocs 13,504,885 (± 0.20%) 13,528,168 (± 0.26%) ~ 13,445,462 13,776,135 p=0.289 n=20
Config Time 0.007s (± 3.00%) 0.007s (± 2.86%) ~ 0.007s 0.008s p=1.000 n=20
Parse Time 0.156s (± 3.21%) 0.155s (± 3.00%) ~ 0.143s 0.180s p=0.692 n=20
Bind Time 0.041s (± 8.98%) 0.040s (± 8.28%) ~ 0.034s 0.065s p=0.670 n=20
Check Time 1.384s (± 1.27%) 1.360s (± 1.20%) -0.024s (- 1.73%) 1.307s 1.440s p=0.019 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.608s (± 1.26%) 1.580s (± 1.04%) -0.028s (- 1.75%) 1.535s 1.660s p=0.030 n=20
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,184,972 1,184,972 ~ ~ ~ p=1.000 n=20
Types 438,823 438,823 ~ ~ ~ p=1.000 n=20
Memory Used 1,165,599k (± 0.41%) 1,162,346k (± 0.27%) ~ 1,148,346k 1,180,262k p=0.445 n=20
Memory Allocs 47,689,149 (± 0.08%) 47,579,256 (± 0.10%) -109,893 (- 0.23%) 47,378,208 47,771,734 p=0.001 n=20
Config Time 0.001s (±26.29%) 0.002s (±29.41%) ~ 0.000s 0.004s p=0.564 n=20
Parse Time 0.147s (± 1.89%) 0.141s (± 1.30%) 🟩-0.005s (- 3.58%) 0.135s 0.148s p=0.002 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.812s (± 0.87%) 0.796s (± 1.11%) -0.016s (- 1.99%) 0.771s 0.848s p=0.002 n=20
Emit Time 0.150s (± 3.58%) 0.145s (± 2.27%) ~ 0.136s 0.161s p=0.068 n=20
Total Time 9.628s (± 1.10%) 9.393s (± 0.73%) -0.235s (- 2.44%) 9.114s 9.660s p=0.000 n=20
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 263,481 263,481 ~ ~ ~ p=1.000 n=20
Types 196,103 196,103 ~ ~ ~ p=1.000 n=20
Memory Used 221,527k (± 0.02%) 221,495k (± 0.02%) ~ 221,323k 221,727k p=0.231 n=20
Memory Allocs 2,388,617 (± 0.02%) 2,388,718 (± 0.01%) ~ 2,387,098 2,389,872 p=0.602 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.050s (± 3.90%) 0.049s (± 2.26%) ~ 0.044s 0.053s p=0.549 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.363s (± 0.65%) 0.361s (± 0.64%) ~ 0.354s 0.371s p=0.198 n=20
Emit Time 0.048s (± 5.02%) 0.046s (± 3.76%) ~ 0.042s 0.052s p=0.199 n=20
Total Time 0.489s (± 0.54%) 0.482s (± 0.55%) -0.007s (- 1.51%) 0.472s 0.491s p=0.000 n=20
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 4,349,937 4,349,937 ~ ~ ~ p=1.000 n=20
Types 3,042,465 3,042,465 ~ ~ ~ p=1.000 n=20
Memory Used 2,394,943k (± 0.03%) 2,394,924k (± 0.02%) ~ 2,393,170k 2,397,242k p=0.583 n=20
Memory Allocs 37,144,283 (± 0.11%) 37,149,958 (± 0.08%) ~ 37,079,809 37,327,414 p=0.478 n=20
Config Time 0.003s 0.003s ~ ~ ~ p=1.000 n=20
Parse Time 0.251s (± 2.73%) 0.251s (± 2.76%) ~ 0.220s 0.288s p=0.815 n=20
Bind Time 0.101s (±11.94%) 0.087s (± 9.37%) 🟩-0.014s (-13.58%) 0.074s 0.132s p=0.011 n=20
Check Time 5.922s (± 0.53%) 5.840s (± 0.65%) -0.081s (- 1.38%) 5.694s 6.102s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 6.288s (± 0.53%) 6.193s (± 0.64%) -0.095s (- 1.51%) 6.043s 6.454s p=0.000 n=20
tanstack-router - native
Errors 1 1 ~ ~ ~ p=1.000 n=20
Symbols 570,149 570,149 ~ ~ ~ p=1.000 n=20
Types 396,551 396,551 ~ ~ ~ p=1.000 n=20
Memory Used 315,310k (± 0.02%) 315,346k (± 0.01%) ~ 315,124k 315,511k p=0.588 n=20
Memory Allocs 4,331,149 (± 0.16%) 4,335,398 (± 0.19%) ~ 4,312,357 4,375,478 p=0.529 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.039s (± 4.33%) 0.039s (± 4.46%) ~ 0.031s 0.046s p=0.888 n=20
Bind Time 0.012s (±10.24%) 0.012s (±11.75%) ~ 0.010s 0.021s p=0.112 n=20
Check Time 0.460s (± 1.04%) 0.453s (± 0.89%) -0.008s (- 1.66%) 0.440s 0.472s p=0.025 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.530s (± 0.94%) 0.523s (± 0.85%) -0.007s (- 1.38%) 0.506s 0.539s p=0.030 n=20
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=20
Symbols 231,607 231,607 ~ ~ ~ p=1.000 n=20
Types 181,163 181,163 ~ ~ ~ p=1.000 n=20
Memory Used 190,841k (± 0.02%) 190,860k (± 0.02%) ~ 190,759k 191,008k p=0.551 n=20
Memory Allocs 1,310,092 (± 0.02%) 1,309,904 (± 0.02%) ~ 1,308,513 1,311,343 p=0.402 n=20
Config Time 0.000s 0.000s (±208.60%) ~ 0.000s 0.001s p=1.000 n=20
Parse Time 0.049s (± 3.54%) 0.048s (± 6.87%) ~ 0.041s 0.074s p=0.248 n=20
Bind Time 0.023s (± 5.68%) 0.024s (± 6.91%) ~ 0.018s 0.030s p=0.090 n=20
Check Time 0.339s (± 2.43%) 0.340s (± 3.27%) ~ 0.314s 0.430s p=0.899 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.418s (± 2.14%) 0.419s (± 2.70%) ~ 0.392s 0.507s p=0.899 n=20
vscode - native
Errors 11 11 ~ ~ ~ p=1.000 n=20
Symbols 7,866,033 7,866,033 ~ ~ ~ p=1.000 n=20
Types 4,606,120 4,606,120 ~ ~ ~ p=1.000 n=20
Memory Used 5,285,624k (± 0.01%) 5,285,881k (± 0.01%) ~ 5,283,300k 5,289,429k p=0.698 n=20
Memory Allocs 59,221,556 (± 0.01%) 59,230,395 (± 0.02%) ~ 59,205,706 59,316,721 p=0.659 n=20
Config Time 0.034s (± 0.94%) 0.033s (± 0.43%) -0.001s (- 1.49%) 0.033s 0.034s p=0.010 n=20
Parse Time 0.907s (± 1.16%) 0.896s (± 1.02%) ~ 0.855s 0.940s p=0.250 n=20
Bind Time 0.295s (± 1.73%) 0.286s (± 1.30%) -0.008s (- 2.83%) 0.280s 0.316s p=0.000 n=20
Check Time 7.174s (± 0.56%) 7.087s (± 0.37%) -0.087s (- 1.22%) 6.987s 7.194s p=0.000 n=20
Emit Time 2.081s (± 5.06%) 2.061s (± 4.69%) -0.020s (- 0.94%) 1.944s 2.714s p=0.018 n=20
Total Time 10.548s (± 0.81%) 10.422s (± 0.86%) -0.126s (- 1.19%) 10.253s 11.005s p=0.000 n=20
webpack - native
Errors 615 615 ~ ~ ~ p=1.000 n=20
Symbols 887,312 887,312 ~ ~ ~ p=1.000 n=20
Types 626,023 626,023 ~ ~ ~ p=1.000 n=20
Memory Used 647,537k (± 0.02%) 647,529k (± 0.02%) ~ 647,003k 648,005k p=0.841 n=20
Memory Allocs 6,068,449 (± 0.06%) 6,066,458 (± 0.05%) ~ 6,057,166 6,081,404 p=0.429 n=20
Config Time 0.004s 0.004s ~ ~ ~ p=1.000 n=20
Parse Time 0.121s (± 1.80%) 0.122s (± 1.73%) ~ 0.114s 0.132s p=0.577 n=20
Bind Time 0.041s (± 9.96%) 0.039s (± 8.04%) ~ 0.033s 0.055s p=0.216 n=20
Check Time 1.020s (± 1.20%) 1.012s (± 1.12%) ~ 0.972s 1.057s p=0.387 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.208s (± 1.02%) 1.200s (± 1.09%) ~ 1.163s 1.251s p=0.344 n=20
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 644,330 644,330 ~ ~ ~ p=1.000 n=20
Types 392,175 392,175 ~ ~ ~ p=1.000 n=20
Memory Used 347,007k (± 0.03%) 347,033k (± 0.03%) ~ 346,723k 347,471k p=0.820 n=20
Memory Allocs 4,000,995 (± 0.08%) 4,003,907 (± 0.13%) ~ 3,984,904 4,039,848 p=0.301 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.062s (± 3.36%) 0.062s (± 3.53%) ~ 0.057s 0.074s p=0.712 n=20
Bind Time 0.021s (±11.37%) 0.019s (± 8.53%) ~ 0.016s 0.027s p=0.277 n=20
Check Time 0.427s (± 0.99%) 0.416s (± 0.80%) -0.011s (- 2.51%) 0.404s 0.435s p=0.000 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.516s (± 1.04%) 0.504s (± 1.02%) -0.012s (- 2.30%) 0.483s 0.524s p=0.003 n=20
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • class-transformer - native
  • effect - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • tanstack-router - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

Developer Information:

Download Benchmarks

@jakebailey
Jake Bailey (jakebailey) marked this pull request as ready for review November 5, 2026 18:48
@jakebailey

Copy link
Copy Markdown
Member Author

Okay, it's seemingly a little bit

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Author: Team Domain: Performance Reports of unusually slow behavior For Uncommitted Bug PR for untriaged, rejected, closed or missing bug

Projects

Status: Not started

Development

Successfully merging this pull request may close these issues.

2 participants