[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [win-pv-devel] xenvbd (8.x) - blkback/tapdisk3 problems



> -----Original Message-----
[snip]
> >
> > Ok. I will prepare and test and debug more in next weeks.
> 
> I add some Trace() and compile with defined "DBG".
> I found problematic section and do some workaround.
> 
> The restart is done during "trim" handling "timeout" that cause PdoReset().
> PdoDispatch() -> PdoDispatchControl() -> PdoManageDataSetAttributes() ->
> PdoSendTrimSynchronous() -> PdoSendAwaitSrb() == TIMEOUT(>9s)
> 
> ===================
> 
> Example of ok trim log (without timeout between 00000010-00000011):
> 00000007        12:03:16        XENDISK|PdoDispatchControl:XXX 2987012
> 00000008        12:03:16        XENDISK|PdoManageDataSetAttributes:XXX 1
> 00000009        12:03:16        XENDISK|PdoSendTrimSynchronous:TRIM[0] 400 @
> 182c080
> 00000010        12:03:16        XENDISK|PdoSendAwaitSrb:XXX
> 00000011        12:03:16        XENDISK|__PdoSendAwaitSrb:XXX
> 00000012        12:03:16        XENDISK|PdoCompleteIrp:XXX
> 
> Example of timeout of trim (with timeout 00000021-00000027 (~37sec)
> (timeot reset at 00000022 after +-9sec)):
> 00000017        12:03:32        XENDISK|PdoDispatchControl:XXX 2987012
> 00000018        12:03:32        XENDISK|PdoManageDataSetAttributes:XXX 1
> 00000019        12:03:32        XENDISK|PdoSendTrimSynchronous:TRIM[0] 4db8
> @ 6f1a168
> 00000020        12:03:32        XENDISK|PdoSendTrimSynchronous:TRIM[1] 2a20
> @ 124c38c0
> 00000021        12:03:32        XENDISK|PdoSendAwaitSrb:XXX
> 00000022        12:03:41        XENVBD|__PdoReset:Target[0] ====>
> 00000023        12:03:41        XENVBD|PdoReset:Target[0] ====> (Irql=2)
> 00000024        12:03:41        XENVBD|__PdoPauseDataPath:Target[0] : Waiting
> for 2 Submitted requests
> 00000025        12:04:09        XENVBD|NotifierDpc:Target[0] : Paused, 2
> outstanding
> 00000026        12:04:09        XENVBD|NotifierDpc:Target[0] : Paused, 1
> outstanding
> 00000027        12:04:09        XENDISK|__PdoSendAwaitSrb:XXX
> 00000028        12:04:09        XENDISK|PdoCompleteIrp:XXX
> 00000029        12:04:09        XENVBD|__PdoPauseDataPath:Target[0] : 0/2
> Submitted requests left (27838 iterrations)
> 00000030        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> =====>
> 00000031        12:04:09        XENVBD|__FrontendSetState:Target[0] : ENABLED
> ----> CLOSING
> 00000032        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> CONNECTED
> 00000033        12:04:09        XENVBD|__UpdateBackendPath:<<
> /local/domain/0/backend/vbd/2/768
> 00000034        12:04:09        XENVBD|__UpdateBackendPath:>>
> /local/domain/0/backend/vbd/2/768
> 00000035        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> Connected
> 00000036        12:04:09        XENVBD|___SetState:Target[0] :
> FRONTEND_STATE -> Closing
> 00000037        12:04:09        XENVBD|FdoScan:waiting...
> 00000038        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> Closing
> 00000039        12:04:09        XENVBD|___SetState:Target[0] :
> FRONTEND_STATE -> Closed
> 00000040        12:04:09        XENVBD|FdoScan:waiting...
> 00000041        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> Closed
> 00000042        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> CLOSING
> 00000043        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> <===== (SUCCEEDED)
> 00000044        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> =====>
> 00000045        12:04:09        XENVBD|__FrontendSetState:Target[0] : CLOSING 
> -
> ---> CLOSED
> 00000046        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> CLOSED
> 00000047        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> <===== (SUCCEEDED)
> 00000048        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> =====>
> 00000049        12:04:09        XENVBD|__FrontendSetState:Target[0] : CLOSED 
> --
> --> ENABLED
> 00000050        12:04:09        XENVBD|__UpdateBackendPath:<<
> /local/domain/0/backend/vbd/2/768
> 00000051        12:04:09        XENVBD|__UpdateBackendPath:>>
> /local/domain/0/backend/vbd/2/768
> 00000052        12:04:09        XENVBD|FrontendWriteUsage:Target[0] : DUMP
> NOT_HIBER PAGE
> 00000053        12:04:09        XENVBD|___SetState:Target[0] :
> FRONTEND_STATE -> Initialising
> 00000054        12:04:09        XENVBD|FdoScan:waiting...
> 00000055        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> Closed
> 00000056        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> InitWait
> 00000057        12:04:09        XENVBD|PdoUpdateInquiryData:Target[0] : VDI-
> UUID = {00000000-0000-0000-0000-000000000000}
> 00000058        12:04:09        XENVBD|FrontendPrepare:Target[0] : BackendId 0
> (/local/domain/0/backend/vbd/2/768)
> 00000059        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> PREPARED
> 00000060        12:04:09        XENVBD|___SetState:Target[0] :
> FRONTEND_STATE -> Initialised
> 00000061        12:04:09        XENVBD|FdoScan:waiting...
> 00000062        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> InitWait
> 00000063        12:04:09        XENVBD|FdoScan:waiting...
> 00000064        12:04:09        XENVBD|__WaitState:Target[0] : BACKEND_STATE
> -> Connected
> 00000065        12:04:09        XENVBD|___SetState:Target[0] :
> FRONTEND_STATE -> Connected
> 00000066        12:04:09        XENVBD|FdoScan:waiting...
> 00000067        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> CONNECTED
> 00000068        12:04:09        XENVBD|__FrontendSetState:Target[0] : in state
> ENABLED
> 00000069        12:04:09        XENVBD|__FrontendSetState:Target[0] @ (2)
> <===== (SUCCEEDED)
> 00000070        12:04:09        XENVBD|PdoReset:Target[0] <==== (Irql=2)
> 00000071        12:04:09        XENVBD|__PdoReset:Target[0] <====
> 
> =============================
> 
> The "disk-tap" does not forward/support "Trim" (with log "DISCARD not
> supported, suppressing") and works ok.
> I found workaround - do not forward trim reqests.
> I commented out case "DeviceDsmAction_Trim" in
> "PdoManageDataSetAttributes()" to fall to "PdoForwardIrpAndForget()".
> (Windows 7 do not ask for "DeviceTrimProperty" to disable it in properties.)
> 


Hi Martin,

Interesting. So your underlying storage is taking a long time to complete 
trims. Sounds like we probably need to do a couple of things then:

a) Increase the default trim timeout. I thought we'd bumped it up well beyond 
the 10s mark (which I think is default but I could be wrong), but I guess we 
need something quite a bit longer.
b) Provide a registry override to trim can be turned off in the frontend even 
if the storage supports it.

I'll look into doing these things in the 8.2 codebase a.s.a.p.

Thanks for figuring this one out!

Cheers,

    Paul

_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.