Go to main content
Guía de administración para Oracle® VM Server for SPARC 3.4

Salir de la Vista de impresión

Actualización: Agosto de 2016
 
 

Ajuste del límite de interrupciones

El hardware proporciona un número limitado de interrupciones; por lo tanto, Oracle Solaris limita la cantidad de interrupciones que cada dispositivo puede utilizar. El límite predeterminado debe coincidir con las necesidades de una configuración de sistema típica pero es posible que deba ajustar este valor para determinadas configuraciones del sistema.


Notas - Estas limitaciones no se aplican a los servidores serie SPARC M7 ni a los servidores serie SPARC T7.

Al activar la virtualización de E/S en un bus PCIe, los recursos de interrupción de hardware se asignan a cada dominio de E/S. A cada dominio se le asigna un número limitado de estos recursos, lo cual puede provocar algunos problemas de asignación de interrupciones. Esta situación afecta solamente a las plataformas UltraSPARC T2, UltraSPARC T2 Plus, SPARC T3, SPARC T4, SPARC T5, SPARC M5, y SPARC M6.

La siguiente advertencia en la consola de Oracle Solaris significa que el suministro de interrupciones se agotó al conectar los controladores de dispositivo de E/S:

WARNING: ddi_intr_alloc: cannot fit into interrupt pool

Específicamente, es posible que sea necesario ajustar el límite si el sistema está particionado en varios dominios lógicos y si hay demasiados dispositivos de E/S asignados a algún dominio invitado. Oracle VM Server for SPARC divide el total de las interrupciones en pequeños conjuntos y los asigna a los dominios invitados. Si hay demasiados dispositivos de E/S asignados a un dominio invitado, el suministro de interrupciones puede ser demasiado pequeño para proporcionar a cada dispositivo el límite predeterminado de interrupciones. Por lo tanto, el dominio invitado agota el suministro de interrupciones antes de que se conecten completamente todos los controladores.

Algunos controladores proporcionan una rutina de devolución de llamada opcional que le permite a SO Oracle Solaris ajustar automáticamente sus interrupciones. El límite predeterminado no se aplica a estos controladores.

Utilice las macros MDB ::irmpools y ::irmreqs para determinar cómo se utilizan las interrupciones. La macro ::irmpools muestra el suministro total de interrupciones dividido en agrupaciones. La macro ::irmreqs muestra los dispositivos asignados a cada agrupación. Para cada dispositivo, ::irmreqs muestra si el límite predeterminado se aplica por una rutina de devolución de llamada opcional, la cantidad de interrupciones solicitadas por cada controlador y la cantidad de interrupciones que recibe el controlador.

Aunque estas macros no muestran información sobre los controladores que no se ha podido anexar, puede utilizar la información para calcular la medida en que puede ajustar el límite por defecto. Cualquier dispositivo que utiliza más de una interrupción sin proporcionar una rutina de devolución de llamada puede forzarse a utilizar menos interrupciones ajustando el límite predeterminado. Para tales dispositivos, reduzca el límite predeterminado para liberar interrupciones que puedan utilizar otros dispositivos.

Para ajustar el límite predeterminado, establezca la propiedad ddi_msix_alloc_limit en un valor de 1 a 8 en el archivo /etc/system. A continuación, reinicie el sistema para que el cambio surta efecto.

Para obtener información acerca de crear o actualizar correctamente los valores de propiedad /etc/system, consulte Actualización de valores de propiedad en el archivo /etc/system.

Para maximizar el rendimiento, comience por asignar los mayores valores y reducir los valores en incrementos pequeños hasta que el sistema se inicie correctamente sin advertencias. Use las macros ::irmpools y ::irmreqs para medir el impacto del ajuste en todos los controladores conectados.

Por ejemplo, suponga que las siguientes advertencias se emiten durante el inicio del SO Oracle Solaris en un dominio invitado:

WARNING: emlxs3: interrupt pool too full.
WARNING: ddi_intr_alloc: cannot fit into interrupt pool

Las macros ::irmpools y ::irmreqs muestran la siguiente información:

# echo "::irmpools" | mdb -k
ADDR             OWNER   TYPE   SIZE  REQUESTED  RESERVED
00000400016be970 px#0    MSI/X  36    36         36

# echo "00000400016be970::irmreqs" | mdb -k
ADDR             OWNER   TYPE   CALLBACK NINTRS NREQ NAVAIL
00001000143acaa8 emlxs#0 MSI-X  No       32     8    8
00001000170199f8 emlxs#1 MSI-X  No       32     8    8
000010001400ca28 emlxs#2 MSI-X  No       32     8    8
0000100016151328 igb#3   MSI-X  No       10     3    3
0000100019549d30 igb#2   MSI-X  No       10     3    3
0000040000e0f878 igb#1   MSI-X  No       10     3    3
000010001955a5c8 igb#0   MSI-X  No       10     3    3

El límite predeterminado en este ejemplo es de ocho interrupciones por dispositivo, lo cual no es suficiente para la conexión del dispositivo final emlxs3 con el sistema. Dado que todas las instancias de emlxs se comportan del mismo modo, supone que emlxs3 probablemente solicitó 8 interrupciones.

Al restar las 12 interrupciones utilizadas por todos los dispositivos igb de la agrupación total de 36 interrupciones, quedan 24 interrupciones disponibles para los dispositivos emlxs. La división de las 24 interrupciones por 4 sugiere que 6 interrupciones por dispositivo permitirían que todos los dispositivos emlxs se conecten con el mismo rendimiento. Por lo tanto, el siguiente ajuste se agrega al archivo /etc/system:

set ddi_msix_alloc_limit = 6

Para obtener información acerca de crear o actualizar correctamente los valores de propiedad /etc/system, consulte Actualización de valores de propiedad en el archivo /etc/system.

Cuando el sistema se inicia correctamente sin advertencias, las macros ::irmpools y ::irmreqs muestran la siguiente información actualizada:

primary# echo "::irmpools" | mdb -k
ADDR             OWNER   TYPE   SIZE  REQUESTED  RESERVED
00000400018ca868 px#0    MSI/X  36    36         36
 
# echo "00000400018ca868::irmreqs" | mdb -k
ADDR             OWNER   TYPE   CALLBACK NINTRS NREQ NAVAIL
0000100016143218 emlxs#0 MSI-X  No       32     8    6
0000100014269920 emlxs#1 MSI-X  No       32     8    6
000010001540be30 emlxs#2 MSI-X  No       32     8    6
00001000140cbe10 emlxs#3 MSI-X  No       32     8    6
00001000141210c0 igb#3   MSI-X  No       10     3    3
0000100017549d38 igb#2   MSI-X  No       10     3    3
0000040001ceac40 igb#1   MSI-X  No       10     3    3
000010001acc3480 igb#0   MSI-X  No       10     3    3