tawasuyu

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 1410Shell 141Markdown 84Rust 832884 Definiciones

⎇ 84e3737e10e17927380ed3e232e50cebfdd39123 docs/evidencia/tasas-kernel-2026-08-29/btf-precio.txt 96 líneas · 5.1 KB Historia crudo

SDD 25 H7: BTF cuesta +14,97% de bzImage — medido construyendo, no estimado 56e59b821 · Sergio ·

1SDD 25 §7-H7 — Qué cuesta encender DEBUG_INFO_BTF, medido construyendo
2Medido 2026-08-31 en 'momento'. NO se cruza con los números de §2, §9 ni §9.5:
3esto no es un microbenchmark, es un kernel construido.
4
5== qué se compara ==
6El MISMO kernel por los dos caminos, con UNA sola diferencia en el .config:
7  A) linux-generic VIGENTE, sellado          — DEBUG_INFO_NONE, sin BTF
8  B) linux-generic-btf, receta derivada       — DEBUG_INFO_DWARF5 + DEBUG_INFO_BTF
9Todo lo demás (defconfig 7.1.2, la lista entera de -e/-d, el sledgehammer de amdgpu,
10CC=gcc, el CMDLINE) es byte a byte el mismo texto.
11
12POR QUÉ SOBRE linux-generic Y NO SOBRE linux, que es más barato de construir:
13BTF tiene 'depends on BPF_SYSCALL' y el .config sellado de linux lo trae APAGADO
14(# CONFIG_BPF_SYSCALL is not set). Medir ahí obligaría a encender BPF_SYSCALL a la
15vez y el delta mezclaría dos cosas. linux-generic ya lo trae ⇒ el delta es limpio.
16
17La receta derivada vive en work/medicion-btf/ —FUERA de recipes/— para no entrar al
18grafo compartido como deuda; el catálogo se le presta por symlinks en su directorio.
19Nada del corpus se re-hashea por esta medición.
20
21== condiciones ==
22máquina             : momento, 4 vCPU, 7 GiB RAM
23load al arrancar    : 3.42 2.64 2.38
24memoria disponible  : 4293 MiB
25disco libre (store) : 78G
26paralelismo         : -j2 (no $(nproc)): con -g cada gcc pesa más y hay ~4 G libres.
27                      NO afecta a los bytes del bzImage, que es lo único que se mide.
28ruido conocido      : el mismo 'yes' huérfano (pid 1750, reparentado a arje-zero) sigue
29                      quemando un core de los 4. Encarece el TIEMPO, no los BYTES.
30pahole              : v1.30, estático (el arreglo del 2026-08-31)
31
32== baseline A ==
33bzImage sellado : 16937984 bytes
34                  (es el mismo número que cita §7-H1 tras pagar MEMCG+PSI)
35
36== B: construido con DWARF5 + BTF ==
37receta derivada     : work/medicion-btf/linux-generic-btf.toml (hash b3:771e4823…)
38duración del build  : 20:02:49 → 20:51:09 UTC = 48 min con -j2
39deps que hubo que añadir a las del kernel sellado: dwarves, python3
40
41guarda del .config (CLAUDE.md §3, y por qué hace falta):
42  scripts/pahole-version.sh imprime 0 si pahole no está en el PATH;
43  'depends on PAHOLE_VERSION >= 122' deja de cumplirse y olddefconfig BORRA la
44  línea EN SILENCIO. El build saldría OK sellando un kernel SIN BTF. Por eso la
45  fase configure verifica el .config PRODUCIDO y sale 1 si no está. Salida real:
46    v1.30
47    OK: CONFIG_DEBUG_INFO_BTF=y en el .config producido
48
49== lo medido ==
50vmlinux 588319992 bytes
51bzImage 19473408 bytes
52  [10] .BTF              PROGBITS        ffffffff830e0000 22e0000 785d26 00   A  0   0  1
53  [11] .BTF_ids          PROGBITS        ffffffff83866000 2a66000 000928 00   A  0   0  1
54  [39] .debug_info       PROGBITS        0000000000000000 330f240 18c33a9d 00      0   0  1
55.BTF 7888166 bytes
56
57bzImage sin BTF  :   16.937.984 bytes
58bzImage con BTF  :   19.473.408 bytes
59DELTA            :   +2.535.424 bytes = +2.42 MiB = +14.97%
60
61seccion .BTF en vmlinux (sin comprimir): 7.888.166 bytes = 7.52 MiB
62seccion .BTF_ids                       : 2.344 bytes
63⇒ los 7.52 MiB de .BTF se comprimen a 2.42 MiB dentro del bzImage (3.11x)
64
65== contra el precio de H1, que es la unica vara comparable que tenemos ==
66  MEMCG+PSI  : +80 KiB   = +0,49%  del mismo bzImage
67  BTF        : +2,42 MiB = +14,97% del mismo bzImage
68  ⇒ BTF cuesta 31x lo que costo H1 en bytes.
69
70== el numero de Artix NO servia, y en la direccion CONTRARIA a la esperable ==
71El BTF del kernel de Artix son 6,4 MB y §9.5 dijo que no decia nada de un kernel
72monolitico y pelado. Correcto — pero el nuestro sale MAS GRANDE: 7,5 MiB. Artix es
73MODULAR, y su .BTF de vmlinux cubre solo el core built-in; el nuestro es monolitico
74(i915 + nouveau + radeon + iwlwifi + todo el resto son =y) y sus tipos entran todos.
75Un kernel mas chico en drivers cargables tiene MAS BTF que uno grande en modulos.
76
77== lo que costo construirlo, que no es lo que se paga al arrancar ==
78vmlinux con DWARF   : 588.319.992 bytes (561 MiB), de los cuales .debug_info
79                      son 415.447.709 bytes (396 MiB).
80Eso NO entra en la imagen: la receta empaqueta bzImage, no vmlinux. Es coste de
81build (tiempo, RAM de pahole y disco), no de arranque.
82
83== como se reproduce ==
84La receta derivada esta guardada al lado: docs/evidencia/.../linux-generic-btf.toml.
85'hammer build' no tiene --base-dir (solo el fallback al catalogo PADRE), asi que para
86construirla fuera de recipes/ hay que prestarle el catalogo por symlinks:
87    M=work/medicion-btf; mkdir -p $M
88    for f in $PWD/recipes/*.toml; do ln -s "$f" "$M/$(basename $f)"; done
89    cp docs/evidencia/tasas-kernel-2026-08-29/linux-generic-btf.toml $M/
90    flock work/.farm-build.lock ./target/release/hammer --store ./store build $M/linux-generic-btf.toml
91
92EL ARTEFACTO SE BORRO A PROPOSITO tras anotar estos numeros. No es basura olvidada:
93'hammer kernel contract --sealed' lo encontraba y lo listaba como SIN COMPROBAR
94(no declara [[target]], que es justo lo que H8 exige), o sea un ⚠ permanente en
95docs/state/kernel-contract.txt, que el cron commitea cada 30 min. Un aviso fijo que
96no corresponde a ningun problema es como se deja de leer un vigia.