irqtune

A lo mejor te ha pasado esto alguna vez: te conectas a Internet utilizando un modem a través del puerto serie, y grabas CDs mediante una grabadora IDE. Cuando estás grabando un CD la conexión se te corta. ¿A qué es debido esto? Puede ser debido a algo que sucede con los núcleos 2.x; cuando hay mucha carga en los IDEs, los puertos series dejan de funcionar.
Para solucionar esta situación podemos hacer uso de irqtune, perteneciente al paquete hwtools. Este programa se encarga de dar más prioridad a las interrupciones del puerto serie que a las de disco. Concretamente, irqtune da la mayor prioridad a las interrupciones del dispositivo que le indiquemos. Si especificamos un dispositivo serie, se nos asegurará que dicho dispositivo tomará el control siempre que sea necesario.
La pregunta que nos podemos hacer es si esto influirá en el rendimiento del resto de dispositivos. La respuesta es que no mucho. En la praáctica, la mayoría de dispositivos no notarán la diferencia. Eso es debido a que la mayoría de estos dispositivos hacen uso de DMA, reduciendo sus necesidades de interrupciones. Además, los servicios lanzados con las interrupciones de los dispositivos serie son muy rápidos.

Instalación de irqtune

Dependiendo del sistema la instalación será distinta. En el caso de una distribución Debian, bastará con ejecutar
apt-get install hwtools
En el caso de hacer uso de una distribución basada en Red Hat, deberemos hacer una búsqueda del paquete RPM correspondiente, ya sea en los cds de la distribución, o en páginas como rpmfind. La instalación es tan sencilla como ejecutar:
rpm -Uvh hwtools.rpm

Uso de irqtune

Para hacer uso de irqtune no es necesario recompilar el kernel. irqtune utiliza insmod y rmmod para cargar y descargar dinámicamente un módulo del kernel. Habría que interpretar que irqtune es un parche al núcleo. La diferencia es que no es necesario parchear el núcleo como suele ser habitual. Usa insmod para cargar el parche, invocarlo, y más tarde descargarlo. Los cambios en la prioridad de las interrupciones durará hasta que reiniciemos el núcleo. Por lo tanto, será necesario que lo incluyamos en algún script de inicio para que el cambio tenga lugar cada vez que reiniciemos la máquina.
irqtune toma dos argumentos:
irqtune master slave
Los valores por defecto son 3 y 14 que funcionarán con la mayoría de configuraciones. Estos valores quieren decir que la máxima prioridad se dará a la IRQ 3, que es normalmente la correspondiente al primer puerto serie.
Para determinar la configuración de las IRQ existente, ejecutaremos:
irqtune -n -o
obtendremos algo similar a:

SORTED BY IRQ: SORTED BY PRIORITY:
I00/P00: 8578913 timer I00/P00: 8578913 timer
I01/P01: 109547 keyboard I01/P01: 109547 keyboard
I02/P02: 0 + cascade I02/P02: 0 + cascade
I03/P10: 86470 + serial I11/P05: 197648 + sermux
I04/P11: 197648 + serial I12/P06: 17968 + eth
I11/P05: 197648 + sermux I13/P07: 1 math error
I12/P06: 17968 + eth I14/P08: 93123 + Ux4F
I13/P07: 1 math error I03/P10: 86470 + serial
I14/P08: 93123 + Ux4F I04/P11: 197648 + serial

El número situado más a la izquierda es el número de interrupción. El siguiente número es la prioridad. El valor más a la derecha es el nombre interno de dispositivo (no confundir con los dispositivos /dev). En el caso anterior, los dos puertos serie están en IRQ 3 e IRQ 4. Para darle al IRQ 3 la máxima prioridad, ejecutamos:
irqtune 3
Puedes obtener mucha más información sobre irqtune en http://cae.best.vwh.net/irqtune/.

[VOLVER]