Solución:
Su computadora se comunica con los dispositivos conectados a ella a través de IRQ (solicitudes de interrupción). Cuando una interrupción proviene de un dispositivo, el sistema operativo detiene lo que estaba haciendo y comienza a abordar esa interrupción.
En algunas situaciones, las IRQ vienen muy, muy rápidamente, una tras otra y el sistema operativo no puede terminar de dar servicio a una antes de que llegue otra. Esto puede suceder cuando una tarjeta de red de alta velocidad recibe una gran cantidad de paquetes en un período de tiempo corto.
Debido a que el sistema operativo no puede manejar las IRQ a medida que llegan (porque llegan demasiado rápido una tras otra), el sistema operativo las pone en cola para su posterior procesamiento mediante un proceso interno especial llamado ksoftirqd
.
Si ksoftirqd
está tomando más de un pequeño porcentaje del tiempo de la CPU, esto indica que la máquina está bajo una gran carga de interrupción.
Desde la página de manual, ksoftirqd
es un hilo de kernel por CPU que se ejecuta cuando la máquina está bajo una carga pesada de interrupción suave.
Puede modificar un poco la configuración, definiendo qué CPU capta una determinada interrupción. Esto se hace cambiando el contenido de /proc/irq/$interrupt_number/smp_affinity
. Puede obtener una lista de interrupciones y su significado haciendo:
cat /proc/interrupts
El numero en smp_affinity
es un mapa de bits de cpus, representado en código hexadecimal. El bit más a la derecha es el menos significativo. Por ejemplo, mi sistema tiene 8 núcleos. Si quisiera usar solo los núcleos 1, 3 y 4, establecería smp_affinity en 1a
:
cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
0 0 0 1 1 0 1 0 = 0001 1010 = 1a (in hex)
Personalmente, configuré cualquier CPU para poder captar la interrupción 29 (eth0 en mi sistema de 8 núcleos) con:
echo ff | sudo tee /proc/irq/29/smp_affinity
ksoftirqd es un subproceso del kernel por CPU que se ejecuta cuando la máquina está bajo una carga pesada de interrupción suave, por lo que no está consumiendo su CPU sino reduciendo su carga de IRQ.