From: Shaokun Zhang <zhangshaokun@hisilicon.com>
To: <linux-fsdevel@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Cc: Yuqi Jin <jinyuqi@huawei.com>,
kernel test robot <rong.a.chen@intel.com>,
Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
"Peter Zijlstra" <peterz@infradead.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Boqun Feng <boqun.feng@gmail.com>,
Shaokun Zhang <zhangshaokun@hisilicon.com>
Subject: [PATCH] fs: Optimized fget to improve performance
Date: Thu, 27 Aug 2020 18:19:44 +0800 [thread overview]
Message-ID: <1598523584-25601-1-git-send-email-zhangshaokun@hisilicon.com> (raw)
From: Yuqi Jin <jinyuqi@huawei.com>
It is well known that the performance of atomic_add is better than that of
atomic_cmpxchg.
The initial value of @f_count is 1. While @f_count is increased by 1 in
__fget_files, it will go through three phases: > 0, < 0, and = 0. When the
fixed value 0 is used as the condition for terminating the increase of 1,
only atomic_cmpxchg can be used. When we use < 0 as the condition for
stopping plus 1, we can use atomic_add to obtain better performance.
we test syscall in unixbench on Huawei Kunpeng920(arm64). We've got a 132%
performance boost.
with this patch and the patch [1]
System Call Overhead 9516926.2 lps (10.0 s, 1 samples)
System Benchmarks Partial Index BASELINE RESULT INDEX
System Call Overhead 15000.0 9516926.2 6344.6
========
System Benchmarks Index Score (Partial Only) 6344.6
with this patch and without the patch [1]
System Call Overhead 5290449.3 lps (10.0 s, 1 samples)
System Benchmarks Partial Index BASELINE RESULT INDEX
System Call Overhead 15000.0 5290449.3 3527.0
========
System Benchmarks Index Score (Partial Only) 3527.0
without any patch
System Call Overhead 4102310.5 lps (10.0 s, 1 samples)
System Benchmarks Partial Index BASELINE RESULT INDEX
System Call Overhead 15000.0 4102310.5 2734.9
========
System Benchmarks Index Score (Partial Only) 2734.9
[1] https://lkml.org/lkml/2020/6/24/283
Cc: kernel test robot <rong.a.chen@intel.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Yuqi Jin <jinyuqi@huawei.com>
Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
---
Hi Rong,
Can you help to test this patch individually and with [1] together on
your platform please? [1] has been tested on your platform[2].
[2] https://lkml.org/lkml/2020/7/8/227
include/linux/fs.h | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index e019ea2f1347..2a9c2a30dc58 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -972,8 +972,19 @@ static inline struct file *get_file(struct file *f)
atomic_long_inc(&f->f_count);
return f;
}
+
+static inline bool get_file_unless_negative(atomic_long_t *v, long a)
+{
+ long c = atomic_long_read(v);
+
+ if (c <= 0)
+ return 0;
+
+ return atomic_long_add_return(a, v) - 1;
+}
+
#define get_file_rcu_many(x, cnt) \
- atomic_long_add_unless(&(x)->f_count, (cnt), 0)
+ get_file_unless_negative(&(x)->f_count, (cnt))
#define get_file_rcu(x) get_file_rcu_many((x), 1)
#define file_count(x) atomic_long_read(&(x)->f_count)
--
2.7.4
next reply other threads:[~2020-08-27 10:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-27 10:19 Shaokun Zhang [this message]
2020-08-27 12:30 ` [PATCH] fs: Optimized fget to improve performance Matthew Wilcox
2020-08-27 13:07 ` David Laight
2020-08-27 14:28 ` [NAK] " Al Viro
2020-08-28 11:04 ` Will Deacon
2020-08-31 1:43 ` Shaokun Zhang
2020-08-31 3:21 ` Al Viro
2020-09-01 9:29 ` David Laight
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1598523584-25601-1-git-send-email-zhangshaokun@hisilicon.com \
--to=zhangshaokun@hisilicon.com \
--cc=boqun.feng@gmail.com \
--cc=jinyuqi@huawei.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=peterz@infradead.org \
--cc=rong.a.chen@intel.com \
--cc=viro@zeniv.linux.org.uk \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).