newton physics · ASV daily benchmark check · 2026-07-27

ASV daily benchmark check

Hash-rewrite holding (0 mismatches); one regression-shaped item to watch — a py3.13-only step on both SC-PV machines. Daily monitoring digest for the public Newton ASV benchmark fleet — for review, not a decision report. Weekend catch-up: Fri 07-24 → Mon 07-27.

Copy-paste for Slack
Benchmark check 2026-07-27 (Dylan)

Catching the thread up across the weekend — covers Friday's hash-rewrite (posted about it here at the time, while Alain's out) plus today. One thing needs eyes; the rest is clean or expected.

Friday recap: ran the hash-rewrite across all three boundaries in one commit (0bf74a7a) — merged #3566 (a051c39a) + #3575 (38c44beb) + #3409 (44cb76b1, HeightfieldCollision). Mismatch count went to 0. KitchenG1 stayed hard-excluded (deliberate version="2" workload fix — the pre-v2 series accidentally skipped the kitchen scene, so the old numbers were the wrong ones), and NotifyDRLegs.time_notify_shape_properties was deferred (coherent boundary step, not enough post-change data to call). Both recorded as comments in replace_hash.sh so they don't get re-litigated.

:eyes: py3.13-only slowdown on both SC-PV machines from the 07-24 snapshot — this is the one to look at. Three unrelated benchmarks step up together and hold two points (07-24, 07-25):
- HeightfieldCollision.time_simulate +25–30% (SC-PV-02 0.084→0.105, SC-PV-10 0.079→0.103)
- FastInverseDynamics.time_eval_inverse_dynamics_force +30–35% (SC-PV-02 0.41→0.54, SC-PV-10 0.39→0.53)
- NotifyDRLegs.time_notify_shape_properties ~+53% (the deferred one, same boundary)
py3.12 is dead flat on the exact same newton commits — SC-PV-02 ran 19f8e33b on both envs, py3.12 unchanged and py3.13 stepped — and thor/orin are flat. So this is NOT a newton regression, it's the py3.13 virtualenv. asv isn't recording pinned deps in the result files so I can't name the package from the data; most likely a nightly wheel that refreshed in the py3.13 env on the SC-PV runners on 07-24. SC-PV-10 has shown this pair bimodal before (brief high mode on 07-17), so it may revert. Plan: watch the next 1–2 SC-PV py3.13 runs — if it holds, someone should diff what changed in the py3.13 venv on those runners on 07-24. Holding off #newton-dev until I have the revert/hold signal.

:white_check_mark: model_properties improvement confirmed — the mid-series drop I flagged is real and expected, not a glitch. NotifyDRLegs.time_notify_model_properties is ~4–8x faster on every reporting machine at the 07-22→07-23 boundary, bracket (fda8c48f, 9e85e577], Kamino cluster. #3606 (simplify Kamino gravity to alias Newton vectors) is the cause — aliasing instead of copying means less to push on a model-property notify. New metric, starts fresh, no merge decision.

:white_check_mark: hash-rewrite holding — sweep HASH MISMATCH count is 0 today, no residual. KitchenG1 still shows up as the top +2x flag in the sweep but that's the excluded v2 workload fix, not a regression.

:warning: machine health — L40S has gone quiet, last data 07-22 (now flagged at 4 days). orin also hasn't produced a new snapshot since 07-23. SC-PV-02/10 and thor are current through 07-25. GB10 still silent 33 days (last 06-23) — same standing issue, predates everything, separate.

:information_source: carry-overs, no action: CpuMuJoCoAnt orin creep is holding at +8% (3.82 at 07-23), no new orin data to move it — still watching, not classifiable yet. ContactPyramidDefaults orin is back at baseline (0.196), staying resolved. Minor new one: FastExampleCablePile +5% at the 07-23 boundary on both py envs + orin (thor flat) — cross-env so newton-side, low magnitude, just noting it.

@Viktor @Tobias — the new metric series (p95 step, realtime factor, steady-state GPU mem, solver niter) have fully landed and are stable; the appeared/hash churn from them will keep aging out over the next week. Reminder on the higher-is-better ones (realtime factor, steps/sec): the sweep reads a ratio <1 as an "improvement", so track the reciprocal — a drop in realtime factor is the regression direction, not a win.

TL;DR

Data freshness

MachineLast dataStatus
SC-PV-02 07-25 (402d8eac) OK
SC-PV-10 07-25 (402d8eac) OK
jetson_agx_thor 07-25 (402d8eac) OK
jetson_agx_orin 07-23 (77b846e0) OK — but no new snapshot in 4 days; watching
adenzler-horde-L40S 07-22 (4a6e036f) silent 4 days — newly flagged; was current Friday
SC-PV-SPARK-PS-07 (GB10) 2026-06-23 still silent 33 days — standing issue, predates everything, separate

Needs a look

Watch · env py3.13-only step on both SC-PV machines from the 07-24 snapshot

Three unrelated benchmarks step up together on py3.13 only, on both SC-PV machines, at the 07-24 snapshot boundary, and hold two points (07-24, 07-25):

Not a newton regression. py3.12 is dead flat on the identical newton commit — SC-PV-02 ran 19f8e33b (#3640, a CI-gate change) on both envs; py3.12 unchanged, py3.13 stepped. thor and orin (py3.12) are flat too. The only variable is the Python environment, so the cause is the py3.13 virtualenv on the SC-PV runners — most likely a nightly wheel that refreshed there on 07-24. asv does not record pinned dependency versions in these result files (requirements/env_vars are empty), so the specific package can’t be pinned from the data.

Caveat: on SC-PV-10 this pair has shown a brief high mode before (07-17, at a snapshot boundary), so an env-rebuild / cold-start artifact that reverts is still on the table. SC-PV-02’s pre-07-24 series is flat, and the step holds two points on both machines.

Recommended Watch the next 1–2 SC-PV py3.13 snapshots. If it reverts, close as env-rebuild bimodality. If it holds, someone with runner access should diff what changed in the py3.13 virtualenv on the SC-PV runners on 07-24 (nightly deps — warp / mujoco-warp / CUDA libs are the usual suspects). Not escalating to #newton-dev until there’s a hold/revert signal.

Series continuity

Findings

Six findings. One is a regression-shaped watch (the py3.13 env step); one is a confirmed improvement; one is a carry-over watch; one is resolved; one is a minor new step; one is a known excluded workload fix.

Watch · env 1 · py3.13-only step on both SC-PV machines from 07-24

The day’s only regression-shaped signal — see the Needs a look item above for the full detail. HeightfieldCollision.time_simulate +25–30%, FastInverseDynamics.time_eval_inverse_dynamics_force +30–35%, and NotifyDRLegs.time_notify_shape_properties ~+53%, all py3.13, both SC-PV, holding two points. py3.12 flat on the identical newton commit ⇒ py3.13 virtualenv, not newton. Deps not recorded in the result files; watching for revert vs hold.

Improvement · confirmed 2 · NotifyDRLegs.time_notify_model_properties ~4–8x faster

The mid-series drop flagged for follow-up, now characterized. Steps down at the 07-22→07-23 boundary on every reporting machine: SC-PV-02 2.8e-5→6.6e-6 (py3.12) / 3.7e-5→5.9e-6 (py3.13), SC-PV-10 similar, thor 8.1e-5→9.8e-6, orin 1.4e-4→1.7e-5. thor still ran high at fda8c48f, which narrows the bracket to (fda8c48f, 9e85e577] — a Kamino cluster. #3606 (simplify Kamino gravity to alias Newton vectors) is the mechanism: aliasing instead of copying means less to push on a model-property notify. New metric, starts fresh — reported as an improvement, no merge decision.

Watch · carry-over 3 · CpuMuJoCoAnt slow creep on orin, holding +8%

Unchanged from Friday: two small steps (3.55→3.71 at 07-14, 3.71→3.87 across the 07-15→07-20 gap), latest 3.82 at 07-23. orin has produced no new snapshot since, so there’s nothing to move it. Weak echoes on thor / SC-PV-02 py3.13. Still small, still one CPU benchmark, still not classifiable — keeping open.

Resolved 4 · orin FastExampleContactPyramidDefaults at baseline

Latest point 0.196 (07-23) sits at the ~0.191 baseline. The 1.07x sweep flag is only the 07-20/21 post-outage elevation (0.209/0.213) still inside the recent-2 window; it will age out as orin runs again. Staying resolved.

Watch · minor 5 · FastExampleCablePile.time_simulate +5% at the 07-23 boundary

Small step at the 07-22→07-23 boundary on both py3.12 and py3.13: SC-PV-02 0.124→0.130 / 0.132→0.139, SC-PV-10 0.123→0.129 / 0.133→0.137, orin 0.296→0.321; thor flat. Because it hits both Python envs it is newton-side, not the py3.13 env issue — bracket (a051c39a, 6de960ac]. Low magnitude (+5%); noting it, holding for more points.

Not a regression 6 · FastKitchenG1.track_simulate [512] +2x, all machines

Still the top sweep flag (1.44–2.06x across machines), still the deliberate version="2" workload fix — the pre-v2 series omitted the kitchen scene, so the new numbers are the first correct ones. Hard-excluded from any history merge; the exclusion is recorded in replace_hash.sh. Not a regression.

Dismissed flags

Flags reviewed and dismissed · known bimodal / cold-start / short-window artifacts