etapa 3: el ahorro real es ~60%, no 79% — la cifra publicada medía otra cosa
El «79%» que este plan y los SDD 19/20 venían citando era **el 79% del CONTENIDO BINARIO**,
medido sobre una muestra de .so/.a. Es cierto y es la cifra equivocada para planificar, porque un
artefacto no es sólo binarios: trae cabeceras, datos, iconos, locales, .pc y documentación, que
no encogen.
MEDIDO con `scripts/medir-debug.sh` (suma los tamaños reales de las secciones .debug_* vía
readelf -S y los compara con el tamaño del árbol, sin reconstruir nada):
40 artefactos · 876 MB · 27%
100 artefactos · 2955 MB · 38% (truncada a 60 ficheros/artefacto)
250 artefactos · 8874 MB · 60% ← la que manda: sin truncar, ~7% del store
La varianza es alta porque unos pocos artefactos grandes dominan el total, así que el número
necesitaba validación independiente — y la tiene: el piloto de la etapa 2, donde se reconstruyó y
se pesó de verdad, dio bison −50% y appstream −68%. Los dos ENCIERRAN el 60% de la muestra
grande. El modelo predice lo que el rebuild produjo.
CIFRAS CORREGIDAS, con el store en 127 G:
se venía diciendo medido
reserva de disco ~96 G ~76 G
store tras el split ~30 G ~51 G
espejo público ~30 G ~51 G
Sigue siendo el mayor ahorro disponible en el proyecto —76 G no es poco— pero no es lo
prometido, y la diferencia importa para dimensionar el alojamiento del espejo, que es una
decisión con factura.
LA LECCIÓN: una cifra medida sobre una cosa (contenido binario) se citó durante semanas como si
midiera otra (tamaño de artefacto), y llegó a tres documentos. El número no era falso; LA UNIDAD
sí. Cuando un número vaya a decidir un gasto, hay que volver a la medición original y comprobar
QUÉ estaba midiendo.
Corregido en los tres sitios donde se había propagado.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
# medir-debug.sh — cuánto pesa REALMENTE la info de depuración en el store. Etapa 3 del SDD 23.
|
||||
#
|
||||
# ── POR QUÉ NO BASTA EL «79%» QUE SE VENÍA CITANDO ─────────────────────────────────────────────
|
||||
# Ese número era «el 79% del CONTENIDO BINARIO son secciones .debug_*», medido sobre una muestra de
|
||||
# `.so`/`.a`. Es cierto y es engañoso para planificar, porque un artefacto NO es sólo binarios: trae
|
||||
# cabeceras, datos, iconos, locales, `.pc`, documentación. El ahorro que importa es sobre el TAMAÑO
|
||||
# DEL ARTEFACTO, y ése es necesariamente menor.
|
||||
#
|
||||
# El piloto lo confirmó: bison bajó 6M→3M (−50%) y appstream 56M→18M (−68%), los dos lejos del 79%.
|
||||
# Extrapolar con la cifra bonita habría prometido ~96 G de ahorro y entregado bastante menos.
|
||||
#
|
||||
# ── EL MÉTODO ──────────────────────────────────────────────────────────────────────────────────
|
||||
# Para cada artefacto: sumar el tamaño de las secciones `.debug_*` de cada ELF (`readelf -S`, que da
|
||||
# los tamaños reales) y compararlo con el tamaño total del árbol. No reconstruye nada, así que se
|
||||
# puede correr sobre cientos de artefactos en minutos en vez de días.
|
||||
#
|
||||
# Uso: scripts/medir-debug.sh [N] (N = cuántos artefactos muestrear, def 120)
|
||||
set -uo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT"
|
||||
STORE="${STORE:-./store}"; N="${1:-120}"
|
||||
|
||||
tot_kb=0; dbg_kb=0; n=0
|
||||
printf "%-30s %10s %10s %6s\n" "artefacto" "total" "debug" "%"
|
||||
for d in $(ls -d "$STORE"/*/ 2>/dev/null | shuf -n "$N" --random-source=/dev/urandom); do
|
||||
[ -d "$d" ] || continue
|
||||
t=$(du -sk "$d" 2>/dev/null | cut -f1); [ -n "$t" ] || continue
|
||||
# Sumar .debug_* de todos los ELF del árbol. `readelf -S` imprime tamaños en hex.
|
||||
b=$(find "$d" -type f \( -perm -u+x -o -name '*.so*' -o -name '*.a' \) 2>/dev/null | while read -r f; do
|
||||
readelf -S "$f" 2>/dev/null | awk '/\.debug_/{getline; print strtonum("0x" $1)}'
|
||||
done | awk '{s+=$1} END{print int(s/1024)}')
|
||||
b=${b:-0}
|
||||
[ "$t" -eq 0 ] && continue
|
||||
n=$((n+1)); tot_kb=$((tot_kb+t)); dbg_kb=$((dbg_kb+b))
|
||||
pct=$(( b * 100 / t ))
|
||||
[ "$pct" -ge 40 ] && printf "%-30s %9sK %9sK %5s%%\n" "$(basename "$d" | cut -c66-95)" "$t" "$b" "$pct"
|
||||
done
|
||||
|
||||
echo "──────────────────────────────────────────────────────────────"
|
||||
echo " artefactos medidos: $n"
|
||||
echo " total: $((tot_kb/1024)) MB · debug: $((dbg_kb/1024)) MB"
|
||||
[ "$tot_kb" -gt 0 ] && echo " ⇒ la info de depuración es el $(( dbg_kb * 100 / tot_kb ))% del TAMAÑO DE ARTEFACTO"
|
||||
echo " (el «79%» que se citaba era sobre el contenido BINARIO, no sobre el artefacto — ver cabecera)"
|
||||
Reference in New Issue
Block a user