diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 14248746..d1b42195 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -227,6 +227,11 @@ llevan `-fprofile-use`**, el configure encontró `llvm-profdata`, y no hay ni un no cuadre. `libxul.so` pasa de 226.078.752 a 227.802.816 bytes, consistente con inlining de caminos calientes. Es evidencia de build, no de artefacto, y conviene decirlo así. +⚠⚠ **LEER PRIMERO: LOS PORCENTAJES DE LAS TRES TABLAS QUE SIGUEN ESTÁN DILUIDOS Y NO SON LO +QUE PARECEN.** Miden el ciclo completo del proceso, del que **~16 s son arranque**. La corrección, +con el control que faltaba, está más abajo en «EL CONTROL QUE FALTABA». Se dejan tal cual se +publicaron, sin retocar, porque el error de método es el que enseña. + **LA GANANCIA, MEDIDA (2026-09-07).** Mismo rootfs, mismo script, corridas INTERCALADAS A/B/A/B para que la deriva de carga afecte a las dos, mediana de 7, calentamiento descartado. Lo único que cambia entre variantes es un `--ro-bind` de `/usr/lib/firefox`. @@ -325,6 +330,57 @@ la página de medición, así que el parentesco con lo que ahora se entrena es m −11,4 % es real para ESTA carga; generalizarlo a «cualquier página» sería justo el error que el propio corpus de Mozilla cometía al revés. +## EL CONTROL QUE FALTABA: el arranque eran 16 s, y sin restarlo ningún porcentaje significa nada (2026-09-08) + +Todo lo de arriba mide **el ciclo completo del proceso**: arrancar firefox, renderizar, capturar el +PNG y salir. Nunca se midió cuánto de eso era la página. Faltaba el control más barato posible —una +página VACÍA— y con él las cifras publicadas se leen distinto: + +| carga | total sin PGO | total con PGO | **trabajo** sin → con | mejora del TRABAJO | +|---|---|---|---|---| +| `vacia.html` (arranque puro) | 16.026 ms | 15.883 ms | — (ES la línea base) | **−0,9 %** | +| DOM/maquetación | 23.307 ms | 20.627 ms | 7.281 → 4.744 ms | **−34,8 %** | +| carga ajena (canvas/JSON/img) | 20.576 ms | 20.517 ms | 4.550 → 4.634 ms | **+1,8 % (nada)** | +| SunSpider `3d-raytrace` | 15.992 ms | 15.877 ms | **−34 → −6 ms** | bajo el ruido | + +Las cuatro cargas y las dos variantes, **en una sola sesión intercalada**: restar el arranque de una +corrida al total de otra no vale, porque la misma variante deriva ~1 % entre días. + +**Qué cambia, en concreto:** + +1. **El «−10,9 %» que publiqué es correcto como número y engañoso como afirmación.** Es real para el + ciclo completo, que es lo que un usuario espera al abrir el navegador. Pero se leía como + «firefox es un 11 % más rápido», y sobre el trabajo de la página la mejora es **−34,8 %**: el + PGO rinde TRES VECES más de lo que dije. El error subestimaba mi propio resultado. + +2. **La explicación que di del SunSpider era aire.** Escribí que el −1,0 % se explicaba porque un + benchmark JIT-bound es ciego al PGO. Mirá la fila: su trabajo mide **−34 ms**, negativo — la + página con el benchmark tardó MENOS que la vacía. `3d-raytrace` corre en decenas de ms y su + trabajo es más chico que la variación entre corridas. **Ahí no había nada que medir.** El −1,0 % + era el −0,9 % del arranque, y yo le colgué encima una teoría sobre el JIT. + + La teoría puede ser cierta —el mecanismo es real y está bien descrito— pero **esta medición nunca + la probó**, y la presenté como si sí. Un número real más un mecanismo real no hacen una + explicación: hace falta que el número mida el mecanismo. + +3. **La carga ajena confirma que el PGO no es magia.** +1,8 % sobre su trabajo, o sea cero: mejora + lo que se le entrenó (maquetación, −34,8 %) y no lo que no (canvas/JSON, 0 %). Eso es exactamente + lo que un PGO honesto debe hacer, y es mejor evidencia de que funciona que el número grande. + +4. **El jarlog no se rehabilita.** Su −0,1 % diluido pasa a ~−0,5 % sin diluir; sigue muy por debajo + del ~1 % que la misma variante deriva entre días. La conclusión de aparcarlo no se mueve. + +⚠ **La lección, que es la misma de toda esta jornada con otro disfraz.** El instrumento funcionaba, +las medianas eran correctas, las corridas estaban intercaladas, los rangos no se solapaban — todo el +rigor estadístico estaba puesto **sobre una cantidad que no era la que yo creía estar midiendo**. +Ninguna cantidad de repeticiones lo habría revelado: sólo lo revela un control, y el control costó +siete corridas de una página vacía. **Antes de refinar la precisión de un número, hay que gastar una +medición en averiguar qué mide.** + +Y el detalle que lo vuelve barato de recordar: el control salió NEGATIVO en una fila. Un valor +imposible es la forma más limpia que tiene una medición de avisar que el modelo está mal, y por eso +esa fila se deja publicada con su signo menos en lugar de redondearla a cero. + **Y la pregunta que un insumo no determinista obliga a hacer, respondida: `firefox` SIGUE REPRODUCIENDO bit a bit** (`verificar-repro.sh`: REPRODUCEN 1, DERIVA 0, NO-DETERMINISMO 0). Era el riesgo real de esta unidad, no el rendimiento: si el `-fprofile-use` hubiera metido cualquier diff --git a/docs/evidencia/pgo-banco-final-2026-09-08.txt b/docs/evidencia/pgo-banco-final-2026-09-08.txt new file mode 100644 index 00000000..a6cc39f9 --- /dev/null +++ b/docs/evidencia/pgo-banco-final-2026-09-08.txt @@ -0,0 +1,22 @@ +== vacia.html + sin: 16101 16032 16010 16026 16074 15996 16019 + pgo: 15860 15961 15939 15921 15864 15870 15883 + medianas sin=16026 pgo=15883 (-0.9%) +== fuera-del-corpus.html + sin: 23078 23307 23314 23017 23140 23391 23370 + pgo: 20533 20746 20657 20627 20813 20501 20512 + medianas sin=23307 pgo=20627 (-11.5%) +== del-corpus.html + sin: 16073 15992 15964 15948 16008 15967 16030 + pgo: 15843 15866 15940 15877 15888 15849 15891 + medianas sin=15992 pgo=15877 (-0.7%) +== ajena.html + sin: 20642 20576 20554 20557 20556 20578 20598 + pgo: 20517 20517 20531 20545 20479 20490 20513 + medianas sin=20576 pgo=20517 (-0.3%) + +== TRABAJO REAL (total − arranque), que es lo comparable entre cargas + carga trabajo sin / con pgo mejora del trabajo + fuera-del-corpus.html 7281 / 4744 ms -34.8% + del-corpus.html -34 / -6 ms (trabajo ~0: bajo el ruido) + ajena.html 4550 / 4634 ms +1.8% diff --git a/scripts/diagnostico/ajena.html b/scripts/diagnostico/ajena.html new file mode 100644 index 00000000..695370e1 --- /dev/null +++ b/scripts/diagnostico/ajena.html @@ -0,0 +1,48 @@ +