El banco medía el ciclo COMPLETO del proceso (arrancar → renderizar → capturar → salir) y nunca se midió cuánto de eso era arranque. Con una página vacía como control, y las 4 cargas × 2 variantes en UNA sola sesión intercalada (restar entre corridas de días distintos no vale: la misma variante deriva ~1%): maquetación trabajo 7281 → 4744 ms -34,8% (publicado: -10,9%) carga ajena trabajo 4550 → 4634 ms +1,8% = cero, y es buena señal SunSpider trabajo -34 → -6 ms bajo el ruido Dos correcciones al documento: 1. El -10,9% es correcto para el ciclo completo pero se leía como 'firefox 11% más rápido'. Sobre el trabajo de la página el PGO rinde -34,8%: tres veces más. El error subestimaba el propio resultado. 2. La explicación que di del SunSpider era aire. Su trabajo mide -34 ms, NEGATIVO: la página con el benchmark tardó menos que la vacía. No había nada que medir, y yo le colgué encima una teoría sobre el JIT. La teoría puede ser cierta; esta medición nunca la probó. Las tablas viejas se dejan sin retocar, con un aviso arriba: el error de método enseña más que el número corregido. Todo el rigor estadístico estaba puesto sobre una cantidad que no era la que yo creía medir, y ninguna repetición lo habría revelado — sólo un control, que costó siete corridas de una página vacía. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
46 lines
2.8 KiB
Bash
Executable File
46 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# Banco DEFINITIVO: las cuatro cargas y las dos variantes en UNA SOLA sesión intercalada, para que
|
||
# la resta «total − arranque» sea válida. Las restas entre corridas de días distintos no lo son:
|
||
# el arranque medido hoy no es necesariamente el de ayer.
|
||
# vacia → ARRANQUE PURO. Sin este control todos los porcentajes están diluidos por
|
||
# una constante que resultó ser ~16 s, o sea la mayor parte de la medición.
|
||
# fuera-del-corpus → DOM/layout: parentesco con lo que entrena el corpus
|
||
# del-corpus → SunSpider 3d-raytrace: JIT-bound
|
||
# ajena → imágenes, canvas, JSON, DOM por API: SIN parentesco
|
||
set -u
|
||
RAIZ=/mnt/vvv/hammer; R=$RAIZ/store/.rootfs/sway-v2
|
||
AQUI=$(cd "$(dirname "$0")" && pwd) # las 4 páginas viven junto a este script
|
||
SAL=$(mktemp -d)
|
||
A=$(ls -d $RAIZ/store/8116bdec*-firefox|head -1); B=$(ls -d $RAIZ/store/3d199174*-firefox|head -1)
|
||
N=${N:-7}
|
||
corre(){ local ini fin
|
||
ini=$(date +%s%N)
|
||
timeout 300 bwrap --ro-bind "$R" / --ro-bind /usr/lib/musl/lib/libc.so /lib/ld-musl-x86_64.so.1 \
|
||
--ro-bind "$1/usr/lib/firefox" /usr/lib/firefox --dev /dev --proc /proc --tmpfs /run --tmpfs /tmp \
|
||
--unshare-pid --ro-bind "$AQUI" /bench --bind "$SAL" /salida --unshare-user --uid 0 --gid 0 \
|
||
--setenv PATH /usr/bin:/bin \
|
||
/bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 MOZ_DISABLE_CONTENT_SANDBOX=1 LIBGL_ALWAYS_SOFTWARE=1 LANG=C.UTF-8; mkdir -p $HOME
|
||
LD_LIBRARY_PATH=/usr/lib/firefox /usr/lib/firefox/firefox --headless --screenshot /salida/b.png file:///bench/'"$2" \
|
||
>/dev/null 2>&1
|
||
fin=$(date +%s%N); echo $(( (fin-ini)/1000000 )); }
|
||
med(){ printf '%s\n' "$@"|sort -n|awk '{v[NR]=$1}END{print (NR%2)?v[(NR+1)/2]:int((v[NR/2]+v[NR/2+1])/2)}'; }
|
||
declare -A MA MB
|
||
for p in vacia.html fuera-del-corpus.html del-corpus.html ajena.html; do
|
||
corre "$A" "$p" >/dev/null; corre "$B" "$p" >/dev/null
|
||
sa=(); sb=()
|
||
for i in $(seq 1 $N); do sa+=( "$(corre "$A" "$p")" ); sb+=( "$(corre "$B" "$p")" ); done
|
||
MA[$p]=$(med "${sa[@]}"); MB[$p]=$(med "${sb[@]}")
|
||
echo "== $p"; echo " sin: ${sa[*]}"; echo " pgo: ${sb[*]}"
|
||
echo " medianas sin=${MA[$p]} pgo=${MB[$p]} ($(awk -v a=${MA[$p]} -v b=${MB[$p]} 'BEGIN{printf "%+.1f%%",(b-a)*100.0/a}'))"
|
||
done
|
||
echo ""
|
||
echo "== TRABAJO REAL (total − arranque), que es lo comparable entre cargas"
|
||
ba=${MA[vacia.html]}; bb=${MB[vacia.html]}
|
||
printf " %-22s %-22s %s\n" "carga" "trabajo sin / con pgo" "mejora del trabajo"
|
||
for p in fuera-del-corpus.html del-corpus.html ajena.html; do
|
||
awk -v p="$p" -v a=${MA[$p]} -v b=${MB[$p]} -v ba=$ba -v bb=$bb 'BEGIN{
|
||
ta=a-ba; tb=b-bb;
|
||
if (ta<=50) printf " %-22s %-22s %s\n", p, ta" / "tb" ms", "(trabajo ~0: bajo el ruido)";
|
||
else printf " %-22s %-22s %+.1f%%\n", p, ta" / "tb" ms", (tb-ta)*100.0/ta }'
|
||
done
|