Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp705042pxb; Wed, 11 Nov 2020 14:16:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJxj4Tfv7kttwCb78ohrsVe1qSKeuwhGOmOn3zB4FOUVhcOzqLMsvFA6r6kRc/kyayNyIyZ6 X-Received: by 2002:a50:e686:: with SMTP id z6mr1848386edm.188.1605133002546; Wed, 11 Nov 2020 14:16:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605133002; cv=none; d=google.com; s=arc-20160816; b=kS1ViAVsGxmffgqHzCBfnCCFdKxviiuarsr6WU5qDLkvXinUkZOPrdtSGibsC5x64A SC8KAePJ836rRgWAkozd2k9ysXlb55B6KWGHUUpj6CdRFRexhbk3R5ryV5rZ4oAeW8/f HD+kp+eYkH8sgFHn1csVekCxvWMOYs6VuSixgRTjA3/AiajUMSURp4l6UJH8yZvELGCS x3ir4uq93FNVYt7dWQDK6U1a6txFa+TwHVQ7csU987GPLtKHcgHY+cvqMDJTfgBICtuF SmKISIaungrr6SBWtHyx8GA422Kbk0erSaNoNdBrI5BIi2GdQNXWhCfmsPvdCeSSWYka UOGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=r6aNe1Ae8qpcfbkD6nKYxaBIO+QpbabBldM5maHx0Jw=; b=XXhT4oVd3oVo4hf2ZBCHiITakFpI+0aoN0S6nX6Qvqy2E2eAyOC2fYbHeZldfjgrzA 0IPdLnc6a3LjHacnEwfJShVTVJe1+T1kj8Ird1FrUfajWcboo5FEk56W2KjsFYiwnmd3 fU8in4hCHXJIzWYcz7G1dNm/5lueG93+V34bY2OfO8NrkXVA3HwL+l9rW1O3S5+7GD/1 4F5OVkKMSDQ7L6iGdZspjl5cRmJUn4ObOwxUsOY3lgVuDPwZu69uwIb2f/N4LDnPzU/n 8Re+swA+f9yBoxCMR48r7rjNcTTJ5PKnI/Nreznya7b+FwsvCZ/9CUNkvColKnLfzWkO wprA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=RT02KJaK; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h16si172723ejg.427.2020.11.11.14.16.10; Wed, 11 Nov 2020 14:16:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=RT02KJaK; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726255AbgKKWQF (ORCPT + 99 others); Wed, 11 Nov 2020 17:16:05 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:34591 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725933AbgKKWQC (ORCPT ); Wed, 11 Nov 2020 17:16:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605132960; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=r6aNe1Ae8qpcfbkD6nKYxaBIO+QpbabBldM5maHx0Jw=; b=RT02KJaK2IPwdCjQbG7oz4ufPK/dcWQ7Msy9G1A6Zjbp4S4TLltEMHgWtOnxRSJda60v9k mwlk65w1oLRGY5/1awWW2Bg9ucC850SQ1AwC0efWFp2isjAIIM12/PKD2nKMYHlLuuuT60 3hi1zCCT9xWUi3htskyUjNymwyh5zD8= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-35-x3_tBMKhO3uTgYUSoeBTCA-1; Wed, 11 Nov 2020 17:15:58 -0500 X-MC-Unique: x3_tBMKhO3uTgYUSoeBTCA-1 Received: by mail-ej1-f72.google.com with SMTP id 27so1162041ejy.8 for ; Wed, 11 Nov 2020 14:15:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=r6aNe1Ae8qpcfbkD6nKYxaBIO+QpbabBldM5maHx0Jw=; b=W4nEYD5YF3gNA2JDZeJT2KLdEkONfluipHrgkB/qgtHMqGoWsO3ZcW4K5vGGe9F+jd jx2wTMlUkJCMTL9mrzRWkXa04MZGZHQhOVoY4vlRqgnr/PbG2SMhE0DFZ/9XSxhTeCwO kzlw87EJ2DR+L5RYJjmzMkIE/73Os1siKrqgPL7J15zZLAx/HKDDh0pvxlW4Py1h7N9u SB/mV/xCm8nGGURd7l+OTf243leCttsCmrY2QrocaFAY6PyunBBLh5n8Y4jRI3MXZ8FH eOUPYb1p33uO7rluRMMzg1Am6QX0McdsSE8/5BAhan4nK5U8aXzPWdOloFA9VSejaQlf PwSA== X-Gm-Message-State: AOAM531+5896BFURTj/hIAafkfIX4K3ZefMRF4/0oTnMaEGz5wfyG4DO +e8rj4/JoHiN/PMP6ivFqKf8vcpvVbgD9OIX5nl/uHhNBOIHdBCiQ3P6q2B+oLZW7bcnYhQ4Ccz JYkVIwOHt7usoVsLprE4acadfT++5wrelvCUd X-Received: by 2002:a50:e705:: with SMTP id a5mr1844884edn.29.1605132956909; Wed, 11 Nov 2020 14:15:56 -0800 (PST) X-Received: by 2002:a50:e705:: with SMTP id a5mr1844872edn.29.1605132956708; Wed, 11 Nov 2020 14:15:56 -0800 (PST) MIME-Version: 1.0 References: <20201110213741.860745-1-trondmy@kernel.org> In-Reply-To: <20201110213741.860745-1-trondmy@kernel.org> From: David Wysochanski Date: Wed, 11 Nov 2020 17:15:20 -0500 Message-ID: Subject: Re: [PATCH v5 00/22] Readdir enhancements To: trondmy@kernel.org Cc: linux-nfs Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org On Tue, Nov 10, 2020 at 4:48 PM wrote: > > From: Trond Myklebust > > The following patch series performs a number of cleanups on the readdir > code. > It also adds support for 1MB readdir RPC calls on-the-wire, and modifies > the caching code to ensure that we cache the entire contents of that > 1MB call (instead of discarding the data that doesn't fit into a single > page). > For filesystems that use ordered readdir cookie schemes (e.g. XFS), it > optimises searching for cookies in the client's page cache by skipping > over pages that contain cookie values that are not in the range we are > searching for. > Finally, it improves scalability when dealing with very large > directories by turning off caching when those directories are changing, > so as to avoid the need for a linear search on the client of the entire > directory when looking for the first entry pointed to by the current > file descriptor offset. > > v2: Fix the handling of the NFSv3/v4 directory verifier. > v3: Optimise searching when the readdir cookies are seen to be ordered. > v4: Optimise performance for large directories that are changing. > Add in llseek dependency patches. > v5: Integrate Olga's patch for the READDIR security label handling. > Record more entries in the uncached readdir case. Bump the max > number of pages to 512, but allocate them on demand in case the > readdir RPC call returns fewer entries. > > Olga Kornievskaia (1): > NFSv4.2: condition READDIR's mask for security label based on LSM > state > > Trond Myklebust (21): > NFS: Remove unnecessary inode locking in nfs_llseek_dir() > NFS: Remove unnecessary inode lock in nfs_fsync_dir() > NFS: Ensure contents of struct nfs_open_dir_context are consistent > NFS: Clean up readdir struct nfs_cache_array > NFS: Clean up nfs_readdir_page_filler() > NFS: Clean up directory array handling > NFS: Don't discard readdir results > NFS: Remove unnecessary kmap in nfs_readdir_xdr_to_array() > NFS: Replace kmap() with kmap_atomic() in nfs_readdir_search_array() > NFS: Simplify struct nfs_cache_array_entry > NFS: Support larger readdir buffers > NFS: More readdir cleanups > NFS: nfs_do_filldir() does not return a value > NFS: Reduce readdir stack usage > NFS: Cleanup to remove nfs_readdir_descriptor_t typedef > NFS: Allow the NFS generic code to pass in a verifier to readdir > NFS: Handle NFS4ERR_NOT_SAME and NFSERR_BADCOOKIE from readdir calls > NFS: Improve handling of directory verifiers > NFS: Optimisations for monotonically increasing readdir cookies > NFS: Reduce number of RPC calls when doing uncached readdir > NFS: Do uncached readdir when we're seeking a cookie in an empty page > cache > > fs/nfs/client.c | 4 +- > fs/nfs/dir.c | 734 +++++++++++++++++++++++++--------------- > fs/nfs/inode.c | 7 - > fs/nfs/internal.h | 6 - > fs/nfs/nfs3proc.c | 35 +- > fs/nfs/nfs4proc.c | 48 +-- > fs/nfs/proc.c | 18 +- > include/linux/nfs_fs.h | 9 +- > include/linux/nfs_xdr.h | 17 +- > 9 files changed, 541 insertions(+), 337 deletions(-) > > -- > 2.28.0 > I wrote a test script and ran this patchset against 5.10-rc2 in a variety of scenarios listing 1 million files and various directory modification scenarios. The test checked ops, runtime and cookie resets (via tcpdump). All runs performed very well on all scenarios I threw at it on all NFS versions (I tested 3, 4.0, 4.1, and 4.2) with fairly dramatic improvements vs the same runs on 5.10-rc2. One scenario I found where a single 'ls -l' could take a long time (about 5 minutes, but not unbounded time) was when the directory was being modified with both file adds and removed, but this seemed due to other ops unrelated to readdir performance. A second scenario that this patchset does not fix is the scenario where the directory is large enough to exceed the acdirmax, is being modified (adds and removes), and _multiple_ processes are listing it. In this scenario a lister can still have unbounded time, but the existing readdir code also has this problem and fixing that probably requires another patch / approach (such as reworking the structure of the cache or an approach such as the flag on per-process dir context). I think these patches make NFS readdir dramatically better, and they fix a lot of underlying issues with the existing code, like the cookie resets when pagecache is dropped, single page rx data problem, etc. Thank you for doing these patches. Tested-by: Dave Wysochanski