{"id":19865,"date":"2026-06-10T11:53:56","date_gmt":"2026-06-10T09:53:56","guid":{"rendered":"https:\/\/webhosting.de\/server-numa-locality-cpu-memory-affinity-optimierung-core\/"},"modified":"2026-06-10T11:53:56","modified_gmt":"2026-06-10T09:53:56","slug":"servidor-numa-localidad-cpu-memoria-afinidad-optimizacion-nucleo","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/server-numa-locality-cpu-memory-affinity-optimierung-core\/","title":{"rendered":"Localidad NUMA del servidor y afinidad CPU-memoria para el m\u00e1ximo rendimiento del alojamiento"},"content":{"rendered":"<p><strong>Servidor NUMA<\/strong> La localidad y la afinidad de memoria de la CPU determinan lo cerca que trabajan los hilos de su RAM y lo constantes que permanecen las latencias en las pilas de alojamiento. Te mostrar\u00e9 de forma pr\u00e1ctica c\u00f3mo puedes conseguir un rendimiento mediblemente mayor con el reconocimiento de topolog\u00edas, estrategias de afinidad y rutas de E\/S cercanas al nodo y... <strong>Latencia<\/strong> notablemente inferior.<\/p>\n\n<h2>Puntos centrales<\/h2>\n\n<p>Para una orientaci\u00f3n r\u00e1pida, resumo los mensajes clave antes de explicar los pasos en detalle y respaldarlos con ejemplos, para que pueda ver inmediatamente por d\u00f3nde debe empezar para <strong>Localidad<\/strong> y Affinity de forma rentable. Hago hincapi\u00e9 en las relaciones claras entre hilos, memoria y E\/S para que pueda derivar prioridades de forma limpia y <strong>Decisiones<\/strong> cumplir. Tambi\u00e9n identifico escenarios en los que Interleave tiene sentido sin diluir sus rutas cr\u00edticas y muestro c\u00f3mo puede demostrar un progreso real a trav\u00e9s de la supervisi\u00f3n y <strong>Error<\/strong> se evitan. Para los entornos virtualizados, proporciono consejos sobre la colocaci\u00f3n de vCPUs y vRAM para que los sistemas invitados no se deslicen a trav\u00e9s de m\u00faltiples nodos y <strong>Remoto<\/strong>-los accesos explotan. Por \u00faltimo, plasmar\u00e9 las conclusiones en una breve hoja de ruta para que puedas proceder de forma estructurada y dar cada paso en la direcci\u00f3n correcta. <strong>medible<\/strong> seguro.<\/p>\n<ul>\n  <li><strong>Localidad<\/strong> primero: mant\u00e9n los hilos cerca de tu propia RAM, evita los remotos.<\/li>\n  <li><strong>Afinidad<\/strong> corregir: Agrupaci\u00f3n de n\u00facleos y memoria por pol\u00edtica.<\/li>\n  <li><strong>Topolog\u00eda<\/strong> leer: Nodos, n\u00facleos, dispositivos PCIe por socket.<\/li>\n  <li><strong>V\u00edas de E\/S<\/strong> paquete: Acoplar NIC, NVMe y app en el mismo nodo.<\/li>\n  <li><strong>ferias<\/strong> en lugar de adivinar: P95\/ P99, acceso remoto y seguimiento del rendimiento.<\/li>\n<\/ul>\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\/06\/serverraum-performance-1573.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comprender la topolog\u00eda NUMA<\/h2>\n\n<p>Antes de trasladar cargas de trabajo, leo el <strong>Topolog\u00eda<\/strong> del servidor: cu\u00e1ntos nodos NUMA existen, cu\u00e1ntos n\u00facleos y cu\u00e1nta RAM est\u00e1n conectados a cada nodo. Tambi\u00e9n presto atenci\u00f3n a qu\u00e9 dispositivos PCIe -como las NIC o las SSD NVMe- est\u00e1n conectados a cada z\u00f3calo, ya que esto determina las rutas de interrupci\u00f3n y los accesos a la memoria, y cu\u00e1nta RAM hay conectada a cada nodo. <strong>Latencia<\/strong> caracterizado. Un nodo proporciona acceso local a la memoria con una distancia corta; todo lo que vaya m\u00e1s all\u00e1 cuesta tiempo y ancho de banda. Cuanto m\u00e1s grande es la m\u00e1quina, con m\u00faltiples sockets, m\u00e1s afecta el acceso remoto a los tiempos de respuesta y se come el ancho de banda. <strong>Rendimiento<\/strong>. Para una introducci\u00f3n comprensible a la l\u00f3gica de hardware, encuentro un compacto <a href=\"https:\/\/webhosting.de\/es\/nodos-numa-alojamiento-de-servidores-grandes-sistemas-serverboost\/\">Los nodos NUMA de un vistazo<\/a>, considerar conscientemente los l\u00edmites de los nodos y evitar distribuciones incorrectas.<\/p>\n\n<p>En la pr\u00e1ctica, empiezo con un breve inventario topol\u00f3gico y lo documento para poder derivar despu\u00e9s las decisiones de afinidad de forma comprensible. Comandos \u00fatiles:<\/p>\n<pre><code>N\u00facleos # y asignaci\u00f3n NUMA\nlscpu -e=CPU,Core,Socket,Node\n\nVisi\u00f3n general del hardware # NUMA\nnumactl --hardware\n\n# Asignar dispositivos PCIe a su nodo NUMA\nlspci -nn | grep -E \"Ethernet|No vol\u00e1til\"\nfor d in \/sys\/bus\/pci\/devices\/*; do echo -n \"$d: \"; cat $d\/numa_node; done\n<\/code><\/pre>\n<p>Lo importante es que <strong>Complejo ra\u00edz PCIe<\/strong> y ranuras de dispositivos a los z\u00f3calos. Dos puertos de la misma NIC se pueden asignar a nodos diferentes; esto influye en la ubicaci\u00f3n de las colas RX\/TX y las IRQ. Lo mismo se aplica a NVMe: los controladores modernos tienen varias colas que deber\u00edas vincular a n\u00facleos cercanos al nodo para que DMA no desencadene ning\u00fan salto de nodo.<\/p>\n\n<h2>Utilizar correctamente la afinidad de memoria de la CPU<\/h2>\n\n<p>Con la afinidad CPU-memoria, vinculo firmemente los procesos a las zonas centrales e impongo la asignaci\u00f3n de memoria local en la medida de lo posible, de modo que <strong>Hilos<\/strong> no alcancen constantemente el borde del nodo. En Linux, defino las CPU a trav\u00e9s de systemd o cgroups y combino esto con pol\u00edticas de memoria para que la RAM se cree preferiblemente en el mismo nodo y <strong>Remoto<\/strong> se reduce al m\u00ednimo. Los servicios cr\u00edticos (frontales de API, cach\u00e9s en memoria, bases de datos) se benefician de inmediato porque se reducen los tiempos de espera del controlador de memoria y los accesos a la cach\u00e9 son m\u00e1s frecuentes. Sin embargo, los l\u00edmites de fijaci\u00f3n demasiado estrictos pueden restringir la programaci\u00f3n, por lo que respaldo cada ajuste con pruebas de rendimiento y controlo los valores P95\/P99 para detectar efectos notables en <strong>Usuario<\/strong>-experiencia. Una introducci\u00f3n compacta a Affinity en el alojamiento le ayudar\u00e1 a empezar: <a href=\"https:\/\/webhosting.de\/es\/servidor-proceso-afinidad-numa-sensibilizacion-alojamiento-ressourcentuning\/\">Conocimiento de afinidad y NUMA<\/a> proporcionar las herramientas necesarias para una colocaci\u00f3n limpia.<\/p>\n\n<p>El factor decisivo es la <strong>Principio de primera intervenci\u00f3n<\/strong>La memoria se crea en el nodo que escribe primero en la p\u00e1gina. Por lo tanto, inicializa grandes heaps o buffers en los n\u00facleos de destino del nodo en el que el servicio se ejecutar\u00e1 m\u00e1s tarde - idealmente con la pol\u00edtica de CPU y memoria ya establecida (por ejemplo, a trav\u00e9s de systemd unit o numactl). Si arrancas en fr\u00edo en el nodo 0 y luego mueves los hilos al nodo 1, la mayor\u00eda de las p\u00e1ginas permanecer\u00e1n remotas. Para pilas de tiempos de ejecuci\u00f3n grandes, vale la pena usar \u201epre-touch\u201c durante el arranque para que las p\u00e1ginas se roten localmente y luego permanezcan calientes.<\/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\/06\/server_numa_affinity_2763.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Conocimiento de NUMA en la pila de alojamiento<\/h2>\n\n<p>Un sistema operativo compatible con NUMA, un hipervisor adecuado y aplicaciones con thread pinning despliegan juntos todo su potencial. <strong>Posible<\/strong>. El SO favorece la colocaci\u00f3n local si hay recursos libres en el nodo, mientras que el hipervisor asigna las m\u00e1quinas virtuales de forma que las vCPU y la vRAM no se distancien y <strong>Localidad<\/strong> se mantiene. En la aplicaci\u00f3n, separo los pools de trabajadores por nodo y mantengo las colas locales en lugar de operar pools globales de forma cruzada. Organizo los procesos de la base de datos, los demonios de cach\u00e9 y las instancias del servidor web nodo por nodo, para que las rutas de acceso sean cortas y se mantengan seguras. <strong>Jitter<\/strong> disminuye. Esto aumenta la coherencia y la previsibilidad bajo carga, lo que influye directamente en la previsibilidad de los SLA en euros y ahorra el costoso sobreaprovisionamiento.<\/p>\n\n<p>En el nivel Ingress, me ocupo de <strong>Afinidad de nodos<\/strong> de las sesiones, por ejemplo mediante un enrutamiento pegajoso o un hash coherente (por ejemplo, en la IP del cliente o en los tokens de sesi\u00f3n), para que las peticiones acaben en \u201esu\u201c trabajador y cach\u00e9 locales. Para los servicios con estado, planifico r\u00e9plicas por nodo y equilibro el acceso de lectura localmente; igualo las rutas de escritura mediante replicaci\u00f3n as\u00edncrona o por lotes para evitar el ping-pong entre nodos.<\/p>\n\n<h2>Programar servicios nodo por nodo<\/h2>\n\n<p>Agrupo las capas de una pila de forma que cada capa tenga una referencia de nodo clara y <strong>Caminos<\/strong> quedarse corto. Una separaci\u00f3n cl\u00e1sica: web\/API por nodo, app worker a su lado, m\u00e1s la cach\u00e9 local; la base de datos tambi\u00e9n se sit\u00faa cerca del nodo si la huella de RAM cabe y <strong>IO<\/strong>-path no se interrumpe. Muevo los trabajos de generaci\u00f3n de informes, copias de seguridad o batch workers a nodos menos cr\u00edticos para que las peticiones interactivas no se vean afectadas. Evito las instancias monolito de gran tama\u00f1o porque a menudo cruzan los l\u00edmites de los nodos y, por tanto, generan carga remota, que <strong>Actuaci\u00f3n<\/strong> borrosa. Las instancias m\u00e1s peque\u00f1as y replicadas por nodo suelen ofrecer un mejor rendimiento en el uso diario, ya que respetan las reglas NUMA y suavizan los picos.<\/p>\n\n<p>Para planificar la capacidad, calculo <strong>Espacio libre<\/strong> por separado para cada nodo: buffer de CPU para r\u00e1fagas, buffer de RAM contra OOM y m\u00e1rgenes separados para la cach\u00e9 de p\u00e1ginas. De este modo, evito que el n\u00facleo conmute involuntariamente de forma remota. Defino rutas de conmutaci\u00f3n claras para la conmutaci\u00f3n por error: si falla un nodo, las instancias de reemplazo pueden ejecutarse entre nodos, pero limito su concurrencia hasta que se restaura el nodo original, lo que mantiene estable la latencia global.<\/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\/06\/server-performance-numa-locality-4759.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configuraci\u00f3n de la afinidad de la CPU: M\u00e9todos y dificultades<\/h2>\n\n<p>Para la asignaci\u00f3n de n\u00facleos, utilizo systemd con CPUAffinity o cgroups con cpuset.cpus, de modo que los servicios han fijado <strong>\u00c1reas principales<\/strong> recibir. A la hora de pinear, presto atenci\u00f3n a los pares de hyper-threading, ya que dos hilos l\u00f3gicos de una unidad f\u00edsica comparten recursos y pueden ralentizarse mutuamente si los combino de forma infeliz, y <strong>Consejos<\/strong> crear. Las rutas de latencia -terminaci\u00f3n de TLS, entrada de API, lectores de cach\u00e9- obtienen n\u00facleos exclusivos, mientras que los registros, la compresi\u00f3n o las copias de seguridad se mueven a otros pools. Los pools demasiado estrechos sin b\u00faferes provocan colas, por lo que tengo en cuenta el espacio libre y compruebo los cambios de contexto, la longitud de las colas de espera y la disponibilidad de los recursos. <strong>IRQ<\/strong>-distribuci\u00f3n. De la observaci\u00f3n deduzco si abro m\u00e1s los n\u00facleos o los concentro m\u00e1s hasta que la distribuci\u00f3n de la latencia cae limpiamente y los picos P99 se vuelven m\u00e1s silenciosos.<\/p>\n\n<p>Para reducir a\u00fan m\u00e1s el jitter, configuro selectivamente interruptores del kernel como <strong>nohz_full<\/strong> y <strong>rcu_nocbs<\/strong> para n\u00facleos de latencia exclusiva, a\u00edslalos de los servicios del sistema y coloca deliberadamente IRQs s\u00f3lo en CPUs destinadas a este fin. Utilizo el servicio \u201eirqbalance\u201c con precauci\u00f3n: config\u00faralo espec\u00edficamente o desact\u00edvalo si est\u00e1 frustrando tu afinidad IRQ manual. Utilizo SCHED_FIFO\/SCHED_RR con moderaci\u00f3n y s\u00f3lo con l\u00edmites Be para evitar la inversi\u00f3n de prioridades o la inanici\u00f3n.<\/p>\n\n<h2>Pol\u00edticas de memoria y m\u00e1scaras NUMA<\/h2>\n\n<p>Para la pol\u00edtica de memoria, diferencio entre asignaci\u00f3n local preferente, intercalaci\u00f3n entre varios nodos y m\u00e1scaras NUMA fijas mediante cpuset.mems, de modo que <strong>RAM<\/strong> fluye hacia donde se est\u00e1n ejecutando realmente los hilos. Para los servicios interactivos, suelo establecer \u201epreferido\u201c, lo que significa que el sistema asigna localmente y s\u00f3lo se desv\u00eda cuando hay escasez, que es <strong>Remoto<\/strong>-los accesos son limitados. Los trabajos anal\u00edticos o de streaming a veces se benefician del intercalado porque el ancho de banda se distribuye entre nodos y se reduce la presi\u00f3n sobre un controlador. Las m\u00e1scaras fijas ofrecen control, pero requieren disciplina en la planificaci\u00f3n de la capacidad para que no se produzcan eventos OOM no deseados en un nodo que suban y <strong>Servicios<\/strong> interferir. La siguiente tabla clasifica las pol\u00edticas m\u00e1s comunes en escenarios t\u00edpicos y le ayuda a tomar una decisi\u00f3n r\u00e1pida.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Pol\u00edtica<\/strong><\/th>\n      <th><strong>Efecto<\/strong><\/th>\n      <th><strong>Cargas de trabajo t\u00edpicas<\/strong><\/th>\n      <th><strong>Riesgo<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Preferido (local)<\/td>\n      <td>RAM principalmente en el nodo local, opci\u00f3n alternativa en caso de escasez<\/td>\n      <td>Web\/ API, cach\u00e9s, bases de datos OLTP<\/td>\n      <td>Ligera deriva a plena carga en otros nodos<\/td>\n    <\/tr>\n    <tr>\n      <td>Intercalar<\/td>\n      <td>Distribuci\u00f3n uniforme en los nodos seleccionados<\/td>\n      <td>Streaming, an\u00e1lisis, grandes exploraciones<\/td>\n      <td>Mayor latencia en los accesos individuales<\/td>\n    <\/tr>\n    <tr>\n      <td>M\u00e1scara NUMA fija<\/td>\n      <td>Vinculaci\u00f3n estricta a los nodos de memoria definidos<\/td>\n      <td>Servicios estrictamente encapsulados, pruebas deterministas<\/td>\n      <td>Riesgo de OOM si el presupuesto se planifica incorrectamente<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Vigila los interruptores de todo el sistema: <strong>zone_reclaim_mode<\/strong> influye en si un nodo limpia agresivamente su propia memoria antes de asignar remotamente - a menudo indeseable para rutas de latencia. <strong>P\u00e1ginas enormes transparentes<\/strong> (THP) puede desencadenar la migraci\u00f3n de p\u00e1ginas o generar atascos; para los servicios sensibles a la latencia suelo elegir \u201emadvise\u201c y utilizar hugepages est\u00e1ticos cuando tiene sentido, de modo que aumenten los accesos a la TLB y disminuyan los picos de fallos de p\u00e1gina.<\/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\/06\/server_performance_optimization_2314.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vincular rutas de red y E\/S cerca del nodo<\/h2>\n\n<p>Alineo las colas de las NIC (RX\/TX) para que sus IRQ apunten a los n\u00facleos del nodo apropiado y el procesamiento de paquetes tenga lugar donde el <strong>App<\/strong> computa. Lo mismo se aplica a las unidades SSD NVMe o a los controladores RAID: los subprocesos de E\/S deben ejecutarse en el nodo al que est\u00e1 conectado el dispositivo a trav\u00e9s de PCIe, para que las rutas DMA sigan siendo cortas y el dispositivo pueda utilizarse de forma m\u00e1s eficiente. <strong>Cuellos de botella<\/strong> no se materializan. En Linux, ajusto las m\u00e1scaras de afinidad IRQ y las vinculo a los grupos de CPU de mis servicios para crear una ruta continua. Con microrr\u00e1fagas de la red, como muchos apretones de manos TLS, esta proximidad compensa directamente porque las rutas de copia son m\u00e1s cortas y las cach\u00e9s de CPU permanecen calientes y <strong>Contexto<\/strong> con menos frecuencia. El resultado es un flujo de datos coherente desde el paquete a la aplicaci\u00f3n y a la memoria, sin saltos de nodo innecesarios.<\/p>\n\n<p>Palancas concretas en la pila de la red: <strong>RSS<\/strong> para la distribuci\u00f3n de hardware a las colas, <strong>RPS\/RFS<\/strong> para el control de la CPU por software y <strong>XPS<\/strong> para la selecci\u00f3n de TX. Yo utilizo ethtool para asignar colas de RX a grupos de n\u00facleos que se ejecutan en el mismo nodo que sus trabajadores. Para el almacenamiento utilizo <strong>blk-mq<\/strong>-ajuste y asignaci\u00f3n de colas por nodo; las controladoras NVMe ofrecen varias colas de env\u00edo\/compleci\u00f3n, que yo escalo y afino \u2264 n\u00famero de n\u00facleos por nodo. Compruebe regularmente si las interrupciones (cat \/proc\/interrupts) se est\u00e1n disparando donde se encuentran los n\u00facleos de su aplicaci\u00f3n; puede reconocer la deriva por el aumento de bytes remotos a pesar de una carga estable.<\/p>\n\n<h2>Estructurar la arquitectura de la aplicaci\u00f3n de acuerdo con NUMA<\/h2>\n\n<p>A nivel de aplicaci\u00f3n, configuro mis propios grupos de trabajadores para cada nodo NUMA, mantengo las colas locales y evito los puntos calientes de bloqueo global para que <strong>Hilos<\/strong> no saltar de un lado a otro. Configuro la fragmentaci\u00f3n de sesiones y datos para que las particiones calientes permanezcan donde se ejecutan los trabajadores solicitantes y <strong>Tiempo<\/strong> no se pierde en el tr\u00e1fico entre nodos. Para las cach\u00e9s, a menudo utilizo r\u00e9plicas en lugar de una instancia central para que los lectores obtengan copias locales de nodo. En los clientes Netty, Tokio, libuv o DB, anclo los bucles de eventos a n\u00facleos fijos y presto atenci\u00f3n a la proximidad de IRQ para que los cambios de tarea sean limitados y <strong>Cach\u00e9s<\/strong> golpear mejor. Esta disposici\u00f3n reduce los efectos de ping-pong y hace que los tiempos de respuesta sean m\u00e1s constantes a lo largo del d\u00eda.<\/p>\n\n<p>Una palanca subestimada es <strong>Asignador<\/strong> y opciones de ejecuci\u00f3n: Los asignadores habilitados para NUMA (jemalloc\/tcmalloc) reducen la contenci\u00f3n entre hilos y mantienen las p\u00e1ginas m\u00e1s cerca de los n\u00facleos de origen de los hilos. En las pilas JVM, las opciones como NUMA awareness y pre-touch ayudan a determinar las fases de fallo; en .NET, alineo los hilos de GC cerca de los nodos y presto atenci\u00f3n a la GC del servidor para suavizar los tiempos de parada. En Go, dimensiono los GOMAXPROCS por pool de nodos y mantengo los planificadores de goroutine alejados de los n\u00facleos de latencia que trabajan cerca de IRQ.<\/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\/06\/server_performance_desk_7452.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Control sensible del autoequilibrio NUMA<\/h2>\n\n<p>Los mecanismos autom\u00e1ticos de equilibrio NUMA del n\u00facleo pueden ayudar a suavizar la carga distribuida, pero siempre compruebo si son capaces de cumplir mis <strong>Afinidad<\/strong> se ven perjudicados. En los servicios de latencia cr\u00edtica, deshabilito o reduzco el movimiento autom\u00e1tico si saca hilos de su memoria local y <strong>Consejos<\/strong> generado. Para trabajos anal\u00edticos o procesamiento por lotes amplios, tiendo a dejar activado el equilibrado porque puede aumentar el ancho de banda sin degradar la interacci\u00f3n. Una introducci\u00f3n pr\u00e1ctica a las estrategias de equilibrado me proporciona puntos de partida adicionales: <a href=\"https:\/\/webhosting.de\/es\/numa-equilibrio-servidor-optimizacion-de-memoria-hardware-numaflux\/\">Comprender el equilibrio NUMA<\/a> muestra cu\u00e1ndo debe llevar el sistema autom\u00e1tico y cu\u00e1ndo debe asignarse manualmente. Al final, tomo una decisi\u00f3n basada en datos para cada clase de servicio en lugar de adoptar a ciegas una configuraci\u00f3n global por defecto y <strong>Objetivos<\/strong> para fallar.<\/p>\n\n<p>Cuando se activa el equilibrado, controlo las tasas de migraci\u00f3n, los picos de fallos menores y mayores y el robo de CPU por nodo. Si las p\u00e1ginas se mueven de un lado a otro c\u00edclicamente, lo contrarresto con un pinning m\u00e1s estricto, pre-touch y m\u00e1scaras de memoria m\u00e1s estrechas. En cambio, en las cargas de trabajo con exploraciones largas y secuenciales, el equilibrado puede armonizar la carga, siempre que no se vean afectadas las rutas de latencia interactiva.<\/p>\n\n<h2>Seguimiento: medir, comparar, decidir<\/h2>\n\n<p>Sin mediciones, el ajuste sigue siendo un juego de adivinanzas, as\u00ed que hago un seguimiento de la carga de la CPU por n\u00facleo y por nodo, la utilizaci\u00f3n de la memoria por nodo y la proporci\u00f3n de <strong>Remoto<\/strong>-accesos. Para la experiencia del usuario, las latencias P95\/P99 cuentan mucho m\u00e1s que los valores medios, porque los valores at\u00edpicos caracterizan la impresi\u00f3n de SLA y <strong>Costos<\/strong> hacia arriba. Ejecuto perfiles de carga realistas con cach\u00e9s fr\u00edas y calientes porque ambos mundos muestran diferentes cuellos de botella. Despu\u00e9s de cada cambio, documento los ajustes, la fecha de la prueba y los resultados para poder revertir con seguridad las modificaciones m\u00e1s adelante y <strong>Conocimiento<\/strong> no se pierde. Si adem\u00e1s se correlacionan las m\u00e9tricas de la aplicaci\u00f3n (longitud de las colas, reintentos, recogida de basuras) con los valores del sistema, se puede reconocer m\u00e1s r\u00e1pidamente la causa y el efecto.<\/p>\n\n<p>Ayuda pr\u00e1ctica en el an\u00e1lisis:<\/p>\n<ul>\n  <li>numastat (relacionados con el sistema y el proceso) para local vs. <strong>Remoto<\/strong>-Hit<\/li>\n  <li>\/proc\/interrupts y SoftIRQ tiempo por CPU para IRQ drift<\/li>\n  <li>eventos perf y estad\u00edsticas del planificador para la profundidad de la cola de ejecuci\u00f3n, cambios de contexto, fallos de LLC, etc.<\/li>\n  <li>fio\/iperf\/wrk con grupos de trabajadores espec\u00edficos de cada nodo para realizar comparaciones reproducibles.<\/li>\n<\/ul>\n<p>La evaluaci\u00f3n se hace por nodo: Espero que los histogramas de latencia est\u00e9n pr\u00f3ximos entre s\u00ed. Si un nodo se mueve hacia arriba, primero busco una carga IRQ mal distribuida, deriva en la cach\u00e9 de p\u00e1ginas o heaps que se asignaron al nodo equivocado durante el calentamiento.<\/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\/06\/hosting-serverraum-8372.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA en m\u00e1quinas virtuales y contenedores<\/h2>\n\n<p>En virtualizaci\u00f3n, la colocaci\u00f3n de vCPUs y vRAM en un nodo compartido es importante para que las cargas de trabajo de los invitados no se deshilachen y <strong>Latencia<\/strong> tira para arriba. Dimensiono la RAM para que quepa en el nodo local y evito las grandes m\u00e1quinas virtuales que se extienden por varios nodos y <strong>Deriva<\/strong> disparador. Para los contenedores, utilizo controladores cpuset para que los grupos de pods funcionen de forma consistente en un nodo y el almacenamiento se cree localmente. Prefiero colocar a los hu\u00e9spedes de E\/S pesada en el nodo con una conexi\u00f3n de almacenamiento directa para mantener las rutas DMA cortas y <strong>IRQ<\/strong>-reducir el ruido. Esto significa que incluso los hosts de virtualizaci\u00f3n densos siguen siendo predecibles y llevan m\u00e1s proyectos en el mismo hardware.<\/p>\n\n<p>Presto atenci\u00f3n a <strong>vNUMA<\/strong>-Exposici\u00f3n: El hu\u00e9sped debe ver la misma estructura de nodos que el hipervisor proporciona f\u00edsicamente. vCPU pinning y vRAM binding van de la mano; muevo hot-adds durante ventanas de mantenimiento si es posible, porque de lo contrario las nuevas p\u00e1ginas acaban remotamente. En Kubernetes, configuro la QoS \u201egarantizada\u201c, el gestor de CPU \u201eest\u00e1tico\u201c y la colocaci\u00f3n seg\u00fan la topolog\u00eda para que los pods no se muevan entre nodos. Para SR-IOV\/VFs, asigno VFs al nodo f\u00edsico apropiado y enlazo las colas IRQ a los conjuntos de CPUs de los pods o VMs a los que sirven.<\/p>\n\n<h2>Preparaci\u00f3n espec\u00edfica del primer toque, calentamiento y amontonamiento<\/h2>\n\n<p>Muchos errores de rendimiento se producen durante <strong>Inicio<\/strong>Los montones crecen en la fase de calentamiento, cuando llegan las primeras peticiones, a menudo en el centro de un nodo. Por tanto, ejecuto calentamientos controlados para cada nodo: inicio instancias con una m\u00e1scara de CPU\/memoria establecida, ejecuto consultas de precarga espec\u00edficas e inicializo cach\u00e9s en paralelo para cada nodo. Para los servicios de la JVM, activo la precarga de la pila; para las bases de datos, segmento los buffer pools nodo por nodo. Esto reduce las migraciones de p\u00e1gina posteriores y garantiza que las primeras peticiones no caractericen aleatoriamente la distribuci\u00f3n de la memoria.<\/p>\n\n<h2>Ajuste del kernel\/BIOS para latencias constantes<\/h2>\n\n<p>Bajo el cap\u00f3, ajusto la potencia y la pol\u00edtica de interrupci\u00f3n:<\/p>\n<ul>\n  <li>Ajuste el regulador de la CPU a \u201erendimiento\u201c, limite los estados C profundos, utilice los estados C del paquete con cuidado para <strong>Jitter<\/strong> reducir.<\/li>\n  <li>No estrangular la frecuencia de la memoria; los perfiles energ\u00e9ticos equilibrados suelen minimizar <strong>Rendimiento<\/strong> bajo carga.<\/li>\n  <li>Evite la modulaci\u00f3n de espectro ensanchado\/reloj si la coherencia es m\u00e1s importante que un ahorro m\u00ednimo de energ\u00eda.<\/li>\n<\/ul>\n<p>A nivel de kernel, mantengo las CPUs de mantenimiento separadas de los n\u00facleos de latencia, minimizo las interrupciones del temporizador en los n\u00facleos calientes (nohz_full) y aparco el trabajo en segundo plano (compactaci\u00f3n, Kswapd) preferiblemente en los n\u00facleos de sistema de un nodo que no ejecuta rutas de latencia.<\/p>\n\n<h2>Resoluci\u00f3n de problemas y antipatrones t\u00edpicos<\/h2>\n\n<ul>\n  <li><strong>S\u00edntoma<\/strong>La latencia de P99 salta despu\u00e9s de los despliegues. <strong>Causa<\/strong>Heaps\/Caches first-touch en nodo err\u00f3neo. <strong>Soluci\u00f3n<\/strong>Calentamiento\/pre-toque bajo afinidad objetivo, luego abrir distribuidor de carga.<\/li>\n  <li><strong>S\u00edntoma<\/strong>Alto tiempo de SoftIRQ en CPUs \u201eerr\u00f3neas\u201c. <strong>Causa<\/strong>irqbalance distribuido por los nodos. <strong>Soluci\u00f3n<\/strong>Fijar la afinidad IRQ, establecer RPS\/RFS\/XPS compatible con el nodo.<\/li>\n  <li><strong>S\u00edntoma<\/strong>OOM en un nodo, aunque la RAM del sistema est\u00e9 libre. <strong>Causa<\/strong>M\u00e1scara NUMA estricta sin b\u00fafer. <strong>Soluci\u00f3n<\/strong>Corregir capacidad o usar \u201epreferente\u201c, establecer alertas por nodo.<\/li>\n  <li><strong>S\u00edntoma<\/strong>Rendimiento irregular con NVMe. <strong>Causa<\/strong>Asignaci\u00f3n incorrecta de colas, colas compartidas entre nodos. <strong>Soluci\u00f3n<\/strong>colas blk-mq\/NVMe por nodo, hilos de E\/S fijados.<\/li>\n<\/ul>\n\n<h2>Lista de control pr\u00e1ctica<\/h2>\n\n<ul>\n  <li>Registre la topolog\u00eda: Nodos, n\u00facleos, RAM, dispositivos PCIe por socket.<\/li>\n  <li>Dibuje la secci\u00f3n de servicio: \u00bfQu\u00e9 caminos son <strong>Latencia<\/strong>-cr\u00edtico, \u00bfqu\u00e9 lote?<\/li>\n  <li>Establezca la afinidad CPU\/memoria para cada clase; anote el primer toque al inicio.<\/li>\n  <li>Vincule IRQ\/colas cerca del nodo; compruebe las colas RSS\/RPS\/XPS y NVMe.<\/li>\n  <li>Monitorizaci\u00f3n en P95\/P99, acceso remoto, cola de ejecuci\u00f3n, distribuci\u00f3n IRQ.<\/li>\n  <li>Controle el autoequilibrio de forma selectiva; seleccione THP\/zone_reclaim_mode adecuadamente.<\/li>\n  <li>Mantenga vNUMA, vCPU pinning y vRAM binding consistentes en VMs\/contenedores.<\/li>\n  <li>Pruebe de forma iterativa, documente, retroceda en caso de desviaci\u00f3n y ajuste.<\/li>\n<\/ul>\n\n<h2>Breve resumen y calendario de puesta a punto<\/h2>\n\n<p>Aporta el mayor rendimiento, <strong>Hilos<\/strong> y memoria juntos, acortar las rutas de E\/S y distribuirlas s\u00f3lo con cuidado. Empiezo con un an\u00e1lisis de la topolog\u00eda, planifico los servicios nodo por nodo, establezco la afinidad de CPU y memoria, conecto la red\/almacenamiento adecuadamente y controlo los valores P95\/ P99 centr\u00e1ndome en <strong>Remoto<\/strong>-accesos. A continuaci\u00f3n, ajusto el tama\u00f1o de los grupos, las m\u00e1scaras IRQ y las pol\u00edticas hasta que los picos de latencia disminuyen y el rendimiento aumenta. Para las m\u00e1quinas virtuales y los contenedores, compruebo la colocaci\u00f3n por separado porque el hipervisor tiene mucha influencia y <strong>L\u00edmites<\/strong> funcionan de forma diferente. Si repite y documenta este proceso, obtendr\u00e1 un rendimiento mensurablemente mayor de la localidad NUMA del servidor y de la afinidad CPU-memoria, a menudo m\u00e1s barato que actualizar el hardware adicional en euros.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra c\u00f3mo la localidad NUMA del servidor y la afinidad CPU-memoria optimizan el rendimiento de su alojamiento. La gu\u00eda muestra ajustes pr\u00e1cticos de rendimiento para servidores modernos.<\/p>","protected":false},"author":1,"featured_media":19858,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-19865","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":"52","_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":"Server NUMA","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":"19858","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/19865","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=19865"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/19865\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/19858"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=19865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=19865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=19865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}