On Mon, 2012-10-08 at 16:24 -0400, Andy Adamson wrote: > On Mon, Oct 8, 2012 at 4:04 PM, Myklebust, Trond > <Trond.Myklebust@xxxxxxxxxx> wrote: > > On Mon, 2012-10-08 at 15:59 -0400, Andy Adamson wrote: > >> On Mon, Oct 8, 2012 at 1:50 PM, Trond Myklebust > >> <Trond.Myklebust@xxxxxxxxxx> wrote: > >> > Aside from it being a layering violation, there is no point in doing so: > >> > - If slots are available, then the waitqueue will be empty. > >> > - If no slots are available, then the wake up just causes waitqueue churn > >> > >> We call rpc_wake_up so that I/O waiting on the DS session, all of > >> which needs to be re-directed to the MDS (not via the state recovery > >> machinery), will by-pass the RPC machine "try each task one at a time > >> and redirect on failure" which includes the 60 second TCP timeout on > >> DS connection failures. > >> > >> So, it doesn't just cause waitqueue churn, it significantly reduces > >> the time it takes to recover to the MDS. > >> > > > > All it does is a wake up... That will happen _ANYWAY_ as soon as a slot > > is made available. > > That is true. But why wait? Especially when all tasks are I/O, and if > the application happens to be doing a heavy I/O workload, there can be > hundreds of tasks on that wait queue. > > We don't care if any DS slots are available. We have given up and re > redirecting these tasks to the MDS session. The sooner, the better. You aren't just redirecting those tasks, you are waking up _all_ tasks on that nfs_client's session. That _may_ be acceptable in the case where we call nfs4_mark_deviceid_unavailable(), _if_ the nfs_client is a pure data server and isn't also acting as an MDS for some filesystem. It is clearly overkill in the case where the DS is returning NFS4ERR_FHEXPIRED or some such error that applies only to this one layout. > I'll re-run some tests and demonstrate the time difference > with/without the rpc_wake_up. -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥