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]