From patchwork Tue Jan 25 18:56:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 12724150 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D35F0C433EF for ; Tue, 25 Jan 2022 18:56:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233842AbiAYS4d (ORCPT ); Tue, 25 Jan 2022 13:56:33 -0500 Received: from sin.source.kernel.org ([145.40.73.55]:55570 "EHLO sin.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233799AbiAYS4Z (ORCPT ); Tue, 25 Jan 2022 13:56:25 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 3F7F6CE1A5A for ; Tue, 25 Jan 2022 18:56:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 822A2C340E7 for ; Tue, 25 Jan 2022 18:56:20 +0000 (UTC) From: Chuck Lever To: linux-nfs@vger.kernel.org Subject: [PATCH 1/3] NFSD: De-duplicate hash bucket indexing Date: Tue, 25 Jan 2022 13:56:19 -0500 Message-Id: <164313697909.3172.1031655565721726455.stgit@bazille.1015granger.net> X-Mailer: git-send-email 2.34.0 In-Reply-To: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> References: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2404; h=from:subject:message-id; bh=6J9ieKP7V0wG46GB4sWwZg7FhGMIgJTPIszXel0ri1c=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBh8EfTbwCn1KxPpMD9DwjbE/v7Uf+oC8mYi0kpKdtD 5SXPol2JAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYfBH0wAKCRAzarMzb2Z/lz0tD/ 99dUALO/bGZrc4KuA68ttr5EcZ8i2dR/r8ZgYP52owGkoXz/ZC0Q188k8XiAC3a3xP90wM3U8LP6Ft 0oQ3ZHZ7QN6DWDbk10kJd2fTVPQByUuX48T9ifxZMynp6dt4grJzsTT4Zen6cjiyUpFaFR/A9GFQ2+ SmhnGLkBix78iOPRVqkH56kyiPQkj604QO5YT0Cvu5Z5593hQdGP/QaQVXctbKKmbkY3118ynyH99G +gJhBpC4BN0J0fytGDnGBruOjTbMyZ01lMqu91zz5ZR3SxlyXzNb+5pIUt+YFKJbAvzSjmyc1k/fV2 Pds1ow7KSH7IioY+CpigY0dGgc2hKjBTXnvRNzysZVx/JRkLx1aWz2L5VY1emSTZ1RWemYc6TW034z PkZ30j1znANmN+BbLPVHVyae3IAZWlWmqsIkzOat4hsvIGYwjmPI2qNVq1fKrltJh6Q9kE0wIWNs9u G7T8xPSnbOCDKXU54PaEBAnc9MwRhekDsFzRMLRc40w4zW3uYRXp70TF5y5ohooXdIkDOde3nNtxfL 7uM79aD79vq1QZjzdUTy0SUWHXcf+cYy0TJ5OURKrPbEmpy4Cxkb7y+RQlu8RGhEuOPJs0v1DqElwm NVMXHLWuQ8V5zacHAY3UurWeCF4km031AiVw7MS5rwfO/acII/0eM2LCZENA== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Clean up: The details of finding the right hash bucket are exactly the same in both nfsd_cache_lookup() and nfsd_cache_update(). Signed-off-by: Chuck Lever --- fs/nfsd/nfscache.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index a4a69ab6ab28..f79790d36728 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -84,12 +84,6 @@ nfsd_hashsize(unsigned int limit) return roundup_pow_of_two(limit / TARGET_BUCKET_SIZE); } -static u32 -nfsd_cache_hash(__be32 xid, struct nfsd_net *nn) -{ - return hash_32((__force u32)xid, nn->maskbits); -} - static struct svc_cacherep * nfsd_reply_cache_alloc(struct svc_rqst *rqstp, __wsum csum, struct nfsd_net *nn) @@ -241,6 +235,14 @@ lru_put_end(struct nfsd_drc_bucket *b, struct svc_cacherep *rp) list_move_tail(&rp->c_lru, &b->lru_head); } +static noinline struct nfsd_drc_bucket * +nfsd_cache_bucket_find(__be32 xid, struct nfsd_net *nn) +{ + unsigned int hash = hash_32((__force u32)xid, nn->maskbits); + + return &nn->drc_hashtbl[hash]; +} + static long prune_bucket(struct nfsd_drc_bucket *b, struct nfsd_net *nn, unsigned int max) { @@ -421,10 +423,8 @@ int nfsd_cache_lookup(struct svc_rqst *rqstp) { struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); struct svc_cacherep *rp, *found; - __be32 xid = rqstp->rq_xid; __wsum csum; - u32 hash = nfsd_cache_hash(xid, nn); - struct nfsd_drc_bucket *b = &nn->drc_hashtbl[hash]; + struct nfsd_drc_bucket *b = nfsd_cache_bucket_find(rqstp->rq_xid, nn); int type = rqstp->rq_cachetype; int rtn = RC_DOIT; @@ -528,7 +528,6 @@ void nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); struct svc_cacherep *rp = rqstp->rq_cacherep; struct kvec *resv = &rqstp->rq_res.head[0], *cachv; - u32 hash; struct nfsd_drc_bucket *b; int len; size_t bufsize = 0; @@ -536,8 +535,7 @@ void nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) if (!rp) return; - hash = nfsd_cache_hash(rp->c_key.k_xid, nn); - b = &nn->drc_hashtbl[hash]; + b = nfsd_cache_bucket_find(rp->c_key.k_xid, nn); len = resv->iov_len - ((char*)statp - (char*)resv->iov_base); len >>= 2; From patchwork Tue Jan 25 18:56:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 12724151 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3DCBC433EF for ; Tue, 25 Jan 2022 18:57:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229457AbiAYS5R (ORCPT ); Tue, 25 Jan 2022 13:57:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233848AbiAYS4d (ORCPT ); Tue, 25 Jan 2022 13:56:33 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EB37C06173E for ; Tue, 25 Jan 2022 10:56:30 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id D2A40B81A1F for ; Tue, 25 Jan 2022 18:56:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5BD1DC340E0 for ; Tue, 25 Jan 2022 18:56:27 +0000 (UTC) From: Chuck Lever To: linux-nfs@vger.kernel.org Subject: [PATCH 2/3] NFSD: Skip extra computation for RC_NOCACHE case Date: Tue, 25 Jan 2022 13:56:26 -0500 Message-Id: <164313698596.3172.14876464742908606484.stgit@bazille.1015granger.net> X-Mailer: git-send-email 2.34.0 In-Reply-To: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> References: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1347; h=from:subject:message-id; bh=+BSILMlNnjV8DzwTdiK70U0ahmqz8RgoPO5XupmelN0=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBh8Efar+uJJpvL5Tp6vprHc2Q5c+hy0arg7if7nsX7 2UDeyimJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYfBH2gAKCRAzarMzb2Z/lwqWD/ 93Tfa5a+O1ngnj0q677m1tR16aaL0VgVV/HlYTX0CA3ZUg+lQRUT0G2YJ6Ci+vLK+xxhbLVdCM1unF gpNX4Z51YK0/yTauU8F4Stq9MZcCdwoNVOJp5v9h/5CzTUaEXmASni4d9HfhB8Flyn7hAzx0EqEOzr fFbhFod9ZM9Fi77hHIqYxdRedWBCbtPjLx0w9AODMR5r+UN4MVgLnRnawBBRNXBycN1dJpJcQbamy+ fTl4aJOOfsWZGti4lNePeelxS65Vd/YjnbftqJopaZs3ANP72OOUYRnJWXH8z+4OovzHynr49HPbg9 hm/JOd9D9xald2Jkvj3wvXg8txPZs1hpD7nPW0Ora6NHHmvb44CGtsiskYcLUSM6ZGDAXct5x30OPD CWAEIp0khXoEysv2HKbCgvN5E2c5SgM4ChvJIJx7seK0UXWBOkbOpuMOGAsbC1v7QTVwC2Z+99GY5S ayRPrk5tdITF4K5+OmUOzkLK5E9sZiuoWxpfkKpimQ8uHi6ddoLwfa43JqrYVgJghS/w02T86IybPj odcAmSb7xyxzf+5Mi0ya9E2XnUmtcgqqI21XQZ1qU6qZEJ3zqsOcsOgbTxJk7wlVKNHMtK7Qgg9udI NR4J37zqkVIJj507lBdSLD/G/I0RDq9X5TrurgcwmQzdoYH2OrWLyM5DYxlw== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Force the compiler to skip unneeded initialization for cases that don't need those values. For example, NFSv4 COMPOUND operations are RC_NOCACHE. Signed-off-by: Chuck Lever --- fs/nfsd/nfscache.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index f79790d36728..34087a7e4f93 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -421,10 +421,10 @@ nfsd_cache_insert(struct nfsd_drc_bucket *b, struct svc_cacherep *key, */ int nfsd_cache_lookup(struct svc_rqst *rqstp) { - struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); + struct nfsd_net *nn; struct svc_cacherep *rp, *found; __wsum csum; - struct nfsd_drc_bucket *b = nfsd_cache_bucket_find(rqstp->rq_xid, nn); + struct nfsd_drc_bucket *b; int type = rqstp->rq_cachetype; int rtn = RC_DOIT; @@ -440,10 +440,12 @@ int nfsd_cache_lookup(struct svc_rqst *rqstp) * Since the common case is a cache miss followed by an insert, * preallocate an entry. */ + nn = net_generic(SVC_NET(rqstp), nfsd_net_id); rp = nfsd_reply_cache_alloc(rqstp, csum, nn); if (!rp) goto out; + b = nfsd_cache_bucket_find(rqstp->rq_xid, nn); spin_lock(&b->cache_lock); found = nfsd_cache_insert(b, rp, nn); if (found != rp) { From patchwork Tue Jan 25 18:56:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 12724152 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50B88C433EF for ; Tue, 25 Jan 2022 18:57:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230267AbiAYS5T (ORCPT ); Tue, 25 Jan 2022 13:57:19 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:54194 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233863AbiAYS4j (ORCPT ); Tue, 25 Jan 2022 13:56:39 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id A6440B81A1F for ; Tue, 25 Jan 2022 18:56:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3ABDFC340E0 for ; Tue, 25 Jan 2022 18:56:34 +0000 (UTC) From: Chuck Lever To: linux-nfs@vger.kernel.org Subject: [PATCH 3/3] NFSD: Streamline the rare "found" case Date: Tue, 25 Jan 2022 13:56:33 -0500 Message-Id: <164313699280.3172.12897171386272557403.stgit@bazille.1015granger.net> X-Mailer: git-send-email 2.34.0 In-Reply-To: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> References: <164313689644.3172.6086810615126935434.stgit@bazille.1015granger.net> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1209; h=from:subject:message-id; bh=F75doHNlEwCaCZ7RPcczkgYS7llc7VIwT3CMGuDOYXE=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBh8Efgf6q1nlJAMw7Faybc9NX1+3j93mUIngQCQyDq WjL07tGJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYfBH4AAKCRAzarMzb2Z/lz3/D/ 9pwrL9WruNsljMmSNKD3OEths+HmyafExnWovf9OlcTLSI+gZPRkq1YWhP3ryvnOhhDELswz+me0u/ Tg1SYEEul+wbxw8tcebd/rzfvbz8A2muYvG7bEcGdF7ig1YOXtuuGGQ8ebZ5I2hCdVqePhgv/tYp1v rxfQGsrGJvZdGWKSxLgRx7/SHHEgAklBtSjbYR4ra20BVuPQqkb0rKu5JmIcIVQ7y6LAOktk5HAbvQ A6i06uNmCfwOvEpN74AQSjn+gxyxgLPin5zF9WDdMJGaf0r98XeDBW23OpQs8liQO5vP05aINhkxrB ip3Kq7aC889oAD6UmZrwl7vsF8yFKpomR2eUyrkUHd2QP76IvVY5eH5+OPF/wHIOztR9rtIvOGGj1e MptRKa1FKK6b7HHcVrKIUZouL9DyxYGiz+v4ItgijIsrD7Jk/YX0EumVndyr5YYE6g0zX7j7OLtwfm 9OpeE6ESJfZOnu7cO2E/Afrj9F8XL10LKfV0X+AYVMXAJ7ghnESaswH0HsllSBdm7dAvuBQfzJus/D HbM548Pu7RcbcPCqDbmJwBrdiUV4n3NEyeDzCXgjgkvKklLxJZRGh7FoHRd87rGAVRTC+i21KxmAKW cUovpIioDj1kQgf7rQ6YkVY757T7ldwQIJm4YWfN8Yq+WPoO8jUZ12n3YAGw== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Move a rarely called function call site out of the hot path. This is an exceptionally small improvement because the compiler inlines most of the functions that nfsd_cache_lookup() calls. Signed-off-by: Chuck Lever --- fs/nfsd/nfscache.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index 34087a7e4f93..0b3f12aa37ff 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -448,11 +448,8 @@ int nfsd_cache_lookup(struct svc_rqst *rqstp) b = nfsd_cache_bucket_find(rqstp->rq_xid, nn); spin_lock(&b->cache_lock); found = nfsd_cache_insert(b, rp, nn); - if (found != rp) { - nfsd_reply_cache_free_locked(NULL, rp, nn); - rp = found; + if (found != rp) goto found_entry; - } nfsd_stats_rc_misses_inc(); rqstp->rq_cacherep = rp; @@ -470,8 +467,10 @@ int nfsd_cache_lookup(struct svc_rqst *rqstp) found_entry: /* We found a matching entry which is either in progress or done. */ + nfsd_reply_cache_free_locked(NULL, rp, nn); nfsd_stats_rc_hits_inc(); rtn = RC_DROPIT; + rp = found; /* Request being processed */ if (rp->c_state == RC_INPROG)