Files
Sergio 17f8f4fb80 takana: la ruta del repo es /mnt/vvv/takana
El directorio se movio de verdad, asi que las referencias absolutas dentro del
repo ya eran incorrectas. Tambien los ejemplos que usaban ~/hammer.

NO se tocan docs/evidencia/: son REGISTRO de lo que se corrio ese dia, y
reescribir una ruta ahi adentro falsifica la evidencia. Que nombren una ruta que
ya no existe es correcto: existia cuando se midio.
2026-09-09 20:08:02 +00:00

58 lines
3.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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
#
# ⚠ 2026-09-08: este arnés apaga LOS CINCO sandboxes de Gecko, no sólo el de contenido. Antes dejaba
# 2 ayudantes 'Sandbox Forked' muertos de SIGSEGV en CADA corrida —el sandbox de Firefox no puede
# montar su user-namespace dentro del de bwrap y muere en la salida de error—. Acá no se pierde
# nada de seguridad: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh.
#
# Y CAMBIA LAS CONDICIONES DE MEDICIÓN: las cifras publicadas en docs/26 se tomaron con el arnés
# viejo, o sea con esos 2 procesos reventando por corrida. Los porcentajes del PGO comparan dos
# firefox bajo el MISMO arnés, así que el cociente debería aguantar; el nivel absoluto de la línea
# base de arranque (~16 s) no tiene por qué. Si se vuelve a publicar un número, re-medir la línea
# base con este arnés y no reutilizar la vieja.
#
set -u
RAIZ=/mnt/vvv/takana; 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 LIBGL_ALWAYS_SOFTWARE=1 MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=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