#!/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)"