Re: CephFS kclient gets stuck when getattr() on a certain file

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

 



On Fri, May 7, 2021 at 1:03 PM Jerry Lee <leisurelysw24@xxxxxxxxx> wrote:
>
> Hi,
>
> First, thanks for all the great information and directions!  Since the
> issue can be steadily re-produced in my environment, and it doesn't
> occur before I upgraded ceph from v15.2.4 to v15.2.9.  I checked the
> changlogs between v15.2.4 and v15.2.9, and reverted some possible PR
> related to CephFS and mds.  Luckily, after reverting all the commits
> of the "mds: reduce memory usage of open file table prefetch #37382
> (pr#37383), https://github.com/ceph/ceph/pull/37383"; RP, the issue
> never occurs.
>

should be fixed by following patch

diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc
index c534fae1b4..c98cb3ea77 100644
--- a/src/mds/Locker.cc
+++ b/src/mds/Locker.cc
@@ -5469,6 +5469,7 @@ void Locker::file_eval(ScatterLock *lock, bool
*need_issue)
   }
   else if (in->state_test(CInode::STATE_NEEDSRECOVER)) {
     mds->mdcache->queue_file_recover(in);
+    mds->mdcache->do_file_recover();
   }
 }



> However, those commits are kind of complicated and I'm still looking
> into it in order to figure out the root cause.  If there is anything I
> can do to locate the bug, please let me know, thanks!
>
> - Jerry
>
> On Tue, 4 May 2021 at 20:02, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> >
> > IIUC, when a client reboots and mounts again, it becomes a new client,
> > for all intents and purposes. So if the MDS is still maintaining the
> > session from the old (pre-reboot) client, the new client will generally
> > need to wait until that session is evicted before it can grab any caps
> > that that client previously held. This was one of the reasons we added
> > some of the reboot recovery stuff into libcephfs to support the nfs-
> > ganesha client use-case.
> >
> > Assuming that's the case here, we might be able to eventually improve
> > that by having kclients set their identity on the session at mount time
> > (a'la ceph_set_uuid), and then it could tell the MDS that it was safe to
> > release the state that that client previously held. That would mean
> > generating a unique per-client ID that was invariant across reboots, but
> > we could consider it.
> >
> > -- Jeff
> >
> > On Mon, 2021-05-03 at 14:20 -0700, Gregory Farnum wrote:
> > > I haven't looked at the logs, but it's expected that when a client
> > > disappears and it's holding caps, the MDS will wait through the
> > > session timeout period before revoking those capabilities. This means
> > > if all your clients are reading the file, writes will be blocked until
> > > the session timeout passes. The details of exactly what operations
> > > will be allowed vary quite a lot depending on the exact system state
> > > when the client disappeared (if it held write caps, most read
> > > operations will also be blocked and new clients trying to look at it
> > > will certainly be blocked).
> > >
> > > I don't remember exactly how specific kernel client blocklists are,
> > > but there may be something going on there that makes things extra hard
> > > on the rebooted node if it's maintaining the same IP addresses.
> > >
> > > If you have other monitoring software to detect failures, there are
> > > ways to evict clients before the session timeout passes (or you could
> > > have the rebooted node do so) and these are discussed in the docs.
> > > -Greg
> > >
> > > On Tue, Apr 27, 2021 at 9:35 PM Jerry Lee <leisurelysw24@xxxxxxxxx> wrote:
> > > >
> > > > Hi,
> > > >
> > > > I deploy a 3-node Ceph cluster (v15.2.9) and the CephFS is mounted via
> > > > kclient (linux-4.14.24) on all of the 3 nodes.  All of the kclients
> > > > try to update (read/write) a certain file periodically in order to
> > > > know whether the CephFS is alive or not.  After a kclient gets evicted
> > > > due to abnormal reboot, a new kclient mounts to the CephFS when the
> > > > node comes back.  However, the newly mounted kclient gets stuck when
> > > > it tries to getattr on the common file.  Under such conditions, all of
> > > > the other kclients are affected and they cannot update the common
> > > > file, too.  From the debugfs entris, a request does get stuck:
> > > > ------
> > > > [/sys/kernel/debug/ceph/1bbb7753-85e5-4d33-a860-84419fdcfd7d.client3230166]
> > > > # cat mdsc
> > > > 12      mds0    getattr  #100000003ed
> > > >
> > > > [/sys/kernel/debug/ceph/1bbb7753-85e5-4d33-a860-84419fdcfd7d.client3230166]
> > > > # cat osdc
> > > > REQUESTS 0 homeless 0
> > > > LINGER REQUESTS
> > > > BACKOFFS
> > > >
> > > > [/sys/kernel/debug/ceph/1bbb7753-85e5-4d33-a860-84419fdcfd7d.client3230166]
> > > > # ceph -s
> > > >   cluster:
> > > >     id:     1bbb7753-85e5-4d33-a860-84419fdcfd7d
> > > >     health: HEALTH_WARN
> > > >             1 MDSs report slow requests
> > > >
> > > >   services:
> > > >     mon: 3 daemons, quorum Jerry-ceph-n2,Jerry-x85-n1,Jerry-x85-n3 (age 23h)
> > > >     mgr: Jerry-x85-n1(active, since 25h), standbys: Jerry-ceph-n2, Jerry-x85-n3
> > > >     mds: cephfs:1 {0=qceph-mds-Jerry-ceph-n2=up:active} 1
> > > > up:standby-replay 1 up:standby
> > > >     osd: 18 osds: 18 up (since 23h), 18 in (since 23h)
> > > > ------
> > > >
> > > > The MDS logs (debug_mds =20) are provided:
> > > > https://drive.google.com/file/d/1aj101NOTzCsfDdC-neqVTvKpEPOd3M6Q/view?usp=sharing
> > > >
> > > > Some of the logs wrt client.3230166 and ino#100000003ed are shown as below:
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700  4 mds.0.server
> > > > handle_client_request client_request(client.3230166:12 getattr
> > > > pAsLsXsFs #0x100000003ed 2021-04-27T11:57:03.469426+0800 caller_uid=0,
> > > > caller_gid=0{}) v2
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 20 mds.0.98 get_session have
> > > > 0x56130c5ce480 client.3230166 v1:192.168.92.89:0/679429733 state open
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 15 mds.0.server  oldest_client_tid=12
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700  7 mds.0.cache request_start
> > > > request(client.3230166:12 nref=2 cr=0x56130db96480)
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700  7 mds.0.server
> > > > dispatch_client_request client_request(client.3230166:12 getattr
> > > > pAsLsXsFs #0x100000003ed 2021-04-27T11:57:03.469426+0800 caller_uid=0,
> > > > caller_gid=0{}) v2
> > > >
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 10 mds.0.locker
> > > > acquire_locks request(client.3230166:12 nref=3 cr=0x56130db96480)
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 10
> > > > mds.0.cache.ino(0x100000003ed) auth_pin by 0x56130c584ed0 on [inode
> > > > 0x100000003ed [2,head]
> > > > /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/ids
> > > > auth v91583 pv91585 ap=4 recovering s=1048576 n(v0
> > > > rc2021-04-27T11:57:02.625542+0800 b1048576 1=1+0) (ifile mix->sync
> > > > w=1) (iversion lock)
> > > > cr={3198501=0-4194304@1,3198504=0-4194304@1,3221169=0-4194304@1}
> > > > caps={3198501=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@17,3198504=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@9,3230166=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@2}
> > > > > ptrwaiter=1 request=1 lock=2 caps=1 dirty=1 waiter=0 authpin=1
> > > > 0x56130c584a00] now 4
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 15
> > > > mds.0.cache.dir(0x100000003eb) adjust_nested_auth_pins 1 on [dir
> > > > 0x100000003eb /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/
> > > > [2,head] auth pv=91586 v=91584 cv=0/0 ap=1+4 state=1610874881|complete
> > > > f(v0 m2021-04-23T15:00:04.377198+0800 6=6+0) n(v3
> > > > rc2021-04-27T11:57:02.625542+0800 b38005818 6=6+0) hs=6+0,ss=0+0
> > > > dirty=4 | child=1 dirty=1 waiter=0 authpin=1 0x56130c586a00] by
> > > > 0x56130c584a00 count now 1/4
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 10 mds.0
> > > > RecoveryQueue::prioritize not queued [inode 0x100000003ed [2,head]
> > > > /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/ids
> > > > auth v91583 pv91585 ap=4 recovering s=1048576 n(v0
> > > > rc2021-04-27T11:57:02.625542+0800 b1048576 1=1+0) (ifile mix->sync
> > > > w=1) (iversion lock)
> > > > cr={3198501=0-4194304@1,3198504=0-4194304@1,3221169=0-4194304@1}
> > > > caps={3198501=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@17,3198504=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@9,3230166=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@2}
> > > > > ptrwaiter=1 request=1 lock=2 caps=1 dirty=1 waiter=0 authpin=1
> > > > 0x56130c584a00]
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700  7 mds.0.locker rdlock_start
> > > > waiting on (ifile mix->sync w=1) on [inode 0x100000003ed [2,head]
> > > > /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/ids
> > > > auth v91583 pv91585 ap=4 recovering s=1048576 n(v0
> > > > rc2021-04-27T11:57:02.625542+0800 b1048576 1=1+0) (ifile mix->sync
> > > > w=1) (iversion lock)
> > > > cr={3198501=0-4194304@1,3198504=0-4194304@1,3221169=0-4194304@1}
> > > > caps={3198501=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@17,3198504=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@9,3230166=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@2}
> > > > > ptrwaiter=1 request=1 lock=2 caps=1 dirty=1 waiter=0 authpin=1
> > > > 0x56130c584a00]
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 10
> > > > mds.0.cache.ino(0x100000003ed) add_waiter tag 2000000040000000
> > > > 0x56130ea1bbe0 !ambig 1 !frozen 1 !freezing 1
> > > > 2021-04-27T11:57:03.467+0800 7fccbd3be700 15
> > > > mds.0.cache.ino(0x100000003ed) taking waiter here
> > > > 2021-04-27T11:57:03.468+0800 7fccbd3be700 20 mds.0.locker
> > > > client.3230166 pending pAsLsXsFr allowed pAsLsXsFrl wanted
> > > > pAsxXsxFsxcrwb
> > > > 2021-04-27T11:57:03.468+0800 7fccbd3be700  7 mds.0.locker
> > > > handle_client_caps  on 0x100000003ed tid 0 follows 0 op update flags
> > > > 0x2
> > > > 2021-04-27T11:57:03.468+0800 7fccbd3be700 20 mds.0.98 get_session have
> > > > 0x56130b81f600 client.3198501 v1:192.168.50.108:0/2478094748 state
> > > > open
> > > > 2021-04-27T11:57:03.468+0800 7fccbd3be700 10 mds.0.locker  head inode
> > > > [inode 0x100000003ed [2,head]
> > > > /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/ids
> > > > auth v91583 pv91585 ap=4 recovering s=1048576 n(v0
> > > > rc2021-04-27T11:57:02.625542+0800 b1048576 1=1+0) (ifile mix->sync
> > > > w=1) (iversion lock)
> > > > cr={3198501=0-4194304@1,3198504=0-4194304@1,3221169=0-4194304@1}
> > > > caps={3198501=pAsLsXsFr/pAsLsXsFrw/pAsxXsxFsxcrwb@17,3198504=pAsLsXsFr/pAsxXsxFsxcrwb@9,3230166=pAsLsXsFr/pAsxXsxFsxcrwb@2}
> > > > > ptrwaiter=1 request=1 lock=2 caps=1 dirty=1 waiter=1 authpin=1
> > > > 0x56130c584a00]
> > > > 2021-04-27T11:57:03.468+0800 7fccbd3be700 10 mds.0.locker  follows 0
> > > > retains pAsLsXsFr dirty - on [inode 0x100000003ed [2,head]
> > > > /QTS/VOL_1/.ovirt_data_domain/37065419-e7f3-47ca-97df-8af0c67d30a0/dom_md/ids
> > > > auth v91583 pv91585 ap=4 recovering s=1048576 n(v0
> > > > rc2021-04-27T11:57:02.625542+0800 b1048576 1=1+0) (ifile mix->sync
> > > > w=1) (iversion lock)
> > > > cr={3198501=0-4194304@1,3198504=0-4194304@1,3221169=0-4194304@1}
> > > > caps={3198501=pAsLsXsFr/pAsxXsxFsxcrwb@17,3198504=pAsLsXsFr/pAsxXsxFsxcrwb@9,3230166=pAsLsXsFr/pAsxXsxFsxcrwb@2}
> > > > > ptrwaiter=1 request=1 lock=2 caps=1 dirty=1 waiter=1 authpin=1
> > > > 0x56130c584a00]
> > > > 2021-04-27T11:57:37.027+0800 7fccbb3ba700  0 log_channel(cluster) log
> > > > [WRN] : slow request 33.561029 seconds old, received at
> > > > 2021-04-27T11:57:03.467164+0800: client_request(client.3230166:12
> > > > getattr pAsLsXsFs #0x100000003ed 2021-04-27T11:57:03.469426+0800
> > > > caller_uid=0, caller_gid=0{}) currently failed to rdlock, waiting
> > > >
> > > > Any idea or insight to help to further investigate the issue are appreciated.
> > > >
> > > > - Jerry
> > > >
> > >
> >
> > --
> > Jeff Layton <jlayton@xxxxxxxxxx>
> >



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux