# T19 · qué cobra overlayfs POR CAPA — SDD 25
# Medido el 2026-09-01 en `momento` (KVM/EPYC-Rome, 4 vCPU, 7,7 GiB, Linux 7.1.4-artix1-1)
# con bench_overlay.c. Máquina CARGADA (load ~3,6 sobre 4 vCPU, cosecha de la granja en vuelo)
# => los absolutos son cotas superiores; la señal está en los COCIENTES de una misma corrida.
# 7 rondas, minimo/mediana. El overlay se monta y desmonta en CADA ronda: las dentries del
# overlay estan frias en cada medida y las de abajo, calientes. Los FALLOS usan nombres nuevos.
# Capas sinteticas en /dev/sdc (ext4); capas reales = artefactos del store en /dev/sdb (bind).

===============================================================================
1 · CAPAS SINTETICAS (256 ficheros por capa, todas en el mismo filesystem)
===============================================================================
# bench_overlay — SDD 25 T19
# base=/mnt/vvv/.bench-overlay rondas=7 ficheros/capa=256

## A · lookup FRÍO por primera vez, en ns/ruta (capas apiladas)
   N     hit capa 0   hit capa N-1          FALLO  open capa N-1 hit caliente  mount(us)    umount
   1  4067.8/4885.0  1065.2/1490.5  3199.9/3730.0  1727.5/2328.7  664.4/747.2      152.4   10637.3
   2  4723.2/5255.7  4629.8/5658.9  4918.5/5954.3  2226.6/2397.7  693.6/877.9      198.5   11269.4
   4  4082.9/4585.8  5147.0/6053.4  8630.6/9255.2  1804.7/2483.9  673.2/702.4      177.9   11851.6
   8  4204.9/5321.2  6208.8/8277.5 15866.8/20021.8  2114.3/2531.4  679.1/801.9      195.1   11825.4
  16  4969.9/5528.2  9330.1/10328.9 30205.1/38274.9  2302.5/2627.9  668.5/755.1      219.1   10975.4
  24  4055.5/4377.4 10893.2/11599.4 44716.2/45480.2  2072.6/2206.4  673.5/719.3      244.8    9252.3
  32  4353.0/5354.5 13938.4/14776.4 60869.2/67052.7  2315.6/2602.8  677.6/709.0      309.3   10052.3
  48  4543.7/5042.9 17377.3/19947.8 93970.6/102367.7  2317.1/2464.8  676.9/747.5      291.1    9166.2
  64  4716.9/5151.4 22938.9/24143.3 124448.1/128839.6  2393.9/2479.6  682.5/701.6      364.9    9735.5
# (mínimo/mediana de 7 rondas)

## B · las MISMAS N capas fundidas en UNA sola (hardlinks, como merge_deps_layer)
   N            hit          FALLO           open     caliente  fundirlas(ms)
   1  4370.9/5488.2  3387.8/4069.1  1815.2/2282.8  710.7/743.7            4.7
   2  3948.5/4865.0  3655.1/4402.2  1657.8/2237.5  692.0/752.5           11.0
   4  4207.6/4578.2  3578.0/3797.2  1927.8/2244.3  687.2/726.3           21.7
   8  4060.6/6188.4  3834.6/5120.7  2069.1/2766.4  690.0/717.4           55.8
  16  3851.7/4656.6  3390.6/4320.5  2001.1/2535.5  674.3/777.1           97.5
  24  4441.6/4756.3  4117.7/4676.9  2118.3/2265.7  681.0/795.1          128.5
  32  3617.2/6131.1  3398.0/4581.0  1722.4/2897.3  672.9/908.5          199.6
  48  4250.3/5046.1  3750.6/4600.1  1771.0/2519.3  702.3/851.0          282.4
  64  3982.9/4449.0  3673.2/4122.2  1861.3/2117.6  687.3/702.0          376.4

## C · piso: el mismo árbol SIN overlay (ext4 directo)
stat ext4  hit 877.9/1226.2    FALLO 2587.5/3165.6  ns

# el árbol queda en /mnt/vvv/.bench-overlay — borrar a mano

===============================================================================
2 · CAPAS REALES DEL STORE (64 artefactos con usr/include, 100-3087 ficheros)
===============================================================================
# bench_overlay — SDD 25 T19 (modo D: capas reales)
# base=/mnt/vvv/.bench-overlay rondas=7
# MODO D — 64 capas REALES del store, la primera es la de arriba

## D1 · apiladas: ns/ruta, lookup frío
   N ficheros     hit capa N-1            FALLO    open capa N-1  mount(us)
   1      256   4828.5/5468.6   1783.6/2276.5   2237.5/3140.5      172.8
   2      256   5564.4/6697.8   2187.5/3126.2   2762.6/3724.4      173.7
   4      256   5481.4/5786.9   3356.8/3574.1   2439.5/2928.4      176.4
   8      256   4573.8/5585.9   4620.9/5342.9   2391.4/2935.1      215.6
  16      256   7239.4/8065.6   7896.4/8407.2   2923.6/3609.0      236.9
  24      256   5988.1/7217.6   9757.8/11375.6   3114.7/3255.1      252.8
  32      256  13520.6/15253.3  13039.9/14217.9   2643.8/3650.2      325.7
# AVISO: lowerdir de 4663 B, cerca del límite de página
mount overlay reales (n=48): No such file or directory
  48      193   — el lowerdir no cabe en una página (ver sandbox.rs)

## D2 · las mismas, FUNDIDAS en una capa de hardlinks
   N ficheros              hit            FALLO             open fundir(ms)   ficheros
   1      256   4626.9/5653.3   2294.5/2588.2   2063.5/2652.2       26.4       3087
   2      256   4206.8/5242.6   2247.2/2720.0   2209.8/2738.8       63.9       5508
   4      256   4959.6/5381.2   2223.1/2698.8   2515.5/3080.7       96.3       8674
   8      256   4640.7/5223.2   2634.9/2753.6   2186.6/2880.0      152.3      11378
  16      256   5341.5/6281.3   2540.1/2745.6   2584.2/3145.5      223.9      15354
  24      256   4415.5/5190.4   2233.8/2494.2   2070.2/2606.1      264.4      16112
  32      256   5923.7/7066.7   2480.6/3148.8   2481.5/3154.2      339.7      18228
  48      193   7073.0/7829.2   3166.6/4154.0   2095.4/2707.1      387.2      21232
  64      256   4407.3/4953.1   3549.5/3909.4   2135.3/2673.9      482.5      23803

# el merge queda en /mnt/vvv/.bench-overlay/merged-real — borrar a mano

===============================================================================
3 · LA API DE MONTAJE NUEVA (fsopen/fsconfig con 'lowerdir+' repetido)
   Monta lo que mount(2) no puede: 64 capas reales, sin muro de pagina.
===============================================================================
# bench_overlay — SDD 25 T19 (modo E: fsconfig lowerdir+)
# MODO E — fsopen/fsconfig con `lowerdir+`, 64 capas reales disponibles
   N ficheros     hit capa N-1            FALLO    mount(us)
   8      256   5475.8/5918.1   7089.7/9219.7        209.0
  16      256   7341.7/8460.4  12109.4/15078.8        267.5
  24      256   6996.2/10100.3  23070.0/29872.2        302.0
  32      256  12512.3/15712.0  25547.0/29229.4        268.3
  48      193  25388.3/33127.3  39832.3/46457.3        362.1
  64      153  37535.7/43370.4  52041.6/54458.3        406.2

===============================================================================
4 · DONDE ESTA EL MURO — bisecado con mount(2) DIRECTO, no con util-linux
   (el mount(8) de util-linux se rinde mucho antes -entre 8 y 12 capas aca-, asi
    que bisecar desde la shell da un muro FALSO; bwrap usa mount(2))
===============================================================================
n=8   lowerdir=776   B  opciones=861   B  -> OK
n=32  lowerdir=3104  B  opciones=3189  B  -> OK
n=40  lowerdir=3875  B  opciones=3960  B  -> OK
n=41  lowerdir=3974  B  opciones=4059  B  -> OK
n=42  lowerdir=4073  B  opciones=4158  B  -> FALLA: No such file or directory
n=44  lowerdir=4266  B  opciones=4351  B  -> FALLA: No such file or directory
n=48  lowerdir=4654  B  opciones=4739  B  -> FALLA: No such file or directory
n=64  lowerdir=6223  B  opciones=6308  B  -> FALLA: No such file or directory

===============================================================================
5 · CUANTAS RUTAS DISTINTAS FALLA UN COMPILADO (strace del propio store)
===============================================================================
$ strace -f -e trace=file cc -O2 -c bench_connector.c   (gcc 16 del host, 12 KB de fuente)
llamadas de fichero trazadas : 2997
llamadas que fallan ENOENT   : 672
RUTAS DISTINTAS que fallan   : 381
  de ellas bajo /usr /lib /opt: 352
rutas distintas con acierto  : 260
