gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 188Rust 55Shell 30Markdown 281211 Definiciones

⎇ b221f06c0154625c8551947a30dc41f17f0f808a scripts/diagnostico/banco-pgo-final.sh Shell · 57 líneas · 3.7 KB Historia crudo

arneses: los CINCO sandboxes de Gecko apagados, no un subconjunto a ojo b221f06c0 · Sergio ·

1#!/bin/bash
2# Banco DEFINITIVO: las cuatro cargas y las dos variantes en UNA SOLA sesión intercalada, para que
3# la resta «total − arranque» sea válida. Las restas entre corridas de días distintos no lo son:
4# el arranque medido hoy no es necesariamente el de ayer.
5#   vacia            → ARRANQUE PURO. Sin este control todos los porcentajes están diluidos por
6#                      una constante que resultó ser ~16 s, o sea la mayor parte de la medición.
7#   fuera-del-corpus → DOM/layout: parentesco con lo que entrena el corpus
8#   del-corpus       → SunSpider 3d-raytrace: JIT-bound
9#   ajena            → imágenes, canvas, JSON, DOM por API: SIN parentesco
10#
11# ⚠ 2026-09-08: este arnés apaga LOS CINCO sandboxes de Gecko, no sólo el de contenido. Antes dejaba
12#   2 ayudantes 'Sandbox Forked' muertos de SIGSEGV en CADA corrida —el sandbox de Firefox no puede
13#   montar su user-namespace dentro del de bwrap y muere en la salida de error—. Acá no se pierde
14#   nada de seguridad: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh.
15#
16#   Y CAMBIA LAS CONDICIONES DE MEDICIÓN: las cifras publicadas en docs/26 se tomaron con el arnés
17#   viejo, o sea con esos 2 procesos reventando por corrida. Los porcentajes del PGO comparan dos
18#   firefox bajo el MISMO arnés, así que el cociente debería aguantar; el nivel absoluto de la línea
19#   base de arranque (~16 s) no tiene por qué. Si se vuelve a publicar un número, re-medir la línea
20#   base con este arnés y no reutilizar la vieja.
21#
22set -u
23RAIZ=/mnt/vvv/hammer; R=$RAIZ/store/.rootfs/sway-v2
24AQUI=$(cd "$(dirname "$0")" && pwd)   # las 4 páginas viven junto a este script
25SAL=$(mktemp -d)
26A=$(ls -d $RAIZ/store/8116bdec*-firefox|head -1); B=$(ls -d $RAIZ/store/3d199174*-firefox|head -1)
27N=${N:-7}
28corre(){ local ini fin
29  ini=$(date +%s%N)
30  timeout 300 bwrap --ro-bind "$R" / --ro-bind /usr/lib/musl/lib/libc.so /lib/ld-musl-x86_64.so.1 \
31    --ro-bind "$1/usr/lib/firefox" /usr/lib/firefox --dev /dev --proc /proc --tmpfs /run --tmpfs /tmp \
32    --unshare-pid --ro-bind "$AQUI" /bench --bind "$SAL" /salida --unshare-user --uid 0 --gid 0 \
33    --setenv PATH /usr/bin:/bin \
34    /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
35      LD_LIBRARY_PATH=/usr/lib/firefox /usr/lib/firefox/firefox --headless --screenshot /salida/b.png file:///bench/'"$2" \
36    >/dev/null 2>&1
37  fin=$(date +%s%N); echo $(( (fin-ini)/1000000 )); }
38med(){ 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)}'; }
39declare -A MA MB
40for p in vacia.html fuera-del-corpus.html del-corpus.html ajena.html; do
41  corre "$A" "$p" >/dev/null; corre "$B" "$p" >/dev/null
42  sa=(); sb=()
43  for i in $(seq 1 $N); do sa+=( "$(corre "$A" "$p")" ); sb+=( "$(corre "$B" "$p")" ); done
44  MA[$p]=$(med "${sa[@]}"); MB[$p]=$(med "${sb[@]}")
45  echo "== $p"; echo "   sin: ${sa[*]}"; echo "   pgo: ${sb[*]}"
46  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}'))"
47done
48echo ""
49echo "== TRABAJO REAL (total − arranque), que es lo comparable entre cargas"
50ba=${MA[vacia.html]}; bb=${MB[vacia.html]}
51printf "   %-22s %-22s %s\n" "carga" "trabajo sin / con pgo" "mejora del trabajo"
52for p in fuera-del-corpus.html del-corpus.html ajena.html; do
53  awk -v p="$p" -v a=${MA[$p]} -v b=${MB[$p]} -v ba=$ba -v bb=$bb 'BEGIN{
54    ta=a-ba; tb=b-bb;
55    if (ta<=50) printf "   %-22s %-22s %s\n", p, ta" / "tb" ms", "(trabajo ~0: bajo el ruido)";
56    else printf "   %-22s %-22s %+.1f%%\n", p, ta" / "tb" ms", (tb-ta)*100.0/ta }'
57done