domingo, 27 de septiembre de 2026

MADVISE gestionando L3

Usando un Intel N5100 (arquitectura Tremont) darle caña al reloj suele chocar con las barreras de siempre: el límite térmico (thermal throttling, en mi caso sin ventilador) y la reducida capacidad de las memorias intermedia integradas en el chip.

Parece lento en ocasiones, pero no es porque la CPU no corra con ciclos de cómputo, es lo típico de una latencia producto de una gestión de memoria ineficiente. Linux y la interacción con el caché L3 resulta determinante.


El cuello de botella de la caché L3

En cualquier procesador moderno, la latencia de acceso escala exponencialmente a medida que nos alejamos del núcleo: L1 y L2 caché, unos pocos nanosegundos; sumamos L3 con unos pocos nanosegundos más, 20 o 30 ns; añadimos tiempo de la RAM, entre 60 y 100 ns, más los que sigan del proceso.
En chips de bajo consumo, la Caché L3 actúa como el buffer crítico que absorbe el impacto de las peticiones antes de penalizar al bus de memoria principal. Sin embargo, su tamaño es sumamente pequeño (frecuentemente de apenas 4MB compartidos entre cuatro núcleos). Cada vez que ocurre un L3 Cache Miss (el dato requerido no está en la L3), la CPU debe detener la ejecución de la tubería (pipeline stall) durante decenas de ciclos de reloj esperando a que el controlador de memoria traiga la línea desde la RAM física.


THP en modo always y la compactación de memoria

El kernel de Linux integra una característica denominada Transparent Huge Pages (THP). Su objetivo teórico es optimizar el rendimiento reemplazando las páginas tradicionales de memoria virtual de 4KB por páginas contiguas de 2MB. Al usar páginas de 2MB, se reduce la cantidad de entradas necesarias en el TLB (Translation Lookaside Buffer), el buffer de traducción de direcciones virtuales a físicas integrado en la propia CPU. Sin embargo, cuando THP está configurado en modo global always dentro de un sistema con poca Caché L3 y recursos limitados, se desencadena un efecto colateral severo:

  • Memory Compaction (Compactación asíncrona): Para entregar una página contigua de 2MB, el kernel necesita encontrar un bloque de memoria física completamente sin fragmentar. Si no lo encuentra, invoca al demonio kcompactd para reordenar la RAM en tiempo real.
  • Inundación de la Caché L3 (Cache Pollution): Mover y copiar bloques masivos de 2MB para consolidar páginas llena la reducida Caché L3 de datos de gestión administrativa del kernel, expulsando (evicting) los datos de las aplicaciones en ejecución.
  • Pérdida de granularidad: Cargar bloques de 2MB para procesos que solo necesitan acceder a unos pocos kilobytes desperdicia espacio en la L3, aumentando drásticamente la tasa de fallos de caché (cache miss rate).

lunes, 21 de septiembre de 2026

ZSWAP da realmente vida a tu modesto miniPC

Si tienes un MiniPC por casa con 4 u 8 GB de RAM y le pides que lo dé todo, la solución clásica siempre ha sido usar la SWAP (el espacio de intercambio en disco). Pero seamos sinceros: hacer que un MiniPC lea y escriba memoria en un almacenamiento interno justo cuando va apurado es la receta perfecta para arrastrar el sistema.

Aquí es donde entra ZSWAP, y sólo precisas activarlo.

¿Qué demonios es ZSWAP?

ZSWAP es un módulo del kernel de Linux que coge los datos que el sistema quiere mandar a la SWAP en el disco, los comprime y los guarda en una porción de tu propia memoria RAM.

Como la CPU procesa la compresión a la velocidad de la luz en comparación con la velocidad de lectura/escritura de un disco SSD o NVMe (y ni hablemos de un eMMC), el rendimiento del MiniPC no cae en picado.

La configuración por defecto es la mejor

En Linux nos encanta tocar botones, cambiar algoritmos y modificar parámetros, pero te voy a ahorrar unas cuantas horas de pruebas: ZSWAP funciona mejor exactamente tal y como viene de fábrica.

Los desarrolladores del kernel no son tontos y los valores por defecto están afinados para ofrecer el equilibrio perfecto entre uso de CPU y ahorro de memoria.

Para activarlo en casi cualquier distribución moderna basada en Debian, basta con editar el grub:

  • Abre la terminal y edita la configuración del Grub con Mousepad:

sudo mousepad /etc/default/grub

  • Busca la línea GRUB_CMDLINE_LINUX_DEFAULT y añade zswap.enabled=1. Quedaría algo parecido a esto: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1"
  • Guarda, actualiza el grub con sudo update-grub y reinicia el sistema.

¡Y ya está! Sin tocar algoritmos raros, sin vender la moto.

¿Y qué pasa con la SWAP "de toda la vida"? (El tamaño importa)

Aquí viene la duda del millón: Si uso ZSWAP... ¿cuánta memoria SWAP en disco necesito en mi MiniPC?
En un equipo con 4 u 8 GB de RAM no necesitas partirte la cabeza creando particiones gigantescas de intercambio.

  • Para un MiniPC de 4 GB: Configura un archivo de SWAP en disco a 4 GB. ZSWAP se encargará de comprimir casi todo en la RAM. Si la cosa se pone verdaderamente crítica y supera el límite de ZSWAP, esos 4 GB en disco actuarán como red de seguridad para que el sistema no tire procesos al suelo (Out Of Memory Killer).
  • Para un MiniPC de 8 GB: Con 8 GB de SWAP en disco vale. De hecho, mi miniPC funciona así.

No obsesionarse con el valor de swappiness. Déjalo en el valor predeterminado del sistema (habitualmente 60). ZSWAP interceptará las páginas antes de que toquen el almacenamiento físico, por lo que el comportamiento del sistema será fluido sin necesidad de forzar nada.

¿Cómo saber si está activado?

Usando el siguiente comando nos dirá si está activado o no:

cat /sys/module/zswap/parameters/enabled

Si tienes un modesto MiniPC, no te compliques la vida compilando cosas ni ajustando parámetros finos. Activa ZSWAP por defecto, dale un pequeño colchón de SWAP en disco por si las moscas, y disfruta de un equipo mucho más ágil sin tener que aportar un solo euro en memoria RAM.

domingo, 13 de septiembre de 2026

Por la LIBERTAD


Bajo los pulsos de synthwave de Kalax (Through It All), las imágenes avanzan como un testamento visual de una era donde la vida pertenencia enteramente a quien la vivía. En los pasillos, las calles y los parques de esa época, se respira la genuina autonomía individual:

  • Un tiempo donde los hombres de Estado gobernaban las grandes cuestiones del destino común sin pretender adoctrinar ni tutelar la conducta íntima. La libertad personal no se negociaba ni se sometía a la supervisión moral del poder.
  • Las secuencias muestran una generación marcada por la autenticidad en los afectos, las miradas sin artificio y el romance vivo, lejos de la intromisión reglamentaria en el deseo o los sentimientos.
  • Frente a la sobriedad del entorno académico y social, emerge el desafío audaz y libre de quien decide su propio camino sin disculpas.


Un homenaje vibrante a los tiempos en que la política respetaba sus límites y la vida privada era un santuario inviolable de libertad, pasión e individuación.