Skip to content

test(interaction-harness): the WebKit container lifts podman's process cap, which eight workers reached - #8912

Merged
cixzhang merged 1 commit into
meta:mainfrom
vjeux:harness/webkit-container-pids
Oct 31, 2026
Merged

cixzhang merged 1 commit into
meta:mainfrom
vjeux:harness/webkit-container-pids

Conversation

@vjeux

@vjeux vjeux commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Why

At eight workers, WebKit specs in the container stopped starting pages: trackMarker's decoding page never opened (newPage) or never answered its first evaluate, and the test timed out. rectMorph's on-screen proof failed 8 of 12 that way at eight workers and passed at one.

What led to it

Podman caps a container at 2,048 processes, threads included, and webkit-container.mjs runs every worker's browser and the tests' own child processes in one container. At eight workers the cap was reached, and WebKit could not start a new page's process. During a hang the browsers sat at 4 to 7% CPU: blocked, not starved.

Options and tradeoffs

  • Fewer WebKit workers: hides the cause and slows every run.
  • A higher fixed cap: another number to outgrow.
  • No cap in the container (this pull request).

Why this choice

--pids-limit=-1 leaves the container the host's own limits. That is docker's default, so podman now behaves as docker does, and docker takes the same flag. A comment beside the flag says why.

How to check it

Run eight WebKit workers on a proof that tracks a marker, for example node internal/interaction-harness/scripts/webkit-container.mjs --workers=8 --repeat-each=8 <spec>: no test hangs in newPage.

Evidence

  • On feat(core): one rect morph for touch presentations that grow out of a source rect #8329's tree, eight workers, eight tests a run: with the cap, every run hung 8 of 8, in seven runs, including runs without the shader-cache mount, with a fresh cache, and with the decoding page in a context of its own. Without it, none hung in four runs, each finishing in about 7 s.
  • The harness's touch and frame-evidence self-tests pass in WebKit with the flag.

Local gates at 5c7a475: Prettier passes on the changed file, which ESLint skips by the repository's own ignore pattern; the harness typecheck and the root build pass; the core UI suite passes; the node project passes except two process-timing cases in packages/cli/foundation/release/cache.test.mjs, which pass when that file runs alone (34 of 34), on this head and on main; the harness browser spec passes in Chromium (51 of 51) and in WebKit (43 passed, 8 skipped) at eight workers in the container.

@vercel

vercel Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Oct 30, 2026 10:34pm UTC

Request Review

@astracat-bot

astracat-bot Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Oct 30, 2026, 10:47 PM UTC

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 30, 2026

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No issues found: passing --pids-limit=-1 lifts podman's default 2,048-task cap on the WebKit container, matching docker's default, and changes nothing a spec governs. Nothing more is needed from you for this change.

[Automated review]

…s cap, which eight workers reached

Podman caps a container at 2,048 processes, threads included, and the WebKit container runs every worker's browser and the tests' own child processes. At eight workers on a loaded machine the cap was reached: WebKit could not start a new page's process, so `newPage` for trackMarker's decoding page, or that page's first evaluate, waited out the test. rectMorph's on-screen proof failed 8 of 12 that way at eight workers and passed at one.

`--pids-limit=-1` leaves the container the host's own limits (docker takes the same flag).

Red first, on meta#8329's tree at eight workers, eight tests a run: with the cap, every run hung 8 of 8 (seven runs, including runs without the shader-cache mount, with a fresh cache, and with the decoding page in a context of its own); without it, none hung in four runs (the proof's own on-screen assertion failed 0 to 2 times, a separate matter). The harness's touch and frame-evidence self-tests pass in WebKit with the flag.
@vjeux
vjeux force-pushed the harness/webkit-container-pids branch from a3e6549 to 5c7a475 Compare October 30, 2026 22:27
@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

📚 Storybook Preview

View Storybook for this PR

🧪 Sandbox Preview

View Sandbox for this PR

No new or modified components detected.

Bundle Size Summary

No component packages changed.

Accessibility Audit

Status: The accessibility audit did not run on this pull request. It runs after merges to main and before each release; pull requests that touch components run it with the ci:heavy-lanes label.


Generated by PR Enrichment workflow | Storybook | Sandbox | View full report

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No issues found: --pids-limit=-1 lifts podman's default 2,048-task cap on the WebKit container, reaches the engine before the image, and matches docker's default, so no spec, CI lane or caller-facing option changes. Nothing more is needed from you for this change.

[Automated review]

@cixzhang cixzhang added the ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) label Oct 31, 2026
@cixzhang
cixzhang marked this pull request as ready for review October 31, 2026 01:46
@cixzhang
cixzhang merged commit cdb2988 into meta:main Oct 31, 2026
137 of 141 checks passed
@vjeux
vjeux deleted the harness/webkit-container-pids branch October 31, 2026 03:06

This branch was successfully deployed

1 active deployment
Preview — 5c7a475a Deployed Oct 30, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants