27 votos

¿Qué significa "La operación IO en la dirección de bloque lógico # para el Disco # fue reintentada" cuando se ve en el registro de eventos del Sistema Windows Server?

Tengo multipath IO configurado server 2012 blade que muestra advertencias como las siguientes durante el fallo de la ruta MPIO:

Se ha vuelto a intentar la operación de IO en la dirección lógica de bloque 0 para el disco 7.

Sé qué es lo que provoca la advertencia, así que no estoy buscando la causa, pero ¿qué significa realmente este mensaje?

¿Significa esto que si esta IO fue una operación de escritura entonces el servidor realmente perdió los datos que estaba tratando de escribir?

Gracias por la luz que puedan arrojar sobre el significado de este mensaje de advertencia.

38voto

Ryan Ries Puntos 33449

No, no significa que los datos se hayan perdido. Simplemente significa que el IRP (IO Request Packet) se agotó mientras el Sistema IO esperaba a que se completara, y entonces se intentó de nuevo. Cuando un hilo comienza cualquier operación de IO, el gestor de IO crea un IRP para representar la operación mientras pasa por el sistema.

El IRP se almacena en su estado inicial en una lista buffer/look-aside, para que pueda ser reintentado si falla la primera vez. Esto proporciona la atomicidad que uno esperaría de cualquier sistema transaccional, de modo que podemos estar más seguros de que no vas a tener un montón de datos corruptos o incompletos escritos en tu disco.

Este evento tiene mucho sentido en el caso de un fallo de MPIO. Digamos que Windows va a leer o escribir algo del almacenamiento SAN. La petición se despacha, y en el mismo instante, corto uno de los cables a la SAN. Esa petición nunca se va a completar, y entonces Windows intentará la petición de nuevo, sólo que esta vez la petición seguirá el otro camino.

Estos eventos también ocurren cuando los discos están sobrecargados o simplemente son muy lentos. Puedes notar que estos mensajes coinciden con copias de seguridad programadas, etc. El disco puede estar lento y ocupado, y algún IRP aleatorio se ha agotado y ha tenido que intentarlo de nuevo. El IRP podría estar atascado en una rutina de servicio de interrupción, o una llamada de procedimiento diferida, o lo que sea.

Podría ver que tener un montón de controladores de filtro IO en su pila exacerba este problema también.

No es que este comportamiento no ocurriera igual en versiones anteriores de Windows, es que aparentemente Microsoft decidió sacar a la luz estos eventos en Win8/Server 2012.

Editar: Puedes encontrar los IRPs pendientes de un hilo con un depurador del kernel: kd> !irp 1a2b3c4d , donde previamente encontró esa dirección emitiendo el comando kd> !process 8f7d6c4a que listará todos los IRP asociados a los hilos asociados a ese proceso. kd> !process 0 0 para listar todos los procesos en ejecución.

Una vez que se liste la información sobre un IRP usando el comando !irp, se puede detectar fácilmente cuál fue el último controlador que manejó el IRP porque tendrá un > señalándolo en la lista. Luego, para obtener más información sobre lo que ese controlador estaba haciendo con ese IRP, haz un kd> !devobj 1a2b3c4d5e6f donde es la dirección real del objeto dispositivo.

Entonces haz un kd> dt 0x1a2b3c3c2b1a _CLASS_PRIVATE_FDO_DATA utilizando la dirección de la estructura PrivateFdoData que obtuvo.

Ahora está listo para volcar la estructura de datos AllTransferPacketsList que obtuvo de PrivateFdoData.

La idea es que se está rastreando qué conductor estaba haciendo qué con el IRP la última vez que se vio. Si el IRP está ausente por mucho tiempo, se le da un tiempo de espera y se vuelve a intentar desde el principio. Esto puede ser causado por muchas cosas... incluso un rayo cósmico perdido. Pero lo importante es que la transacción será reintentada desde el principio, y no se considerará completa hasta que el gestor de IO diga que lo está.

Ah, y también hay IO agnóstica de hilos que es una completamente otra lata de gusanos. :)

Para más información sobre este tema, yo altamente recomiendan el capítulo 8, I/O System, de Windows Internals 6th edition, de Mark Russinovich, Margosis, et al.

**Edición: ** Finalmente encontré la KB oficial para este error: http://support.microsoft.com/kb/2819485/EN-US

La operación de IO debe reintentarse 8 veces, una por minuto, hasta que Windows se rinda.

Edición: Como se prometió: https://docs.microsoft.com/en-us/archive/blogs/ntdebugging/interpreting-event-153-errors

1 votos

Gracias Ryan, esperaba que significara que la petición se retiró pero los datos no se perdieron y se crearía otra petición para intentar escribir los datos de nuevo. ¿Puedes hacer referencia a alguna de las fuentes de tu respuesta (libros, artículos, una nota indicando que tienes acceso al código fuente de Windows porque eres un gran cliente de EA e hiciste un rastreo de depuración para encontrar esta información, etc.)? Me encantaría entender esto más a fondo.

2 votos

He editado mi post para responder a tus preguntas de seguimiento. Lo más probable es que tenga más información que añadir más tarde.

2 votos

Cualquiera que pueda recurrir al depurador de Windows para respaldar su punto de vista se gana un gran prestigio en mi libro. No se puede votar la respuesta de nuevo, así que upvoting el comentario tendrá que hacer. Tengo la 6ª edición de Windows Internals parte 1 y me voy a comprar la parte 2 con el capítulo 8 ahora. Gracias

6voto

Greg Askew Puntos 17236

No, habría un mensaje diferente, y (con suerte) una de las capas de la aplicación lanzaría una excepción si no pudiera guardar los datos con éxito.

Antes de Windows Server 2012 (o del hotfix 2819485 si está en Windows Server 2008 R2), el sistema reintentaba silenciosamente cuando se producían estos tiempos de espera. El propósito del mensaje es aumentar la visibilidad de estas ocurrencias. Pueden indicar un problema de capacidad o un defecto del controlador y, en el caso de iSCSI, otros defectos del sistema operativo pueden atribuir el retraso.

En el caso del almacenamiento externo (no conectado directamente), algunos proveedores han aumentado en el pasado el valor del tiempo de espera, por ejemplo a 60 segundos. Sin embargo, dado el número predeterminado de reintentos por parte de los componentes de capa superior, como el iniciador iSCSI, esto podría significar que podrían transcurrir varios minutos antes de que el sistema iniciara una conmutación por error. Esto sería obviamente un comportamiento subóptimo.

Más información:

Entradas en el registro para los controladores de minipuertos SCSI
http://msdn.microsoft.com/en-us/library/Windows/hardware/ff563970%28v=vs.85%29.aspx

https://docs.microsoft.com/en-us/archive/blogs/san/the-Windows-disk-timeout-value-less-is-better


Microsoft ha publicado una actualización que proporciona la capacidad de especificar el umbral para las operaciones de storport.sys.

Después de instalar esta actualización, puede registrar un evento cuando el tiempo de latencia de E/S al almacenamiento es igual o mayor que un umbral. El valor del umbral puede ser establecido por el usuario. Esta operación se realiza en el nivel del controlador del adaptador para que pueda ver si hay un problema de rendimiento en la SAN. A continuación, puede ponerse en contacto con un proveedor de almacenamiento para solucionar el problema.

Nota: Esta actualización restaura la funcionalidad que se proporcionaba en Windows 7 y Windows Server 2008 R2. Cuando la funcionalidad está habilitada, el valor del umbral se mide en 100 nanosegundos (0,0001 milisegundos). Además, los siguientes valores se registran en el evento:

BuildIoDuration : Duración del tiempo que el MINIPORT ha pasado en la función de construcción de E/S para esta solicitud StartIoDuration : Duración del tiempo que el MINIPORT ha pasado en la función de inicio de E/S para esta solicitud DataTransferLength : Tamaño de la transferencia en bytes

Actualización que mejora las capacidades de registro del controlador Storport.sys en Windows Server 2012
http://support.microsoft.com/kb/2819476

Actualización acumulativa de Windows 8 y Windows Server 2012: abril de 2013
http://support.microsoft.com/kb/2822241

4voto

dale wright Puntos 11

Puede ser un post tardío, pero he encontrado que puede ser causado con VSS. Tuvimos un cliente que estaba ejecutando veeam, pero se había olvidado de apagar el servidor de Windows de copia de seguridad (el disco fue retirado) Causó un montón de problemas y este error fue el principal.

Detuve la copia de seguridad y zas, no hay errores.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X