Skip to content

Turbopack trace: report total system memory#92428

Open
andrewimm wants to merge 2 commits intocanaryfrom
imm/trace-metadata2
Open

Turbopack trace: report total system memory#92428
andrewimm wants to merge 2 commits intocanaryfrom
imm/trace-metadata2

Conversation

@andrewimm
Copy link
Copy Markdown
Contributor

Stacked on top of #92427

Y'all can push back on this if it's too intrusive, but I think it'd be useful to know total system memory in the trace for debugging.
We already have libc as a nested dep in plenty of other crates, so it shouldn't regress build time. cargo tree shows that 0.2.174 is the version used by everything else in our deps tree.

On macOS, use sysctl to fetch system memory
On Linux, use procfs
On Windows, use GlobalMemoryStatusEx

All of these callsites could be extended to fetch memory pressure / swap usage as well, but those aren't necessarily useful in the initial trace because the server has just started.

@andrewimm andrewimm requested a review from a team April 6, 2026 22:34
@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Apr 6, 2026
@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 6, 2026

Tests Passed

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Apr 6, 2026

Merging this PR will not alter performance

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1


Comparing imm/trace-metadata2 (5ba46d4) with canary (cd5d221)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Copy Markdown
Collaborator

Stats from current PR

🟢 1 improvement

Metric Canary PR Change Trend
node_modules Size 488 MB 485 MB 🟢 2.2 MB (0%) █████
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 456ms 456ms ▅▁█▅▅
Cold (Ready in log) 438ms 434ms ▂▁▂▅▇
Cold (First Request) 1.090s 1.112s █▆▁▁▂
Warm (Listen) 456ms 456ms ██▁██
Warm (Ready in log) 437ms 445ms ▁▂▂▇█
Warm (First Request) 339ms 332ms ▁▃▄▇█
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 456ms ▆▃▃▆▃
Cold (Ready in log) 436ms 437ms ▂▁▃▆▂
Cold (First Request) 1.942s 1.946s ▆▇▇▇▆
Warm (Listen) 457ms 455ms ▁▁▁▁▁
Warm (Ready in log) 436ms 436ms ▃▁▂▅▁
Warm (First Request) 1.958s 1.971s ▆▆▇█▆

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.910s 3.837s ▅▇▆██
Cached Build 3.943s 3.893s ▇▅███
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.498s 14.490s ▁▁▂▅▂
Cached Build 14.615s 14.621s ▂▁▂▇▃
node_modules Size 488 MB 485 MB 🟢 2.2 MB (0%) █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
00f-b9qz6eg_9.js gzip 156 B N/A -
02fkg8wfh0iju.js gzip 9.19 kB N/A -
050zwt5xh_0tx.js gzip 10.4 kB N/A -
087fzjd-gvlzv.js gzip 450 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0j9nyyebpzuve.js gzip 65.7 kB N/A -
0ppxcl_z43mad.js gzip 8.52 kB N/A -
0q2-699avqxpe.js gzip 157 B N/A -
0w-q2j65cf4d_.js gzip 70.8 kB N/A -
1-frbc0cishd7.js gzip 157 B N/A -
13k_vpd8me2k-.js gzip 158 B N/A -
19oha6-znmkcv.js gzip 8.55 kB N/A -
1blu6_3_s6esl.js gzip 157 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1j5-hzmcgdm7q.js gzip 157 B N/A -
1sefpke3jzt08.js gzip 154 B N/A -
2_5rjb7lqxntf.js gzip 221 B 221 B
219prxwxgaalc.js gzip 7.61 kB N/A -
23adaukurvfha.js gzip 169 B N/A -
26elcgxnn9zjd.js gzip 8.52 kB N/A -
2900hudr6gvm0.js gzip 2.28 kB N/A -
2ca4u1j6p4jzq.js gzip 160 B N/A -
2lv2js3kmdeho.js gzip 8.48 kB N/A -
2rehygrd36hqv.js gzip 8.58 kB N/A -
2srwswih0m9_h.js gzip 13.3 kB N/A -
2xjwlqn92_fq5.js gzip 153 B N/A -
3-jz00s4w-r6h.js gzip 13 kB N/A -
3-p9p9mheqhzx.js gzip 8.55 kB N/A -
31030bryqpolg.js gzip 8.53 kB N/A -
31dx5nmrzzuy7.js gzip 225 B N/A -
327yh5m6urmf9.js gzip 161 B N/A -
3925v09gtu-5k.js gzip 49 kB N/A -
39x4zj5mjb4d_.js gzip 9.77 kB N/A -
3k-48b78ys_vy.js gzip 10.1 kB N/A -
3m7-5rfj0avoz.js gzip 12.9 kB N/A -
3ujdsedybb1sm.js gzip 156 B N/A -
3uqce_6sa526g.js gzip 8.47 kB N/A -
3yurjqk-sjs3y.js gzip 1.46 kB N/A -
40ybjx9c192n0.js gzip 13.8 kB N/A -
4115qad47xnpf.js gzip 156 B N/A -
421vzwdt9j1b_.js gzip 5.62 kB N/A -
turbopack-12..rg0u.js gzip 4.18 kB N/A -
turbopack-1e..7a4y.js gzip 4.18 kB N/A -
turbopack-1f..d1m1.js gzip 4.18 kB N/A -
turbopack-1h..plq8.js gzip 4.19 kB N/A -
turbopack-1t..6dsu.js gzip 4.18 kB N/A -
turbopack-29..jcf_.js gzip 4.18 kB N/A -
turbopack-2l..ac-1.js gzip 4.18 kB N/A -
turbopack-2t..mebg.js gzip 4.16 kB N/A -
turbopack-31..cfwm.js gzip 4.17 kB N/A -
turbopack-31..tb4-.js gzip 4.18 kB N/A -
turbopack-34..k296.js gzip 4.18 kB N/A -
turbopack-3e..taq2.js gzip 4.17 kB N/A -
turbopack-3j..iylx.js gzip 4.18 kB N/A -
turbopack-3s..7s07.js gzip 4.18 kB N/A -
03dgzoo-qf3sm.js gzip N/A 9.19 kB -
05tx5f25dlivn.js gzip N/A 8.53 kB -
076qdhguprj3g.js gzip N/A 157 B -
07x7y9orroch_.js gzip N/A 154 B -
0c7ez6p2qc57f.js gzip N/A 5.62 kB -
0duvj3qk5pvgn.js gzip N/A 13.8 kB -
0m-34rm9w_wpm.js gzip N/A 7.6 kB -
0qnwuk92m8i7o.js gzip N/A 10.4 kB -
0r4wrn6n0ue2m.js gzip N/A 8.55 kB -
0rp0fodtbt_6m.js gzip N/A 8.52 kB -
0sfck-km4dl1k.js gzip N/A 8.47 kB -
0x0xuhmxzwkp8.js gzip N/A 8.47 kB -
1-wdvgxnzicj7.js gzip N/A 1.46 kB -
11u6nxujb2eg4.js gzip N/A 450 B -
1jv-o1_s-zmua.js gzip N/A 49 kB -
1qr4jxytqrquk.js gzip N/A 167 B -
1tawq-_7w5wnt.js gzip N/A 156 B -
1vhsa1istl8vk.js gzip N/A 155 B -
1vtzm80ig7ons.js gzip N/A 154 B -
25m7mqgt86ixn.js gzip N/A 160 B -
2c_83vh6ra6-m.js gzip N/A 152 B -
2e4t24z72pt2f.js gzip N/A 70.8 kB -
2hgmo8vho4vf0.js gzip N/A 152 B -
2k9ax08cjl2id.js gzip N/A 12.9 kB -
2lms6k76q5-6m.js gzip N/A 13.3 kB -
2luekerf2irq-.js gzip N/A 65.7 kB -
2qx4twi9i3xus.js gzip N/A 2.28 kB -
2rpa9-yryz91a.js gzip N/A 155 B -
2srnqic6tvxxd.js gzip N/A 8.52 kB -
30l7m4nayp73a.js gzip N/A 8.55 kB -
38rr7d3kfutni.js gzip N/A 13 kB -
3cka21fecurt7.js gzip N/A 157 B -
3h_ecpiaatwgc.js gzip N/A 10.1 kB -
3huq6k2x99obf.js gzip N/A 154 B -
3ity0aahajapd.js gzip N/A 225 B -
3wrhpuc-j1aw9.js gzip N/A 9.77 kB -
42q80l5qx8xoe.js gzip N/A 155 B -
43mlw9dy_8f02.js gzip N/A 8.58 kB -
turbopack-0j..6ao-.js gzip N/A 4.17 kB -
turbopack-19..y-ui.js gzip N/A 4.16 kB -
turbopack-1g..8mcq.js gzip N/A 4.18 kB -
turbopack-1g..srop.js gzip N/A 4.17 kB -
turbopack-1l..ffik.js gzip N/A 4.17 kB -
turbopack-2e..h56q.js gzip N/A 4.17 kB -
turbopack-2i..x_ek.js gzip N/A 4.19 kB -
turbopack-35..wsrp.js gzip N/A 4.17 kB -
turbopack-37..qdma.js gzip N/A 4.18 kB -
turbopack-39..9fws.js gzip N/A 4.18 kB -
turbopack-3a..z3tb.js gzip N/A 4.17 kB -
turbopack-3c..fl01.js gzip N/A 4.17 kB -
turbopack-3g..off8.js gzip N/A 4.18 kB -
turbopack-3q..1pmk.js gzip N/A 4.17 kB -
Total 464 kB 464 kB ✅ -81 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 717 B 712 B
Total 717 B 712 B ✅ -5 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 434 B 430 B
Total 434 B 430 B ✅ -4 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 60.7 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 254 B
main-HASH.js gzip 39.4 kB 39.2 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.8 kB -
9544-HASH.js gzip N/A 61.4 kB -
Total 235 kB 235 kB ⚠️ +560 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.98 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 125 kB
page.js gzip 273 kB 271 kB 🟢 2.15 kB (-1%)
Total 398 kB 396 kB ✅ -2.31 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 617 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 44.1 kB 43.9 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.7 kB 45.5 kB ✅ -229 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.35 MB 🟢 27.1 kB (-1%)
index.pack gzip 113 kB 114 kB
index.pack.old gzip 114 kB 114 kB
Total 4.61 MB 4.58 MB ✅ -27.3 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 342 kB 336 kB 🟢 5.96 kB (-2%)
app-page-exp..prod.js gzip 189 kB 186 kB 🟢 3.67 kB (-2%)
app-page-tur...dev.js gzip 341 kB 335 kB 🟢 5.94 kB (-2%)
app-page-tur..prod.js gzip 189 kB 185 kB 🟢 3.69 kB (-2%)
app-page-tur...dev.js gzip 338 kB 332 kB 🟢 5.88 kB (-2%)
app-page-tur..prod.js gzip 187 kB 183 kB 🟢 3.67 kB (-2%)
app-page.run...dev.js gzip 338 kB 332 kB 🟢 5.93 kB (-2%)
app-page.run..prod.js gzip 187 kB 184 kB 🟢 3.65 kB (-2%)
app-route-ex...dev.js gzip 76.6 kB 76.3 kB
app-route-ex..prod.js gzip 52.2 kB 52 kB
app-route-tu...dev.js gzip 76.6 kB 76.4 kB
app-route-tu..prod.js gzip 52.2 kB 52 kB
app-route-tu...dev.js gzip 76.2 kB 76 kB
app-route-tu..prod.js gzip 52 kB 51.7 kB
app-route.ru...dev.js gzip 76.2 kB 76 kB
app-route.ru..prod.js gzip 52 kB 51.7 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.8 kB 43.6 kB
pages-api-tu..prod.js gzip 33.4 kB 33.2 kB
pages-api.ru...dev.js gzip 43.8 kB 43.5 kB
pages-api.ru..prod.js gzip 33.4 kB 33.1 kB
pages-turbo....dev.js gzip 53.2 kB 53 kB
pages-turbo...prod.js gzip 39 kB 38.8 kB
pages.runtim...dev.js gzip 53.2 kB 53 kB
pages.runtim..prod.js gzip 39 kB 38.7 kB
server.runti..prod.js gzip 62.8 kB 62.5 kB
Total 3.03 MB 2.99 MB ✅ -42.7 kB
📝 Changed Files (25 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-exp..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page.runtime.dev.js
  • app-page.runtime.prod.js
  • app-route-ex..ntime.dev.js
  • app-route-ex..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route.runtime.dev.js
  • app-route.ru..time.prod.js
  • pages-api-tu..ntime.dev.js
  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-api.ru..time.prod.js
  • ... and 5 more
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-exp..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page.runtime.dev.js
failed to diff
app-page.runtime.prod.js
failed to diff
app-route-ex..ntime.dev.js

Diff too large to display

app-route-ex..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route.runtime.dev.js

Diff too large to display

app-route.ru..time.prod.js

Diff too large to display

pages-api-tu..ntime.dev.js

Diff too large to display

pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-api.ru..time.prod.js

Diff too large to display

pages-turbo...ntime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

pages.runtime.prod.js

Diff too large to display

server.runtime.prod.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/83ac915e6ad3c291722cd1468ecc7c650b84e081/next

cpu_cores = std::thread::available_parallelism()
.map(|n| n.get())
.unwrap_or(0),
system_memory_mb = (total_memory_bytes() / (1024 * 1024)) as u32,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The as_u32 conversion here isn't doing anything? Isn't this just looking for a Display implementation or something?

Suggested change
system_memory_mb = (total_memory_bytes() / (1024 * 1024)) as u32,
system_memory_mb = (total_memory_bytes() / (1024 * 1024)),

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

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants