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