Systems & Full-Stack Developer 2025 Infraestructura / Sistemas Operativos

KernelMonitorSuite

Dashboard de monitoreo en tiempo real con syscalls personalizadas en Linux Kernel 6.12.17, servidor HTTP en C puro (Mongoose) y frontend React 19 — alternativa programática y visual a top/htop.

Linux KernelCCustom SyscallsReact 19Tailwind CSSRechartsMongoosecJSONREST APISystems Programming
7 Syscalls personalizadas implementadas
8 Endpoints REST expuestos
5 s Intervalo de polling del dashboard
hasta 1 024 Procesos monitoreados simultáneamente
30 Puntos históricos por gráfica
Linux 6.12.17 Versión del kernel modificado

Contexto del proyecto

KernelMonitorSuite es un sistema de monitoreo de procesos Linux construido en tres capas desacopladas: (1) Siete syscalls personalizadas implementadas directamente en el árbol fuente del kernel Linux 6.12.17, registradas en la syscall table x86_64 (números 556–562), que exponen métricas avanzadas de procesos, recursos del sistema, tráfico de red y estimación energética directamente desde espacio de kernel; (2) Un servidor HTTP RESTful escrito en C puro utilizando la biblioteca embebida Mongoose como event-loop y cJSON para serialización, que invoca las syscalls vía syscall() y expone 8 endpoints REST con CORS configurado; (3) Un dashboard SPA en React 19 + Vite que consume la API cada 5 segundos, presentando tablas interactivas de procesos con selección múltiple y envío de SIGKILL, gráficas de área para CPU/RAM y tráfico de red, un gráfico de barras de consumo energético por proceso y una línea de tiempo Gantt del ciclo de vida de los procesos. La arquitectura prescinde de runtimes intermedios (Node.js, Python) para minimizar el overhead y maximizar la precisión de los datos extraídos del kernel.

Retos técnicos
  • 7 syscalls personalizadas en el kernel Linux 6.12.17 registradas en arch/x86/entry/syscalls/syscall_64.tbl (números 556–562), incluyendo detailed_process_list, kill_control, sysresources, energy_usage, network_usage, get_process_by_pid y get_all_process_times
  • Cálculo de uso de CPU por proceso con muestreo diferencial de jiffies (delta utime+stime vs. delta_jiffies), sincronizado con spin_lock sobre un array global de snapshots, replicando la precisión de htop desde espacio de kernel
  • Algoritmo de estimación de consumo energético por proceso mediante fórmula ponderada sobre CPU (×13), RAM (×5) e I/O bytes leídos/escritos (×3), accediendo directamente a task->ioac.read_bytes y task->ioac.write_bytes
  • Servidor HTTP escrito en C puro con Mongoose (event-loop single-thread), tabla de rutas estática type-safe (route_entry[]) y gestión dinámica de buffer con realloc para respuestas JSON de tamaño variable (256 KB inicial)
  • Syscall kill_control con validación restrictiva de señales: solo permite SIGKILL y SIGCONT, busca el proceso con find_get_pid() y libera correctamente la referencia con put_task_struct() para evitar memory leaks en kernel space
  • Acceso seguro a estructuras internas del kernel (task_struct, mm_struct) protegido con rcu_read_lock()/rcu_read_unlock() y transferencia kernel→userspace con copy_to_user() y put_user()
  • Frontend React 19 con polling automático por useEffect + setInterval, componente ProcessTimeline que renderiza un Gantt canvas-free calculando posiciones en % sobre rango de tiempo, y AreaDouble con Recharts para métricas duales en tiempo real
Resultados obtenidos
  • Alternativa funcional a top/htop con interfaz web interactiva, control de procesos (kill/continue) desde el browser y visibilidad unificada de CPU, RAM, red y energía en un único dashboard
  • Footprint mínimo en el backend al usar C puro sin runtime intermedios, logrando baja latencia en la serialización de datos del kernel hacia el frontend
  • Arquitectura de tres capas (kernel / C-API / React) totalmente desacoplada: nuevas métricas pueden agregarse implementando una syscall adicional y un endpoint sin modificar el resto del sistema
  • Comprensión y aplicación práctica de los subsistemas internos de Linux: scheduler (task_struct, jiffies, utime/stime), gestión de memoria (RSS via get_mm_rss, swap via MM_SWAPENTS), I/O accounting y estadísticas de red a nivel de dispositivo (rtnl_lock, dev_get_stats)
  • Capacidad de monitorear hasta 1 024 procesos simultáneamente con datos actualizados cada 5 segundos, incluyendo línea de tiempo de inicio/fin por proceso útil para auditoría y profiling
Stack tecnológico
Linux Kernel C (6.12.17) C / Mongoose HTTP cJSON React 19 Vite Tailwind CSS 4 Recharts Axios Framer Motion React Router DOM 7 pnpm