El salto de 13 a 304 millones de lecturas en Linux: Cómo Linus Torvalds usó Claude Code y el dilema de las condiciones de carrera

Análisis técnico sobre la intervención de Claude Code en el subsistema de memoria del kernel Linux: un rendimiento 23 veces superior frente a los riesgos reales de corrupción y latencia en producción.

Fecha de publicación: 2026.10.15

El subsistema de memoria del kernel Linux representa el suelo sobre el que corren prácticamente todos los centros de datos modernos. Cuando una operación básica tropieza en esa capa, el impacto se multiplica en millones de servidores simultáneamente. Durante más de dos años, los desarrolladores del núcleo lidiaron con un cuello de botella silencioso pero asfixiante: la contención provocada por el conteo de referencias en la caché de páginas (page cache). La sorpresa en la comunidad técnica saltó cuando el propio Linus Torvalds recurrió al asistente de inteligencia artificial Claude Code para desatascar este problema, publicando una serie de diez parches bajo la rama experimental noref-filemap-read-with-llm basada en Linux 7.3-rc6.

El resultado numérico inicial desconcertó por su magnitud. En pruebas sintéticas sobre un procesador AMD Ryzen Threadripper de 64 hilos, el rendimiento pasó de 13,3 millones a 304 millones de lecturas por segundo, multiplicando la tasa de transferencia por veintitrés. Sin embargo, en la ingeniería de sistemas críticos ningún incremento de velocidad sale gratis. La revisión por pares de la comunidad destapó rápidamente una condición de carrera (race condition) capaz de exponer datos no escritos a usuarios locales, reabriendo el debate sobre el papel real de la generación de código mediante modelos de lenguaje en el software base donde un solo fallo de sincronización compromete la integridad del sistema.

El cuello de botella de la caché de páginas y el experimento de Torvalds

De la contención en memoria a la intervención asistida por inteligencia artificial

Punto crítico

Saturación en el conteo de referencias (folio)

Varios núcleos compiten por escribir en la misma línea de caché para leer un archivo en memoria, consumiendo el 99,92% del tráfico entre núcleos.

Intervención técnica

Reescritura de la ruta con Claude Code

Linus Torvalds dirige al asistente para eliminar el conteo de referencias en lecturas buffered usando el mecanismo RCU.

Fricción operativa

Aparición de condiciones de carrera

Los revisores detectan fugas de datos potenciales por extensiones de archivo concurrentes y regresiones en páginas no mapeadas.

304 millones de lecturas por segundo: El balance numérico entre rendimiento bruto y regresiones de ciclo

Para dimensionar el problema que Torvalds intentaba resolver, conviene imaginar una autopista de peaje donde cada conductor debe bajar del coche y anotar su nombre en una libreta antes de cruzar la barrera, incluso si solo va a mirar la carretera. En el kernel Linux, cada vez que un hilo del procesador lee un fragmento de archivo alojado en memoria (buffered read), debe incrementar y decrementar un contador atómico en la estructura de la página (conocida como folio). Cuando decenas de núcleos intentan actualizar ese mismo contador al mismo tiempo, las CPUs se detienen esperando la exclusividad de la línea de caché.

En 2024, Matthew Wilcox, ingeniero de Oracle y responsable histórico de la gestión de memoria en Linux, documentó este atasco tras detectarlo en una carga de trabajo empresarial real. Las mediciones en el equipo portátil de Torvalds (un procesador Intel Core i7-8565U) demostraron que la contención de este contador explicaba el 99,92% de las invalidaciones de caché cruzada (cross-core load HITMs) durante pruebas de ocho hilos. Torvalds admitió haber utilizado durante dieciocho meses una versión defectuosa de su propia solución sin lograr estabilizarla, mientras otros desarrolladores tropezaban con problemas similares.

La serie de parches generada con la ayuda de Claude Code eliminó por completo estas operaciones de conteo en la ruta estándar de lectura, apoyándose en el mecanismo RCU (Read-Copy Update) para proteger la página mientras se copia al espacio de usuario. Los datos obtenidos en pruebas sintéticas reflejaron un desplome radical en el consumo de ciclos de reloj.

Escenario de pruebaMétricas con kernel estándarMétricas con serie RCU-free (Claude Code)Variación neta de rendimientoImpacto en arquitectura
Intel Core i7 (8 hilos)10 millones lecturas/seg33 millones lecturas/seg+230% transferenciaCiclos por lectura reducidos de 2.950 a 725
AMD Threadripper (64 hilos)13,3 millones lecturas/seg304 millones lecturas/seg+2.185% (factor 23x)Ciclos por lectura reducidos de–20.000 a 735
Lectura pequeña no mapeada (16 bytes)4.150 ciclos de reloj6.550 ciclos de reloj+57,8% penalizaciónFallo adicional de página antes de volver a la ruta previa
Límite de páginas en cola por CPUSin umbral RCU forzadoForzado a partir de 1.024 páginasAceleración de gracia RCUIncremento de interrupciones de sistema bajo carga
Contención de caché (HITMs)99,92% del tráfico entre núcleosCercano al 0% en la ruta calienteEliminación casi total de bloqueosDesaparición del rebote de líneas de caché L3

Comparativa de ciclos de CPU consumidos por lectura

Menor valor implica mayor eficiencia en la ejecución del núcleo

Kernel estándar Parches RCU-free
Intel Core i7 (8 hilos) Kernel estándar 2.950 ciclos vs Parches RCU-free 725 ciclos (Reducción del 75,4%)
2.950 ciclos
725 ciclos
AMD Threadripper (64 hilos) Kernel estándar 20.000 ciclos vs Parches RCU-free 735 ciclos (Reducción del 96,3%)
20.000 ciclos
735 ciclos

A pesar de los espectaculares números en pruebas sintéticas aisladas, el propio Torvalds advirtió de que la ganancia en cargas de trabajo reales será mucho más moderada. La razón técnica estriba en que el código real de producción realiza operaciones adicionales como procesamiento de datos, cálculos en espacio de usuario y llamadas de red que diluyen el peso porcentual del acceso a memoria. Asimismo, la serie introdujo un coste imprevisto: cuando un proceso lee datos sobre una página de memoria que aún no está mapeada en su espacio de direcciones, el nuevo mecanismo sufre un fallo adicional antes de retroceder a la ruta tradicional, disparando el coste de lecturas de 16 bytes de 4.150 a 6.550 ciclos de CPU.

Las tres fricciones operativas que amenazan la infraestructura empresarial

Llevar una optimización de microarquitectura al mundo de los servidores corporativos exige medir algo más que la velocidad máxima en un banco de pruebas. La introducción de mecanismos basados en RCU para la lectura de archivos altera los supuestos sobre los que descansan las bases de datos transaccionales, los motores de almacenamiento en memoria y los hipervisores de virtualización.

Impacto operativo del cuello de botella en sistemas de alto paralelismo
Contención en L3
99,92%
Líneas de caché saturadas por el contador atómico en procesadores multinúcleo
Pico sintético
23x
Aumento de lecturas por segundo en entornos sin contención de red ni disco
Penalización latencia
+57%
Sobrecoste en ciclos para lecturas aisladas de pequeño tamaño no alineadas

La factura del hardware infrautilizado por contención atómica

En servidores modernos con 64, 128 o más núcleos lógicos, la sincronización entre cachés representa el mayor devorador de vatios. Cuando un motor como Redis, PostgreSQL o un proxy web de alto rendimiento atiende miles de conexiones por segundo leyendo archivos comunes (como certificados, índices o tablas de búsqueda), la máquina no se satura por falta de potencia de cálculo, sino porque los núcleos pasan la mayor parte del tiempo esperando la propiedad de las líneas de memoria. La eliminación de este bloqueo permite que infraestructuras densas alcancen su techo teórico sin requerir escalado horizontal prematuro, lo que en despliegues a gran escala reduce la necesidad de aprovisionar nodos adicionales para absorber picos de tráfico.

La trampa de la cola de 1.024 páginas y la degradación del tiempo de respuesta

La solución propuesta no elimina la necesidad de liberar memoria; simplemente posterga esa tarea en el tiempo. Para evitar que la memoria de un servidor se agote mientras los lectores acceden a páginas sin registrar su presencia, el sistema introduce una bandera denominada PG_rcu_free. Si un procesador encola más de 1.024 páginas pendientes de liberación, el kernel fuerza un periodo de gracia acelerado (expedited RCU grace period). Este mecanismo envía interrupciones interprocesador (IPI) a todos los demás núcleos del sistema, deteniendo momentáneamente sus tareas para sincronizar el estado global de la memoria. En aplicaciones que exigen latencias predecibles en el percentil 99, como plataformas de negociación financiera o motores de inferencia en tiempo real que monitorizan su infraestructura mediante herramientas como Datadog, estos periodos de gracia forzados pueden provocar microcongelaciones difíciles de rastrear.

La brecha de seguridad latente: Datos no inicializados expuestos al usuario

El peligro más severo descubierto durante la revisión por pares no fue de rendimiento, sino de consistencia y seguridad. Kiryl Shutsemau, desarrollador especializado en la gestión de memoria de Linux, descubrió una condición de carrera crítica dentro de la función filemap_read_rcu_batch(). La secuencia del fallo ilustra la fragilidad del código de bajo nivel:

  • Un proceso lector inicia la copia de datos desde una página protegida por RCU.
  • Mientras la copia está en curso, otro proceso trunca el archivo, reemplaza la página y amplía el tamaño registrado del archivo (i_size).
  • Debido al desfase temporal entre la verificación del tamaño y la lectura real de los bytes, el lector puede recibir fragmentos de memoria que nunca fueron escritos por el propietario del archivo.

En un entorno multiinquilino o en contenedores compartidos, este comportamiento rompe el aislamiento del sistema operativo y abre la puerta a fugas de información confidencial residual entre procesos de distintos usuarios.

El debate técnico entre Wilcox, Shutsemau y Torvalds: Discrepancias sobre el diseño de la memoria

El desarrollo del kernel Linux avanza a través de una revisión pública sin concesiones. Cuando Torvalds presentó la serie de diez parches, el diseño propuesto generó fricciones técnicas inmediatas con otros arquitectos clave del subsistema de memoria, evidenciando que el código generado por Claude Code había resuelto el problema de velocidad pero esquivando restricciones estructurales del propio núcleo.

Discrepancia arquitectónica en la gestión de folios

Diferencias de criterio entre el creador del kernel y los mantenedores de memoria

Propuesta Torvalds / Claude Code

Bandera PG_rcu_free
  • • Marca la página directamente con una bandera de estado mientras sigue mapeada
  • • Cubre operaciones destructivas como truncate y hole-punch
  • • Añade presión al espacio limitado de bits de banderas en arquitecturas de 32 bits

Contrapropuesta Matthew Wilcox (Oracle)

Tipado de página y lista inactiva
  • • Utiliza un tipo de página estructurado en lugar de consumir otra bandera
  • • Retrasa la liberación solo para folios en la lista inactiva del LRU
  • • Torvalds la rechazó por dejar desprotegidas las operaciones de vaciado de archivos
Veredicto Editorial: Compromiso provisional: restringir el mecanismo a sistemas de 64 bits y sincronizar la lectura de i_size.

Matthew Wilcox cuestionó la creación de la bandera PG_rcu_free. Las banderas de página en Linux son uno de los recursos más escasos del núcleo: quedan muy pocos bits libres en los encabezados que describen la memoria física. Wilcox propuso en su lugar emplear el sistema de tipos de página (page types) y retrasar únicamente la liberación de folios que residen en la lista inactiva.

Torvalds rechazó tajantemente la alternativa de Wilcox argumentando que la bandera debe establecerse en el momento exacto en que la página aún puede ser mapeada en el espacio de usuario. Según Torvalds, confiar únicamente en la lista inactiva dejaría descubiertos escenarios frecuentes donde un proceso trunca un archivo o realiza un vaciado puntual de bloques (hole-punching), provocando accesos a punteros colgantes si el lector aún no ha terminado de copiar los datos.

Para desbloquear el conflicto sin comprometer la estabilidad en arquitecturas heredadas, Kiryl Shutsemau propuso limitar el uso de la nueva bandera exclusivamente a sistemas de 64 bits, donde el espacio de bits de estado no sufre las estrecheces de los procesadores antiguos. Esta postura contó con el respaldo explícito de David Hildenbrand, ingeniero de Arm y mantenedor de la gestión de memoria. Finalmente, ante la complejidad de resolver la condición de carrera en filemap_read_rcu_batch(), Torvalds cedió el testigo y transfirió el desarrollo posterior de los parches al propio Shutsemau, quien rediseñó la función para anticipar la lectura del tamaño del archivo y unificar las comprobaciones de validez de las páginas antes de autorizar la entrega de datos a las aplicaciones.

Criterios de idoneidad: Cuándo incorporar agentes de código a la ingeniería de sistemas críticos

El caso protagonizado por Torvalds marca un hito histórico: el creador de Linux, tradicionalmente escéptico ante las promesas exageradas de la industria del software, recurrió formalmente a un asistente conversacional para resolver un problema de concurrencia que él mismo no había podido cerrar en dieciocho meses. Sin embargo, el desenlace del proceso ofrece lecciones pragmáticas sobre los límites operativos de estas herramientas en capas críticas de infraestructura.

Árbol de decisión para el uso de modelos de lenguaje en desarrollo de sistemas

¿Qué nivel de acoplamiento y concurrencia exige el módulo a modificar?

Concurrencia compleja y memoria compartida (Kernel / Motores DB)

Uso asistido con supervisión exhaustiva

La IA genera prototipos y pruebas; la validación humana de carreras y consistencia es obligatoria.

Equipos con séniors dedicados a la revisión
Lógica de negocio, integración y tooling (APIs / Automatización)

Adopción directa con tests automatizados

Entornos donde los fallos no provocan corrupción silenciosa ni fugas entre procesos.

Desarrollo general de aplicaciones

Cuándo encaja la asistencia de IA en desarrollo de bajo nivel

  • Existencia de un marco de pruebas sintéticas predefinido: Torvalds no pidió a la herramienta que diseñara una solución a ciegas; contaba con entornos de prueba locales e instrumentalización precisa de hardware para verificar si la contención bajaba o subía de forma inmediata tras cada iteración.
  • Dirección técnica milimétrica por un experto de dominio: Claude Code no decidió utilizar RCU por iniciativa propia. La arquitectura general, la estrategia de desacoplamiento y las restricciones de diseño fueron impuestas paso a paso por Torvalds, quien utilizó el modelo como un acelerador de escritura y refactorización, no como un arquitecto autónomo.
  • Aislamiento en ramas experimentales descartables: El código nunca se envió directamente a la rama principal de producción. Permaneció en un entorno aislado (noref-filemap-read-with-llm) diseñado para ser escrutado y desarmado por la comunidad antes de plantear su fusión definitiva.

Cuándo se debe frenar la adopción en código de infraestructura

  • Ausencia de capacidades internas de auditoría concurrente: Si el equipo no cuenta con ingenieros capaces de detectar a simple vista una condición de carrera entre una escritura de metadatos y una lectura diferida, delegar código concurrente en un modelo generativo introduce vulnerabilidades silenciosas que los compiladores estándar no pueden advertir.
  • Sistemas con restricciones estrictas de latencia de cola (p99/p99.9): Las soluciones generadas por modelos de lenguaje tienden a optimizar el rendimiento medio a costa de introducir mecanismos de compensación (como limpiezas por lotes o periodos de gracia forzados) que disparan los tiempos de respuesta en momentos de saturación extrema.
  • Entornos donde la arquitectura de memoria difiere entre plataformas: Un parche que funciona de manera impecable en la coherencia de caché de un procesador x86 puede quebrar por completo bajo el modelo de memoria débil de arquitecturas como Arm o RISC-V. Los modelos actuales carecen de la capacidad de verificar intuitivamente las implicaciones de barreras de memoria en plataformas heterogéneas sin una supervisión humana continua.
Boletín Semanal

Resumen Semanal de Tecnología y Datos de Negocio

Análisis de software verificado, consideraciones clave y métricas de comercio cada semana.

Cancela tu suscripción en 1 clic cuando quieras. Cero spam.

* Es posible que recibamos una comisión de afiliado por los enlaces en este informe, sin coste adicional para usted ni impacto en nuestros datos.