Hanademi

The metrics agent schedulers cannot see

17 slides · 29 min · 1 minute ago language
ENES
theme
LightDark
view
DeckTableTalk
brand
HanademiPlatzi
The metrics agent schedulerscannot seeMade for Carlos Barrios, by Hanademi
Las métricas que losschedulers de agentes no venMade for Carlos Barrios, by Hanademi
HTTP/2 carries the largest share of webtrafficShare of web traffic by HTTP version at the close of Q2 2026.Made for Carlos Barrios, by HanademiSources: technologychecker.io.UnitPercent of web trafficHTTP/1.x27.8%HTTP/251.2%HTTP/321%
Start at the transport layer. HTTP/2 carried 51.2% of reported web traffic at the close of Q2 2026, more than HTTP/1.x or HTTP/3. One connection may contain many concurrent streams, so connection count alone is too blunt for agent scheduling.
HTTP/2 transporta la mayor parte deltráfico webParticipación del tráfico web por versión de HTTP al cierre del segundo trimestre de 2026.Made for Carlos Barrios, by HanademiFuentes: technologychecker.io.UnidadPorcentaje del tráfico webHTTP/1.x27,8 %HTTP/251,2 %HTTP/321 %
Empecemos por la capa de transporte. HTTP/2 transportó el 51,2% del tráfico web reportado al cierre del segundo trimestre de 2026, más que HTTP/1.x o HTTP/3. Una conexión puede contener muchos streams concurrentes, así que contar conexiones no basta para programar agentes.
The signals behind the schedulerMade for Carlos Barrios, by HanademiHTTP/2A protocol that carries many independent streams through one connection.p99 latencyThe delay that 99% of requests finish within.GCAutomatic cleanup of memory no longer used by a program.GOGCA Go setting that targets heap growth between collections.microVMA small virtual machine designed for fast, isolated execution.KV cacheStored model attention data that can avoid repeated computation.
These terms mark the layers the scheduler must understand. No single metric spans them all. The central design problem is joining their signals without mistaking reservation, activity, pressure, and recoverability for the same thing.
Las señales detrás del schedulerMade for Carlos Barrios, by HanademiHTTP/2Un protocolo que transporta muchos streams independientes por una conexión.latencia p99El retraso dentro del cual termina el 99% de las solicitudes.GCLimpieza automática de memoria que un programa ya no utiliza.GOGCUn ajuste de Go que regula el crecimiento del heap entre recolecciones.microVMUna máquina virtual pequeña diseñada para ejecución rápida y aislada.caché KVDatos de atención almacenados que pueden evitar cómputo repetido.
Estos términos marcan las capas que el scheduler debe entender. Ninguna métrica las cubre todas. El problema central de diseño es unir sus señales sin confundir reserva, actividad, presión y capacidad de recuperación.
The hardware view is incompleteA row of server towers in a data-center-like setting.Sources: GPU Autoscaling on Kubernetes: The LLM Inference Stack. cloudai.pt.
Physical infrastructure alone cannot reveal whether agent workloads are computing, waiting, or under runtime pressure.
La vista del hardware está incompletaUna fila de torres de servidores en un entorno similar a un centro de datos.Fuentes: GPU Autoscaling on Kubernetes: The LLM Inference Stack. cloudai.pt.
La infraestructura física por sí sola no revela si las cargas de agentes están computando, esperando o bajo presión del runtime.
Agent lifecycle decisions run on differentclocksReported lifecycle durations in seconds: provisioning, idle trigger, and later accelerator reclamation.Made for Carlos Barrios, by HanademiSources: agent-sandbox.sigs.k8s.io.; tianpan.co.The 2-second provisioning figure and the scale-down incident come from separate sources and remain separate labeled observations.UnitSeconds90Reclaim accelerator45Trigger scale-down2Provision sandbox
Agent Sandbox reports provisioning personal Hermes Agents in about 2 seconds. A separate incident used 45 idle seconds to scale down, then reclaimed an H100 90 seconds later. That decision erased a 180k-token job after 28 minutes, proving that network silence and completed work are not the same state.
Las decisiones del ciclo agéntico operan conrelojes distintosDuraciones reportadas del ciclo en segundos: aprovisionamiento, activación por inactividad y recuperaciónposterior del acelerador.Made for Carlos Barrios, by HanademiFuentes: agent-sandbox.sigs.k8s.io.; tianpan.co.La cifra de aprovisionamiento de 2 segundos y el incidente de reducción provienen de fuentes distintas y permanecen como observacionesetiquetadas separadas.UnidadSegundos90Recuperar acelerador45Activar reducción2Aprovisionar sandbox
Agent Sandbox informa de un aprovisionamiento de agentes Hermes personales en unos 2 segundos. En otro incidente, 45 segundos sin tráfico activaron la reducción y una H100 se recuperó 90 segundos después. La decisión eliminó una tarea de 180 mil tokens tras 28 minutos, lo que demuestra que el silencio de red y el trabajo terminado no son el mismo estado.
Nomad exposed 2 demand metrics its plugindid not useCPU and memory demand metrics for blocked or unplaced evaluations, based on Nomad Autoscaler issuereports.Made for Carlos Barrios, by HanademiSources: github.com.; github.com.The zero encodes the issue report that the plugin does not consume either of the 2 exposed metrics.UnitDemand metricsExposed by Nomad · 2Consumed by plugin · 0
Nomad already exposed CPU and memory demand from blocked or unplaced evaluations. Issue #584 reported that the autoscaler plugin did not consume those 2 metrics. A separate issue described missing new-server capacity accounting, reinforcing the same lesson: telemetry must reach the scaling decision.
Nomad expuso 2 métricas de demanda quesu plugin no usóMétricas de demanda de CPU y memoria para evaluaciones bloqueadas o sin ubicación, según reportes deNomad Autoscaler.Made for Carlos Barrios, by HanademiFuentes: github.com.; github.com.El cero representa el reporte del issue de que el plugin no consume ninguna de las 2 métricas expuestas.UnidadMétricas de demandaExpuestas por Nomad · 2Consumidas por el plugin · 0
Nomad ya exponía demanda de CPU y memoria de evaluaciones bloqueadas o sin ubicación. El issue #584 informó que el plugin de autoescalado no consumía esas 2 métricas. Otro issue describió capacidad de servidores nuevos no contabilizada, reforzando la misma lección: la telemetría debe llegar a la decisión de escalado.
A large platform added disk and networkthrottling after moving thousands of nodesto Kubernetes 1.22.The case shows why CPU and memory reservations cannot stand in for disk and networkpressure.Sources: dev.to.
The platform moved thousands of nodes to Kubernetes 1.22, then added disk and network throttling. Default scheduling did not capture the I/O pressure causing noisy-neighbor problems. Agent-aware placement needs those pressure signals before it adds density.
Sources
Una plataforma grande añadió límites dedisco y red tras migrar miles de nodos aKubernetes 1.22.El caso muestra por qué las reservas de CPU y memoria no pueden sustituir la presiónde disco y red.Fuentes: dev.to.
La plataforma migró miles de nodos a Kubernetes 1.22 y después añadió límites de disco y red. El scheduling estándar no capturaba la presión de E/S que causaba problemas entre vecinos. La asignación consciente de agentes necesita esas señales antes de aumentar la densidad.
Fuentes
Fly routing stranded healthy capacityMachine counts reported in a 2026 Fly.io routing incident; states overlap and are not additive.Made for Carlos Barrios, by HanademiSources: community.fly.io.UnitMachinesHealthy Machines8Machine serving traffic1Healthy idle Machine1
The report described 8 healthy Machines, but all traffic reached one Machine while another stayed idle. The problem was not a lack of capacity. It was a routing decision that could not see enough of the application state.
El routing de Fly dejó capacidad saludablesin usarConteos de Machines reportados en un incidente de routing de Fly.io de 2026; los estados se superponen yno son sumables.Made for Carlos Barrios, by HanademiFuentes: community.fly.io.UnidadMachinesMachines saludables8Machine atendiendo tráfico1Machine saludable inactiva1
El reporte describió 8 Machines saludables, pero todo el tráfico llegó a una sola mientras otra permaneció inactiva. El problema no era la falta de capacidad. Era una decisión de routing que no podía ver suficiente estado de la aplicación.
On April 9, 2026, Fly Proxy beganwarning WebSocket clients beforestopping Machines.Graceful connection handoff is one scheduler input, not a complete measure of whether aworker is safe to reclaim.Sources: community.fly.io.
Fly Proxy added WebSocket GoAway frames before stopping or suspending Machines. That gives clients time to reconnect elsewhere. The change handles network lifecycle more safely, but application health still requires deeper telemetry.
El 9 de abril de 2026, Fly Proxy empezóa avisar a clientes WebSocket antes dedetener Machines.El relevo ordenado de conexiones es una entrada del scheduler, no una medida completade si un worker puede recuperarse con seguridad.Fuentes: community.fly.io.
Fly Proxy añadió tramas WebSocket GoAway antes de detener o suspender Machines. Eso da tiempo a los clientes para reconectarse en otro lugar. El cambio mejora la seguridad del ciclo de red, pero la salud de la aplicación todavía exige telemetría más profunda.
p99 latency rose from 20 to 200 msExpected and observed p99 service latency from one run-queue delay incident.Made for Carlos Barrios, by HanademiSources: michal-drozd.com.UnitMillisecondsExpected20Observed20010x
The service reported only 30% CPU, which looked comfortable. Yet p99 latency reached 200 milliseconds instead of 20. Scheduler run-queue delay was the hidden wait, and ordinary CPU profiling did not expose it.
La latencia p99 subió de 20 a 200 msLatencia p99 esperada y observada de un incidente de espera en la cola del scheduler.Made for Carlos Barrios, by HanademiFuentes: michal-drozd.com.UnidadMilisegundosEsperada20Observada20010x
El servicio reportó solo 30% de CPU, una cifra que parecía cómoda. Sin embargo, la latencia p99 llegó a 200 milisegundos en vez de 20. La espera en la cola del scheduler estaba oculta y el perfilado normal de CPU no la mostró.
A healthy endpoint at 95% GPU use still took11 seconds to produce the first token.Queue state and cache contention must accompany accelerator utilization in placementdecisions.Sources: ingero.io.
The endpoint looked healthy, and GPU utilization reached 95%. Users still waited 11 seconds for the first token. Prefix-cache head-of-line blocking made aggregate accelerator use a poor proxy for user-visible delay.
Sources
Un endpoint saludable con 95% de usode GPU tardó 11 segundos en producirel primer token.El estado de la cola y la contención de caché deben acompañar la utilización delacelerador en las decisiones de asignación.Fuentes: ingero.io.
El endpoint parecía saludable y la utilización de GPU llegó al 95%. Aun así, los usuarios esperaron 11 segundos por el primer token. El bloqueo de cabecera en la caché de prefijos convirtió el uso agregado del acelerador en un mal indicador del retraso visible.
Fuentes
Python can free objects without freeingRAM, while GOGC 100 is a growth target.Object reclamation, heap-growth targets, and resident-memory reclamation are differentsignals.Sources: Python 3.14.6 documentation.; Add huge pages support for pymalloc.; runtime package, Go Packages.
CPython can reclaim unreachable objects without returning equivalent resident memory to the operating system. Go's default GOGC value of 100 is also easy to misread because it targets heap growth, not a fixed ceiling. Placement must use operating-system pressure and runtime behavior together.
Python puede liberar objetos sinliberar RAM, mientras GOGC 100 esuna meta de crecimiento.La recuperación de objetos, las metas de crecimiento del heap y la liberación dememoria residente son señales distintas.Fuentes: Python 3.14.6 documentation.; Add huge pages support for pymalloc.; runtime package, Go Packages.
CPython puede recuperar objetos inalcanzables sin devolver memoria residente equivalente al sistema operativo. El valor predeterminado de GOGC, 100, también puede confundir porque regula el crecimiento del heap, no un techo fijo. La asignación debe combinar la presión del sistema operativo con el comportamiento del runtime.
Firecracker targets startup below125 ms, while recovery still spans 2distinct state layers.The Firecracker figure is a design target from one source. The 2-layer state distinctioncomes from a separate architectural source, so the facts remain separate.Sources: firecracker/SPECIFICATION.md at main.; docs.temporal.io.
Firecracker publishes a startup target below 125 ms. Separately, the architecture distinguishes 2 state layers, durable workflow state and sandbox machine state, which need explicit identity and checkpoint links.
Firecracker apunta a un arranque menor de125 ms, mientras la recuperación abarca 2capas de estado distintas.La cifra de Firecracker es un objetivo de diseño de una fuente. La distinción de 2 capasde estado proviene de otra fuente arquitectónica, por lo que los hechos permanecenseparados.Fuentes: firecracker/SPECIFICATION.md at main.; docs.temporal.io.
Firecracker publica un objetivo de arranque menor de 125 ms. Por separado, la arquitectura distingue 2 capas de estado, el estado durable del workflow y el estado de la máquina sandbox, que necesitan vínculos explícitos de identidad y checkpoints.
Modeled snapshot reads slow as imagesgrowSequential read time for 1, 4, and 8 GiB, assuming a constant 3 GB/s.Made for Carlos Barrios, by HanademiIllustrative calculation using an assumed constant sequential rate of 3 GB/s.UnitSeconds1 GiB image0.34 GiB image1.38 GiB image2.7
At the assumed 3 GB/s, reading 1 GiB takes about 0.33 seconds. Reading 8 GiB takes about 2.67 seconds. Real restoration can be slower because storage contention, touched pages, lazy loading, and cache rewarming add more work.
Las lecturas modeladas se ralentizan alcrecer la imagenTiempo de lectura secuencial para 1, 4 y 8 GiB, suponiendo 3 GB/s constantes.Made for Carlos Barrios, by HanademiCálculo ilustrativo con una tasa secuencial constante supuesta de 3 GB/s.UnidadSegundosImagen de 1 GiB0,3Imagen de 4 GiB1,3Imagen de 8 GiB2,7
Con los 3 GB/s supuestos, leer 1 GiB tarda unos 0,33 segundos. Leer 8 GiB tarda unos 2,67 segundos. La restauración real puede ser más lenta porque la contención, las páginas tocadas, la carga perezosa y el recalentamiento añaden trabajo.
Modeled copy-on-write savings collapse asbranches divergeAdded physical memory for 4 branches of a shared 4 GiB image at illustrative dirty-page shares.Made for Carlos Barrios, by HanademiIllustrative model for 4 branches of a 4 GiB shared image.UnitGiB added14.490% pages changed850% pages changed1.610% pages changed
Linux fork initially lets 4 children share copy-on-write pages. The modeled benefit fades as each branch changes different pages. At 90% changed pages, the example adds about 14.4 GiB beyond the shared 4 GiB image.
El ahorro modelado de copy-on-write caecuando las ramas divergenMemoria física añadida por 4 ramas de una imagen compartida de 4 GiB con porcentajes ilustrativos depáginas modificadas.Made for Carlos Barrios, by HanademiModelo ilustrativo para 4 ramas de una imagen compartida de 4 GiB.UnidadGiB añadidos14,490% de páginas cambiadas850% de páginas cambiadas1,610% de páginas cambiadas
fork en Linux permite inicialmente que 4 procesos hijos compartan páginas copy-on-write. El beneficio modelado disminuye cuando cada rama cambia páginas distintas. Con 90% de páginas cambiadas, el ejemplo añade unos 14,4 GiB además de la imagen compartida de 4 GiB.
vLLM reported up to 24x throughput onselected workloadsIndexed throughput from the 2023 vLLM result, with Hugging Face Transformers set to 1.Made for Carlos Barrios, by HanademiSources: vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention.The comparator is indexed to 1 so the source-reported maximum of 24 times can be displayed.UnitThroughput multiple010201Hugging Face baseline24vLLM reported maximumIndexed baseline
The 2023 vLLM paper reported up to 24 times the throughput of Hugging Face Transformers on selected workloads. That maximum made KV-cache efficiency economically important. It does not promise the same result for every model, workload, release, or deployment.
vLLM reportó hasta 24x de throughput encargas seleccionadasThroughput indexado del resultado de vLLM de 2023, con Hugging Face Transformers fijado en 1.Made for Carlos Barrios, by HanademiFuentes: vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention.El comparador se indexa en 1 para mostrar el máximo de 24 veces reportado por la fuente.UnidadMúltiplo de throughput010201Línea base de Hugging Face24Máximo reportado de vLLMLínea base indexada
El artículo de vLLM de 2023 reportó hasta 24 veces el throughput de Hugging Face Transformers en cargas seleccionadas. Ese máximo volvió económicamente importante la eficiencia de la caché KV. No promete el mismo resultado para cada modelo, carga, versión o despliegue.
Prove the scheduler across five load levelsIllustrative proof-of-concept concurrency sweep from 125 to 1,000 simultaneous agents.Made for Carlos Barrios, by HanademiSources: Borg, Omega, and Kubernetes, Communications of the ACM.Illustrative concurrency levels for a controlled proof of concept, not a universal agents-per-vCPU threshold.UnitConcurrent agents12512525025050050075075010001,000
The scheduler earns its complexity only through a controlled comparison. Replay identical trajectories at 125, 250, 500, 750, and 1,000 agents. Measure completions, tail latency, pressure, failures, isolation, and fully loaded cost, then compare every result with a competently tuned conventional baseline.
Demuestra el scheduler con cinco niveles decargaBarrido ilustrativo de concurrencia para la prueba de concepto, de 125 a 1.000 agentes simultáneos.Made for Carlos Barrios, by HanademiFuentes: Borg, Omega, and Kubernetes, Communications of the ACM.Niveles ilustrativos de concurrencia para una prueba de concepto controlada, no un umbral universal de agentes por vCPU.UnidadAgentes concurrentes12512525025050050075075010001.000
El scheduler solo justifica su complejidad mediante una comparación controlada. Reproduce trayectorias idénticas con 125, 250, 500, 750 y 1.000 agentes. Mide terminaciones, latencia de cola, presión, fallos, aislamiento y costo total, y compara cada resultado con una línea base convencional bien ajustada.
In summaryMade for Carlos Barrios, by HanademiSources: firecracker/SPECIFICATION.md at main.; vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention.; tianpan.co.; ingero.io.;agent-sandbox.sigs.k8s.io.; community.fly.io.Firecracker published design targets below 125 milliseconds startup and below 5 MiB memory overhead per microVM.The 2023 vLLM paper reported up to 24 times higher throughput than Hugging Face Transformers on selected workloads.After 45 idle seconds, KEDA scaled from one replica to zero; an H100 was reclaimed 90 seconds later, erasing a 180k-token, 28-minute job.A healthy vLLM endpoint and 95% GPU utilization coincided with an 11-second time to first token caused by prefix-cache head-of-line blocking.Agent Sandbox provisions personal Hermes Agents in about 2 seconds, suspends them when idle, and preservesconversations, memory, and skills on PVC storage.A 2026 Fly.io report describes all traffic reaching one Machine despite eight healthy Machines, a 20-request soft limit, and an idle Machine.
The value of the research is not only what each source knew, but what became visible when their evidence was combined.
En resumenMade for Carlos Barrios, by HanademiFuentes: firecracker/SPECIFICATION.md at main.; vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention.; tianpan.co.; ingero.io.;agent-sandbox.sigs.k8s.io.; community.fly.io.Firecracker publicó objetivos de arranque inferiores a 125 milisegundos y sobrecarga menor a 5 MiB por microVM.El artículo de vLLM de 2023 reportó hasta 24 veces más throughput que Hugging Face Transformers en cargas seleccionadas.Tras 45 segundos sin tráfico, KEDA redujo de una réplica a cero; 90 segundos después se recuperó la H100 ydesapareció una tarea de 180 mil tokens y 28 minutos.Un endpoint saludable de vLLM y una utilización de GPU del 95% coincidieron con 11 segundos hasta el primer token porbloqueo de cabecera en la caché de prefijos.Agent Sandbox aprovisiona agentes Hermes personales en unos 2 segundos, los suspende cuando están inactivos yconserva conversaciones, memoria y habilidades en almacenamiento PVC.Un reporte de Fly.io de 2026 describe todo el tráfico llegando a una sola Machine pese a ocho Machines saludables, unlímite flexible de 20 solicitudes y una Machine inactiva.
El valor de la investigación no está solo en cada fuente, sino en lo que apareció al combinar sus evidencias.

The research behind this deck

Connection count hides the activity and pressure inside each HTTP/2 stream. The scheduler needs signals from networks, runtimes, memory, and model serving.

Key findings

The argument

This research is published in English and Spanish. Ver en español

La investigación detrás de esta presentación

El conteo de conexiones oculta la actividad y presión dentro de cada stream HTTP/2. El scheduler necesita señales de redes, runtimes, memoria y servicio de modelos.

Hallazgos clave

El argumento

Esta investigación se publica en inglés y español. Read in English