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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

⎇ 1ca210a311ecd2a8f8cd6db07b68853b34b27e99 scripts/medir-debug.sh Shell · 43 siq'ikuna · 2.9 KB Ñawpa willay ch'uya

etapa 3: el ahorro real es ~60%, no 79% — la cifra publicada medía otra cosa 1eb469337 · sergio ·

1#!/usr/bin/env bash
2# medir-debug.sh — cuánto pesa REALMENTE la info de depuración en el store. Etapa 3 del SDD 23.
3#
4# ── POR QUÉ NO BASTA EL «79%» QUE SE VENÍA CITANDO ─────────────────────────────────────────────
5# Ese número era «el 79% del CONTENIDO BINARIO son secciones .debug_*», medido sobre una muestra de
6# `.so`/`.a`. Es cierto y es engañoso para planificar, porque un artefacto NO es sólo binarios: trae
7# cabeceras, datos, iconos, locales, `.pc`, documentación. El ahorro que importa es sobre el TAMAÑO
8# DEL ARTEFACTO, y ése es necesariamente menor.
9#
10# El piloto lo confirmó: bison bajó 6M→3M (−50%) y appstream 56M→18M (−68%), los dos lejos del 79%.
11# Extrapolar con la cifra bonita habría prometido ~96 G de ahorro y entregado bastante menos.
12#
13# ── EL MÉTODO ──────────────────────────────────────────────────────────────────────────────────
14# Para cada artefacto: sumar el tamaño de las secciones `.debug_*` de cada ELF (`readelf -S`, que da
15# los tamaños reales) y compararlo con el tamaño total del árbol. No reconstruye nada, así que se
16# puede correr sobre cientos de artefactos en minutos en vez de días.
17#
18# Uso:   scripts/medir-debug.sh [N]     (N = cuántos artefactos muestrear, def 120)
19set -uo pipefail
20ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT"
21STORE="${STORE:-./store}"; N="${1:-120}"
22
23tot_kb=0; dbg_kb=0; n=0
24printf "%-30s %10s %10s %6s\n" "artefacto" "total" "debug" "%"
25for d in $(ls -d "$STORE"/*/ 2>/dev/null | shuf -n "$N" --random-source=/dev/urandom); do
26  [ -d "$d" ] || continue
27  t=$(du -sk "$d" 2>/dev/null | cut -f1); [ -n "$t" ] || continue
28  # Sumar .debug_* de todos los ELF del árbol. `readelf -S` imprime tamaños en hex.
29  b=$(find "$d" -type f \( -perm -u+x -o -name '*.so*' -o -name '*.a' \) 2>/dev/null | while read -r f; do
30        readelf -S "$f" 2>/dev/null | awk '/\.debug_/{getline; print strtonum("0x" $1)}'
31      done | awk '{s+=$1} END{print int(s/1024)}')
32  b=${b:-0}
33  [ "$t" -eq 0 ] && continue
34  n=$((n+1)); tot_kb=$((tot_kb+t)); dbg_kb=$((dbg_kb+b))
35  pct=$(( b * 100 / t ))
36  [ "$pct" -ge 40 ] && printf "%-30s %9sK %9sK %5s%%\n" "$(basename "$d" | cut -c66-95)" "$t" "$b" "$pct"
37done
38
39echo "──────────────────────────────────────────────────────────────"
40echo "  artefactos medidos: $n"
41echo "  total: $((tot_kb/1024)) MB · debug: $((dbg_kb/1024)) MB"
42[ "$tot_kb" -gt 0 ] && echo "  ⇒ la info de depuración es el $(( dbg_kb * 100 / tot_kb ))% del TAMAÑO DE ARTEFACTO"
43echo "  (el «79%» que se citaba era sobre el contenido BINARIO, no sobre el artefacto — ver cabecera)"