{"id":21042,"date":"2026-08-27T08:32:23","date_gmt":"2026-08-27T06:32:23","guid":{"rendered":"https:\/\/webhosting.de\/irq-balance-linux-konfigurieren-server\/"},"modified":"2026-08-27T08:32:23","modified_gmt":"2026-08-27T06:32:23","slug":"configurar-el-equilibrio-de-irq-en-linux-para-un-servidor","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/irq-balance-linux-konfigurieren-server\/","title":{"rendered":"C\u00f3mo configurar correctamente el equilibrio de IRQ en Linux: gu\u00eda pr\u00e1ctica"},"content":{"rendered":"<p>En Linux, IRQ Balance controla la distribuci\u00f3n de las interrupciones de hardware entre los n\u00facleos de la CPU y, por lo tanto, determina si la carga de red se distribuye de forma uniforme o si algunos n\u00facleos se ven ralentizados. Te voy a ense\u00f1ar c\u00f3mo utilizar irqbalance de forma espec\u00edfica, cu\u00e1ndo cambiar a la afinidad de IRQ manual y qu\u00e9 ajustes se deben aplicar en servidores con alta <strong>carga de red<\/strong> lo que realmente importa.<\/p>\n\n<h2>Puntos centrales<\/h2>\n<p>Antes de entrar en detalles, voy a resumir las decisiones m\u00e1s importantes que me han ayudado de forma fiable en proyectos con una elevada carga de E\/S. Considero que la distribuci\u00f3n autom\u00e1tica mediante irqbalance es un buen punto de partida; mido el efecto y realizo ajustes selectivos. En el caso de cargas de trabajo deterministas, asigno manualmente IRQ concretas a n\u00facleos espec\u00edficos y excluyo el resto de CPU de la distribuci\u00f3n autom\u00e1tica. Tengo en cuenta la proximidad NUMA desde el principio, ya que reduce la latencia y garantiza el rendimiento. Gracias a una supervisi\u00f3n clara, detecto los cuellos de botella m\u00e1s r\u00e1pidamente y los regulo sin innecesarias <strong>Riesgos<\/strong>.<\/p>\n<p>Esta lista te muestra a qu\u00e9 presto especial atenci\u00f3n a la hora de realizar la configuraci\u00f3n:<\/p>\n<ul>\n  <li><strong>Autom\u00e1tico<\/strong> En primer lugar: activar irqbalance y medir su efecto<\/li>\n  <li><strong>afinidad<\/strong> De forma espec\u00edfica: fijar las IRQ cr\u00edticas, reducir el jitter<\/li>\n  <li><strong>CPU prohibidas<\/strong>: Mantener n\u00facleos libres para los hilos de las aplicaciones<\/li>\n  <li><strong>NUMA<\/strong> Tenga en cuenta lo siguiente: mantenga las IRQ cerca del nodo de memoria<\/li>\n  <li><strong>Monitoreo<\/strong>: Comprobar \/proc\/interrupts y las latencias<\/li>\n<\/ul>\n\n<h2>Conceptos b\u00e1sicos sobre las IRQ explicados brevemente<\/h2>\n<p>Una solicitud de interrupci\u00f3n (IRQ) es una se\u00f1al mediante la cual el hardware transfiere trabajo a la CPU, interrumpiendo as\u00ed una tarea en curso. Si llegan demasiadas de estas se\u00f1ales al mismo n\u00facleo, la carga de trabajo en \u00e9l aumenta y el tiempo de respuesta se vuelve lento, mientras que otros n\u00facleos permanecen sin utilizarse; eso es precisamente lo que quiero conseguir con <strong>Distribuci\u00f3n<\/strong> evitar. irqbalance distribuye estas IRQ de forma din\u00e1mica entre varios n\u00facleos y eval\u00faa peri\u00f3dicamente el estado del sistema. Para ello, lo primero que hago es consultar <code>\/proc\/interrupciones<\/code> y comprueba en las columnas cu\u00e1ntas IRQ llegan por cada CPU. Si alguna columna se desborda, la regulo activamente y as\u00ed reduzco las <strong>Puntos de acceso<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-irq-guide-4513.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Distribuci\u00f3n autom\u00e1tica con irqbalance<\/h2>\n<p>En las distribuciones modernas, empiezo con el servicio irqbalance, que, por defecto, ajusta peri\u00f3dicamente la distribuci\u00f3n de las IRQ. Lo activo con <code>systemctl enable --now irqbalance<\/code> y compruebo el estado antes de intervenir m\u00e1s a fondo; as\u00ed aprovecho lo que ya hay <strong>Autom\u00e1tico<\/strong>. Los archivos de configuraci\u00f3n se encuentran, seg\u00fan el sistema, en <code>\/etc\/sysconfig\/irqbalance<\/code> o <code>\/etc\/default\/irqbalance<\/code>, all\u00ed puedo descartar CPU o IRQ. La variable resulta especialmente \u00fatil <code>IRQBALANCE_BANNED_CPUS<\/code> como m\u00e1scara de 64 bits para reservar n\u00facleos espec\u00edficos para las aplicaciones. Quien desee profundizar en ejemplos pr\u00e1cticos, encontrar\u00e1 aqu\u00ed una introducci\u00f3n concisa a la <a href=\"https:\/\/webhosting.de\/es\/equilibrio-irq-del-servidor-optimizacion-del-rendimiento-de-la-red-centro-de-datos\/\">Rendimiento de la red<\/a>, a las que suelo hacer referencia en los talleres y que aplico en los proyectos.<\/p>\n\n<h2>C\u00f3mo configurar de forma segura la afinidad de IRQ de forma manual<\/h2>\n<p>Cuando las cargas de trabajo son muy sensibles a la fluctuaci\u00f3n o cuando se quiere que determinados n\u00facleos permanezcan libres exclusivamente para procesos del espacio de usuario, configuro manualmente la afinidad de IRQ. Para ello, escribo m\u00e1scaras de bits seg\u00fan <code>\/proc\/irq\/<em>N\u00daMERO DE IRQ<\/em>\/smp_affinity<\/code> y establezco en qu\u00e9 n\u00facleos se puede ejecutar una interrupci\u00f3n; esto permite planificar <strong>Conducta<\/strong>. En primer lugar, determino los n\u00fameros de IRQ relevantes con <code>grep<\/code> en <code>\/proc\/interrupciones<\/code>. En el caso de los dispositivos de red, suelo asignar las colas RX\/TX a n\u00facleos cercanos a los hilos de la aplicaci\u00f3n, mientras que mantengo libres otros n\u00facleos. En este breve art\u00edculo se resumen bien los fundamentos de este procedimiento <a href=\"https:\/\/webhosting.de\/es\/servidor-afinidad-irq-multinucleo-optimizacion-de-red-rendimiento\/\">Gu\u00eda de afinidad de IRQ<\/a>, que utilizo habitualmente como punto de partida.<\/p>\n<p>La siguiente tabla muestra las m\u00e1scaras de bits m\u00e1s habituales y su significado. Utilizo estos ejemplos para establecer configuraciones de forma r\u00e1pida y con pocos errores, y comprobar despu\u00e9s el resultado con <code>\/proc\/interrupciones<\/code> a <strong>verificar<\/strong>.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Objetivo<\/th>\n      <th>M\u00e1scara de ejemplo (hex)<\/th>\n      <th>n\u00facleos<\/th>\n      <th>Comentario<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Solo CPU0<\/td>\n      <td>0x1<\/td>\n      <td>0<\/td>\n      <td>Prueba sencilla, bajo <strong>dispersi\u00f3n<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>Solo CPU1<\/td>\n      <td>0x2<\/td>\n      <td>1<\/td>\n      <td>Separa las IRQ de la CPU0, reduce <strong>Interferencia<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU1<\/td>\n      <td>0x3<\/td>\n      <td>0-1<\/td>\n      <td>Distribuido entre dos n\u00facleos, ligero <strong>Ayuda<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU2\u2013CPU3<\/td>\n      <td>0xC<\/td>\n      <td>2-3<\/td>\n      <td>\u00datil cuando 0\u20131 para los hilos de aplicaciones <strong>gratis<\/strong> permanezca en<\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU3<\/td>\n      <td>0xF<\/td>\n      <td>0\u20133<\/td>\n      <td>Distribuci\u00f3n amplia en 4 n\u00facleos, mezcla <strong>Carga<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/IRQ_Linux_Konferenz_3235.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Medici\u00f3n: leer correctamente \/proc\/interrupts<\/h2>\n<p>Abro el archivo <code>\/proc\/interrupciones<\/code> y veo una IRQ por fila y, por columna, los contadores de cada CPU; eso hace que se aprecien inmediatamente los desequilibrios <strong>visible<\/strong>. Si una columna crece mucho m\u00e1s r\u00e1pido que las dem\u00e1s, la carga se concentra all\u00ed. Entonces compruebo qu\u00e9 controlador est\u00e1 implicado y si RSS\/RPS ya la ha distribuido. Adem\u00e1s, ejecuto irqbalance temporalmente en primer plano con salida de depuraci\u00f3n, para comprender sus decisiones y evitar errores de valoraci\u00f3n. Tras cada cambio, vuelvo a comprobar los contadores y mido la latencia bajo carga, para poder corroborar los efectos y descartar <strong>Riesgos<\/strong> puede evitar.<\/p>\n\n<h2>Aislamiento de la CPU y m\u00e1scaras de exclusi\u00f3n<\/h2>\n<p>He puesto <code>IRQBALANCE_BANNED_CPUS<\/code>, para excluir sistem\u00e1ticamente determinados n\u00facleos de la distribuci\u00f3n autom\u00e1tica; de este modo, libero recursos para los hilos de las aplicaciones. En configuraciones m\u00e1s recientes, utilizo adem\u00e1s <code>IRQBALANCE_BANNED_IRQS<\/code>, si se quiere que cada dispositivo funcione de forma independiente en un n\u00facleo; esto reduce las interferencias en los sistemas sensibles <strong>Cargas de trabajo<\/strong>. En situaciones que requieren baja latencia, desactivo irqbalance de forma espec\u00edfica y asigno las IRQ de manera est\u00e1tica, para que no interfiera ninguna redistribuci\u00f3n. Quien quiera comprender con m\u00e1s detalle la asignaci\u00f3n de la CPU para la gesti\u00f3n de interrupciones, encontrar\u00e1 informaci\u00f3n \u00fatil sobre el <a href=\"https:\/\/webhosting.de\/es\/gestion-de-interrupciones-del-servidor-optimizacion-del-rendimiento-de-la-cpu-7342\/\">Gesti\u00f3n de interrupciones<\/a> en los servidores. Lo importante es: primero medir, luego definir y volver a comprobar el efecto, para evitar sorpresas en el <strong>Operaci\u00f3n<\/strong> que hay que evitar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq-balance-linux-guide-setup-3458.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Aspectos relacionados con NUMA y proximidad<\/h2>\n<p>En los sistemas NUMA, procuro dirigir las IRQ, en la medida de lo posible, a los n\u00facleos de aquel nodo NUMA en cuya memoria se encuentran los datos en cuesti\u00f3n; esto reduce la latencia y aumenta <strong>Rendimiento<\/strong>. Lo combino con la afinidad de CPU para la aplicaci\u00f3n, de modo que los subprocesos y las interrupciones se ejecuten localmente entre s\u00ed. irqbalance funciona bien en NUMA, pero, si es necesario, realizo ajustes con m\u00e1scaras de exclusi\u00f3n. Es fundamental no distribuir la carga entre nodos si esta puede mantenerse a nivel local. Quien mantenga esta proximidad obtendr\u00e1 tiempos de respuesta constantes y ahorrar\u00e1 valiosos <strong>Cache<\/strong>-Recursos.<\/p>\n\n<h2>Curso intensivo sobre redes: RSS, RPS\/RFS y XPS<\/h2>\n<p>Antes de ajustar con precisi\u00f3n las m\u00e1scaras de IRQ, compruebo las caracter\u00edsticas de la tarjeta de red, como RSS, as\u00ed como los mecanismos del n\u00facleo, como RPS\/RFS y XPS; estos influyen en gran medida en la distribuci\u00f3n de los paquetes. RSS ya distribuye las interrupciones de cola entre varios n\u00facleos, mientras que RPS\/RFS configuran el procesamiento en el n\u00facleo y XPS determina las rutas de transmisi\u00f3n; esto evita innecesarias <strong>Puntos de acceso<\/strong>. Ajusto estos mecanismos con mi estrategia de IRQ para que no interfieran entre s\u00ed. Si las colas, las afinidades de IRQ y la afinidad de las aplicaciones est\u00e1n bien sincronizadas, la E\/S de red funciona mucho mejor. A continuaci\u00f3n, vuelvo a realizar mediciones bajo carga real antes de continuar con <strong>Pasos<\/strong> pongo.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_7163.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>MSI-X, colas m\u00faltiples y una disposici\u00f3n ordenada de las colas<\/h2>\n<p>Muchas tarjetas de red de 10 a 100 G utilizan MSI-X y proporcionan vectores de interrupci\u00f3n propios para cada cola de recepci\u00f3n\/transmisi\u00f3n. Primero compruebo con <code>ethtool -l eth0<\/code> (n\u00famero de canales) y <code>\/proc\/interrupciones<\/code>, cu\u00e1ntas colas est\u00e1n realmente activas y c\u00f3mo se llaman (por ejemplo,. <code>eth0-TxRx-0<\/code>, <code>eth0-TxRx-1<\/code>). El objetivo es ajustar el n\u00famero de colas al n\u00famero de n\u00facleos utilizados por nodo NUMA y fijarlas de forma determinista. Con <code>ethtool -L eth0 combined N<\/code> Configur\u00e9 el n\u00famero de colas; a continuaci\u00f3n, orden\u00e9 las IRQ resultantes mediante <code>smp_affinity<\/code> a los n\u00facleos adecuados. Me aseguro de asignar los pares RX\/TX de una misma cola al mismo n\u00facleo o, al menos, al mismo socket, para que <strong>Localidad de la cach\u00e9<\/strong> se aplica. Importante: compruebo los cambios en el n\u00famero de colas y la afinidad directamente en <code>\/proc\/interrupciones<\/code> y con una breve prueba de carga (pps\/Throughput), antes de seguir optimizando.<\/p>\n\n<h2>Coalescencia de interrupciones y presupuesto NAPI<\/h2>\n<p>Sobre todo cuando hay un gran volumen de paquetes, los valores de coalescencia influyen en la eficacia de mi estrategia de IRQ. Con <code>ethtool -c eth0<\/code> veo si <code>rx-usecs<\/code> y <code>monturas rx<\/code> est\u00e1n configurados. Una mayor coalescencia reduce el n\u00famero de IRQ por segundo y ahorra recursos de la CPU, pero aumenta la latencia y la fluctuaci\u00f3n. Realizo los ajustes con cuidado: peque\u00f1os pasos, midiendo cada vez (latencia p95\/p99 y carga de la CPU). En el lado del emisor, se observa <code>tx-usecs<\/code> de forma anal\u00f3gica. Adem\u00e1s, ajusto el comportamiento de NAPI mediante <code>net.core.netdev_budget<\/code> y <code>net.core.netdev_budget_usecs<\/code>, cuando <strong>NET_RX<\/strong> empieza a acumularse en las SoftIRQ. Si las p\u00e9rdidas aumentan en <code>\/proc\/net\/softnet_stat<\/code>, a modo de prueba, aumento el presupuesto o distribuyo las colas RX de forma m\u00e1s sistem\u00e1tica; si la latencia del sistema se vuelve excesiva, lo reduzco. Tengo en cuenta la interacci\u00f3n entre GRO\/LRO y TSO\/GSO: una agregaci\u00f3n excesiva reduce la carga de IRQ, pero puede generar picos de latencia; los compenso con el perfil de la aplicaci\u00f3n.<\/p>\n\n<h2>Lectura transparente de SoftIRQs<\/h2>\n<p>Adem\u00e1s de las HardIRQ, yo decido la carga en las SoftIRQ. Con <code>cat \/proc\/softirqs<\/code> Observo <strong>NET_RX<\/strong> y <strong>NET_TX<\/strong> por CPU; si algunas columnas destacan especialmente, se acumula demasiado trabajo en los subprocesos de ksoftirqd. Un <code>top -H<\/code> mu\u00e9strame r\u00e1pidamente cu\u00e1les <code>ksoftirqd\/N<\/code> Los n\u00facleos suponen una carga. Mido a mayor profundidad con <code>perf top<\/code> o breves <code>registro perf<\/code> Ejecutar para detectar puntos cr\u00edticos en el controlador o en el procesamiento de la pila. Si los hilos de ksoftirqd se activan (en lugar de procesarse directamente en el contexto de la IRQ), la latencia suele aumentar considerablemente; en ese caso, respondo con una mejor distribuci\u00f3n de las colas, un mayor presupuesto NAPI o la asignaci\u00f3n espec\u00edfica de CPU a los hilos de ksoftirqd afectados mediante <code>taskset -pc<\/code>. Importante: documento estos ajustes porque tienen un efecto sutil y, en caso de duda, necesito poder revertirlos r\u00e1pidamente.<\/p>\n\n<h2>C\u00f3mo sacar el m\u00e1ximo partido a SMT\/Hyper-Threading y la topolog\u00eda<\/h2>\n<p>Con SMT activado, comparto un n\u00facleo f\u00edsico con dos CPU l\u00f3gicas. Compruebo las relaciones entre procesadores mediante <code>lscpu -e<\/code> y <code>\/sys\/devices\/system\/cpu\/cpuX\/topology\/thread_siblings_list<\/code>. En el caso de las rutas en las que la latencia es cr\u00edtica, evito colocar el hilo de la aplicaci\u00f3n y la IRQ correspondiente en el mismo n\u00facleo f\u00edsico (hilos SMT diferentes), ya que compiten por las unidades de ejecuci\u00f3n y las cach\u00e9s. Prefiero pares en los que, por ejemplo, un hilo de aplicaci\u00f3n se ejecute en la CPU2 y la cola de recepci\u00f3n (RX) correspondiente en la CPU3 (otro n\u00facleo f\u00edsico, mismo nodo NUMA). Si la SMT altera la constancia, opto por utilizar menos n\u00facleos f\u00edsicos, pero exclusivos, y as\u00ed me ahorro problemas de inestabilidad. <strong>Interferencias<\/strong>.<\/p>\n\n<h2>Virtualizaci\u00f3n: KVM, vhost y SR-IOV<\/h2>\n<p>En entornos virtualizados, considero por separado el host y el invitado. En el host, distribuyo de forma ordenada las IRQ de las tarjetas de red f\u00edsicas entre los n\u00facleos del nodo NUMA correspondiente. Si el invitado utiliza virtio-net, se generan IRQ adicionales para los hilos vhost; las detecto en <code>\/proc\/interrupciones<\/code> y asigno de forma coherente los trabajadores de vhost a las colas de la tarjeta de red f\u00edsica. A nivel de m\u00e1quina virtual, tambi\u00e9n configuro las afinidades RSS\/XPS e IRQ, siempre que el controlador virtio proporcione varias colas. En el caso de SR-IOV, merece la pena asignar a cada invitado una o varias VF con sus propios vectores MSI-X y fijarlas en el invitado; el aislamiento mejora la latencia y la previsibilidad. Sigo un esquema claro: las vCPU del invitado en pCPU dedicadas, las IRQ asociadas en n\u00facleos cercanos, y no mezclar los hilos del emulador y del vhost con los hilos de aplicaciones que requieren un uso intensivo de recursos; de este modo, la ruta de datos <strong>planificable<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_5421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Frecuencia de la CPU, estados C y ajuste NOHZ<\/h2>\n<p>Las latencias de IRQ se ven afectadas cuando los n\u00facleos entran en estados C profundos o se regulan de forma agresiva. Para cargas de trabajo sensibles, configuro el regulador de la CPU en <code>rendimiento<\/code> (<code>cpupower frequency\u2011set -g performance<\/code>) y reduzco los estados C profundos mediante opciones de arranque o de controladores para limitar los tiempos de reactivaci\u00f3n. En servidores con una carga elevada, esto suele tener un efecto m\u00e1s positivo que cualquier ajuste fino de las afinidades. En perfiles de latencia muy exigentes, a\u00f1ado <code>nohz_full=<\/code> y <code>rcu_nocbs=<\/code> para n\u00facleos aislados, de modo que el tick-timer y las llamadas de retorno de la RCU no interfieran entre s\u00ed; defino las CPU de mantenimiento de forma deliberadamente separada. Sin embargo, pruebo estas modificaciones por separado, ya que pueden tener efectos secundarios en la programaci\u00f3n y el consumo energ\u00e9tico. Lo fundamental sigue siendo: comparar con precisi\u00f3n los valores medidos antes y despu\u00e9s del cambio; de lo contrario, me perder\u00eda en <strong>Optimizaciones<\/strong> en la oscuridad.<\/p>\n\n<h2>Systemd, Cgroups y el aislamiento de aplicaciones<\/h2>\n<p>Adem\u00e1s de la asignaci\u00f3n fija de IRQ, separo los subprocesos de las aplicaciones mediante Cgroups y systemd-affinity. A trav\u00e9s de <code>Afinidad CP=<\/code> En los archivos Unit y los controladores de CPU (cgroup v2), asigno n\u00facleos fijos a los servicios. De este modo, evito que, por parte del programador, los subprocesos se desplacen a aquellas CPU que he destinado a las IRQ. En entornos de contenedores, configuro <code>cpuset.cpus<\/code> y compruebe <code>cpuset.cpus.effective<\/code>, para que las promesas de recursos surtan efecto de verdad. Importante: <code>IRQBALANCE_BANNED_CPUS<\/code> solo controla aquellos casos en los que irqbalance no distribuye; los hilos del n\u00facleo, como ksoftirqd, siguen dependiendo del programador. Por lo tanto, para lograr un aislamiento estricto, necesito una combinaci\u00f3n de afinidades de IRQ, afinidad de CPU de los servicios y, si es necesario, n\u00facleos aislados. De este modo, la ruta de datos y la aplicaci\u00f3n permanecen claramente separadas y la <strong>Carga<\/strong> no se mezcla de forma descontrolada.<\/p>\n\n<h2>Errores habituales y soluciones<\/h2>\n<p>Nunca desactivo \u00abirqbalance\u00bb de forma generalizada sin conocer los perfiles de carga; de lo contrario, las IRQ se concentran r\u00e1pidamente en unos pocos n\u00facleos. Igualmente poco recomendable es abrir todos los n\u00facleos para todas las IRQ, aunque los hilos sensibles sean exclusivos <strong>Recursos<\/strong> necesitan. Otro error: no probar los cambios de forma aislada y no medir sus efectos; as\u00ed no queda claro qu\u00e9 es lo que realmente ayuda. Tambi\u00e9n tengo en cuenta los pares de Hyper-Threading: es mejor que el hilo de la aplicaci\u00f3n y la IRQ asociada no compartan el mismo n\u00facleo f\u00edsico. Documento cada paso y creo puntos de restauraci\u00f3n para poder volver r\u00e1pidamente a la \u00faltima <strong>bien<\/strong> Vuelvo a la configuraci\u00f3n.<\/p>\n\n<h2>Lista de comprobaci\u00f3n pr\u00e1ctica para servidores<\/h2>\n<p>Siempre empiezo con una configuraci\u00f3n inicial: activar irqbalance, registrar la carga del sistema, observar \/proc\/interrupts y medir las latencias; solo despu\u00e9s modifico los ajustes. En el segundo paso, termino con <code>IRQBALANCE_BANNED_CPUS<\/code> selecciono aquellos n\u00facleos que deben reservarse para los hilos de aplicaciones; de este modo evito interferencias innecesarias de las IRQ. A continuaci\u00f3n, conecto las IRQ cr\u00edticas mediante <code>smp_affinity<\/code> me centro en unos pocos n\u00facleos bien seleccionados y mantengo la proximidad NUMA. A continuaci\u00f3n, compruebo los valores de RSS\/RPS\/RFS y XPS, as\u00ed como las opciones de descarga de la NIC, para distribuir el trabajo de forma \u00f3ptima. Por \u00faltimo, realizo pruebas con carga de producci\u00f3n, comparo las m\u00e9tricas y solo mantengo aquellos cambios que hayan demostrado <strong>trabajo<\/strong>.<\/p>\n\n<h2>Archivos de configuraci\u00f3n y comandos de systemd<\/h2>\n<p>Activo el servicio con <code>systemctl enable --now irqbalance<\/code> y comprueba con <code>systemctl status irqbalance<\/code> la duraci\u00f3n; as\u00ed es como lo establezco <strong>Servicio<\/strong> seguro que est\u00e1 listo. En <code>\/etc\/sysconfig\/irqbalance<\/code> o <code>\/etc\/default\/irqbalance<\/code> pongo <code>IRQBALANCE_BANNED_CPUS<\/code> as\u00ed como, opcionalmente, <code>IRQBALANCE_BANNED_IRQS<\/code>. Aplico los cambios con <code>systemctl restart irqbalance<\/code> y, al mismo tiempo, observo los contadores en <code>\/proc\/interrupciones<\/code>. Para las pruebas, utilizo el modo \u00abForeground\u00bb de irqbalance para seguir las decisiones en tiempo real. Solo cuando comprendo el comportamiento, introduzco los ajustes de forma permanente en el <strong>Configuraci\u00f3n<\/strong>.<\/p>\n\n<h2>Cu\u00e1ndo desactivo irqbalance<\/h2>\n<p>En configuraciones en tiempo real o en aplicaciones extremadamente sensibles a la latencia, detengo \u00abirqbalance\u00bb y asigno las IRQ de forma est\u00e1tica para que ninguna redistribuci\u00f3n interfiera. A\u00edslo los n\u00facleos para estas cargas de trabajo y dejo que las IRQ de tr\u00e1fico se ejecuten deliberadamente en otros n\u00facleos; de este modo, los hilos de las aplicaciones <strong>planificable<\/strong>. Este enfoque tambi\u00e9n resulta \u00fatil en entornos de inquilinos estrictamente separados, ya que reduce las interferencias entre m\u00e1quinas virtuales o contenedores. Si hay controladores que funcionan peor con el modo autom\u00e1tico, excluyo sus IRQ mediante una lista de controladores prohibidos. En cuanto los patrones de carga vuelven a ser m\u00e1s variables, vuelvo a activar irqbalance y compruebo el efecto con datos recientes <strong>Valores medidos<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-irq-balance-setup-1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Brevemente resumido<\/h2>\n<p>Empiezo con irqbalance, mido el efecto y realizo ajustes selectivos, en lugar de intervenir a ciegas en todas partes; as\u00ed mantengo una visi\u00f3n global del sistema y <strong>Transparencia<\/strong>. Para las cargas de trabajo sensibles, asigno las IRQ adecuadas, a\u00edslo los n\u00facleos para las aplicaciones y tengo en cuenta la proximidad NUMA. Mediante m\u00e1scaras de exclusi\u00f3n, controlo d\u00f3nde puede actuar irqbalance y evito desplazamientos no deseados. Compruebo peri\u00f3dicamente <code>\/proc\/interrupciones<\/code>, latencia y rendimiento, para que los cambios queden debidamente documentados. Quien act\u00fae as\u00ed aprovechar\u00e1 al m\u00e1ximo el potencial de IRQ Balance y mantendr\u00e1 los servidores bajo una carga de red notablemente <strong>reactivo<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Configurar correctamente \u00abirqbalance\u00bb en Linux: c\u00f3mo distribuir las interrupciones de forma eficiente en servidores Linux y mejorar el rendimiento.<\/p>","protected":false},"author":1,"featured_media":21035,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21042","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"173","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"IRQ Balance","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21035","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/21042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/comments?post=21042"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/21042\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/21035"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=21042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=21042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=21042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}