$ cd ../
buddy-watch — bash

user@devops:~$ cat README.md

buddy-watch

# Descripción

buddy-watch (cpp-buddy-watch) es un monitor de fragmentacion de memoria de Linux escrito en C++23 sin dependencias externas. Lee /proc/buddyinfo del kernel y analiza la distribucion de bloques libres por orden en el buddy allocator: las 11 ordenes (0-10) por nodo y zona (DMA, DMA32, Normal...). Calcula por zona la memoria libre total (paginas de 4 KiB), el bloque contiguo maximo (2^orden x 4 KiB, hasta 4 MiB en orden 10), el indice de fragmentacion externa (frag% = 100 x (1 - paginas en bloques de orden >= 4 / total libre)) y los bloques de orden 9 (2 MiB) listos para Transparent Huge Pages (THP). Modo watch (--watch N) con refresco periodico, delta de memoria libre, minimo historico y fragmentacion maxima; --timeout T para salida automatica (ideal para cron/scripts). Salida JSON (--json) con snapshot completo: ts, total_free_pages, total_free_kib, fragmentation_pct, thp_blocks, max_contig_order y zonas con bloques por orden, validada con python3 -m json.tool. Modo --demo con snapshot sintetico realista para contenedores/VMs. --no-color con paleta ANSI mutable que se vacia por completo (grep -c del byte ESC da 0). 26 tests de auto-verificacion (--selftest): parseo de lineas sinteticas y reales de /proc/buddyinfo, consistencia aritmetica (cada zona = suma de bloques x 2^orden), metricas de fragmentacion (todo en orden >= 4 = 0%, solo orden 0 = 100%), unidades humanas, JSON con llaves balanceadas, deltas de watch y parseo de argumentos. Cero dependencias: compilacion directa con g++ -std=c++23.

# Características principales

$ Parseo de /proc/buddyinfo: 11 ordenes de bloques libres (0-10) por nodo y zona (DMA, DMA32, Normal), tolerante a lineas malformadas o con numeros de mas/menos

$ Indice de fragmentacion externa por zona: frag% = 100 x (1 - paginas en bloques >= orden 4 / total libre) — 0% = bloques grandes, 100% = solo bloques de 4 KiB sueltos

$ THP readiness: conteo de bloques de orden 9 (2 MiB), los bloques contiguos que Transparent Huge Pages necesita para asignar paginas grandes

$ Bloque contiguo maximo por zona y global (hasta 4 MiB en orden 10)

$ Modo watch (--watch N) con delta de memoria libre, minimo historico y fragmentacion maxima; --timeout T para salida automatica (ideal para cron)

$ Salida JSON (--json) con snapshot completo validada con python3 -m json.tool

$ --demo con datos sinteticos realistas para contenedores/VMs y --no-color con paleta ANSI mutable (grep del byte ESC = 0)

$ 26 tests de auto-verificacion (--selftest): parseo, consistencia aritmetica, metricas, unidades humanas, JSON y deltas de watch

# Galería

Terminal del proyecto
buddy-watch - Terminal del proyecto
Vista movil
buddy-watch - Vista movil

# Tecnologías utilizadas

C++23