* [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement @ 2021-04-09 1:14 Ian Kent 2021-04-09 1:14 ` [PATCH v3 1/4] kernfs: move revalidate to be near lookup Ian Kent ` (4 more replies) 0 siblings, 5 replies; 10+ messages in thread From: Ian Kent @ 2021-04-09 1:14 UTC (permalink / raw) To: Greg Kroah-Hartman, Tejun Heo Cc: Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel There have been a few instances of contention on the kernfs_mutex during path walks, a case on very large IBM systems seen by myself, a report by Brice Goglin and followed up by Fox Chen, and I've since seen a couple of other reports by CoreOS users. The common thread is a large number of kernfs path walks leading to slowness of path walks due to kernfs_mutex contention. The problem being that changes to the VFS over some time have increased it's concurrency capabilities to an extent that kernfs's use of a mutex is no longer appropriate. There's also an issue of walks for non-existent paths causing contention if there are quite a few of them which is a less common problem. This patch series is relatively straight forward. All it does is add the ability to take advantage of VFS negative dentry caching to avoid needless dentry alloc/free cycles for lookups of paths that don't exit and change the kernfs_mutex to a read/write semaphore. The patch that tried to stay in VFS rcu-walk mode during path walks has been dropped for two reasons. First, it doesn't actually give very much improvement and, second, if there's a place where mistakes could go unnoticed it would be in that path. This makes the patch series simpler to review and reduces the likelihood of problems going unnoticed and popping up later. The patch to use a revision to identify if a directory has changed has also been dropped. If the directory has changed the dentry revision needs to be updated to avoid subsequent rb tree searches and after changing to use a read/write semaphore the update also requires a lock. But the d_lock is the only lock available at this point which might itself be contended. Changes since v2: - actually fix the inode attribute update locking. - drop the patch that tried to stay in rcu-walk mode. - drop the use a revision to identify if a directory has changed patch. Changes since v1: - fix locking in .permission() and .getattr() by re-factoring the attribute handling code. --- Ian Kent (4): kernfs: move revalidate to be near lookup kernfs: use VFS negative dentry caching kernfs: switch kernfs to use an rwsem kernfs: use i_lock to protect concurrent inode updates fs/kernfs/dir.c | 240 +++++++++++++++++++++++-------------------- fs/kernfs/file.c | 4 - fs/kernfs/inode.c | 18 ++- fs/kernfs/kernfs-internal.h | 5 + fs/kernfs/mount.c | 12 +- fs/kernfs/symlink.c | 4 - include/linux/kernfs.h | 2 7 files changed, 155 insertions(+), 130 deletions(-) -- ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/4] kernfs: move revalidate to be near lookup 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent @ 2021-04-09 1:14 ` Ian Kent 2021-04-09 1:15 ` [PATCH v3 2/4] kernfs: use VFS negative dentry caching Ian Kent ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: Ian Kent @ 2021-04-09 1:14 UTC (permalink / raw) To: Greg Kroah-Hartman, Tejun Heo Cc: Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel While the dentry operation kernfs_dop_revalidate() is grouped with dentry type functions it also has a strong affinity to the inode operation ->lookup(). In order to take advantage of the VFS negative dentry caching that can be used to reduce path lookup overhead on non-existent paths it will need to call kernfs_find_ns(). So, to avoid a forward declaration, move it to be near kernfs_iop_lookup(). There's no functional change from this patch. Signed-off-by: Ian Kent <raven@themaw.net> --- fs/kernfs/dir.c | 86 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index 7e0e62deab53c..4c69e2af82dac 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -548,49 +548,6 @@ void kernfs_put(struct kernfs_node *kn) } EXPORT_SYMBOL_GPL(kernfs_put); -static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) -{ - struct kernfs_node *kn; - - if (flags & LOOKUP_RCU) - return -ECHILD; - - /* Always perform fresh lookup for negatives */ - if (d_really_is_negative(dentry)) - goto out_bad_unlocked; - - kn = kernfs_dentry_node(dentry); - mutex_lock(&kernfs_mutex); - - /* The kernfs node has been deactivated */ - if (!kernfs_active(kn)) - goto out_bad; - - /* The kernfs node has been moved? */ - if (kernfs_dentry_node(dentry->d_parent) != kn->parent) - goto out_bad; - - /* The kernfs node has been renamed */ - if (strcmp(dentry->d_name.name, kn->name) != 0) - goto out_bad; - - /* The kernfs node has been moved to a different namespace */ - if (kn->parent && kernfs_ns_enabled(kn->parent) && - kernfs_info(dentry->d_sb)->ns != kn->ns) - goto out_bad; - - mutex_unlock(&kernfs_mutex); - return 1; -out_bad: - mutex_unlock(&kernfs_mutex); -out_bad_unlocked: - return 0; -} - -const struct dentry_operations kernfs_dops = { - .d_revalidate = kernfs_dop_revalidate, -}; - /** * kernfs_node_from_dentry - determine kernfs_node associated with a dentry * @dentry: the dentry in question @@ -1073,6 +1030,49 @@ struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent, return ERR_PTR(rc); } +static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) +{ + struct kernfs_node *kn; + + if (flags & LOOKUP_RCU) + return -ECHILD; + + /* Always perform fresh lookup for negatives */ + if (d_really_is_negative(dentry)) + goto out_bad_unlocked; + + kn = kernfs_dentry_node(dentry); + mutex_lock(&kernfs_mutex); + + /* The kernfs node has been deactivated */ + if (!kernfs_active_read(kn)) + goto out_bad; + + /* The kernfs node has been moved? */ + if (kernfs_dentry_node(dentry->d_parent) != kn->parent) + goto out_bad; + + /* The kernfs node has been renamed */ + if (strcmp(dentry->d_name.name, kn->name) != 0) + goto out_bad; + + /* The kernfs node has been moved to a different namespace */ + if (kn->parent && kernfs_ns_enabled(kn->parent) && + kernfs_info(dentry->d_sb)->ns != kn->ns) + goto out_bad; + + mutex_unlock(&kernfs_mutex); + return 1; +out_bad: + mutex_unlock(&kernfs_mutex); +out_bad_unlocked: + return 0; +} + +const struct dentry_operations kernfs_dops = { + .d_revalidate = kernfs_dop_revalidate, +}; + static struct dentry *kernfs_iop_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 2/4] kernfs: use VFS negative dentry caching 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent 2021-04-09 1:14 ` [PATCH v3 1/4] kernfs: move revalidate to be near lookup Ian Kent @ 2021-04-09 1:15 ` Ian Kent 2021-04-09 1:35 ` Al Viro 2021-04-09 1:15 ` [PATCH v3 3/4] kernfs: switch kernfs to use an rwsem Ian Kent ` (2 subsequent siblings) 4 siblings, 1 reply; 10+ messages in thread From: Ian Kent @ 2021-04-09 1:15 UTC (permalink / raw) To: Greg Kroah-Hartman, Tejun Heo Cc: Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel If there are many lookups for non-existent paths these negative lookups can lead to a lot of overhead during path walks. The VFS allows dentries to be created as negative and hashed, and caches them so they can be used to reduce the fairly high overhead alloc/free cycle that occurs during these lookups. Signed-off-by: Ian Kent <raven@themaw.net> --- fs/kernfs/dir.c | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index 4c69e2af82dac..edfeee1bf38ec 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -1037,12 +1037,33 @@ static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) if (flags & LOOKUP_RCU) return -ECHILD; - /* Always perform fresh lookup for negatives */ - if (d_really_is_negative(dentry)) - goto out_bad_unlocked; + mutex_lock(&kernfs_mutex); kn = kernfs_dentry_node(dentry); - mutex_lock(&kernfs_mutex); + + /* Negative hashed dentry? */ + if (!kn) { + struct kernfs_node *parent; + + /* If the kernfs node can be found this is a stale negative + * hashed dentry so it must be discarded and the lookup redone. + */ + parent = kernfs_dentry_node(dentry->d_parent); + if (parent) { + const void *ns = NULL; + + if (kernfs_ns_enabled(parent)) + ns = kernfs_info(dentry->d_parent->d_sb)->ns; + kn = kernfs_find_ns(parent, dentry->d_name.name, ns); + if (kn) + goto out_bad; + } + + /* The kernfs node doesn't exist, leave the dentry negative + * and return success. + */ + goto out; + } /* The kernfs node has been deactivated */ if (!kernfs_active_read(kn)) @@ -1060,12 +1081,11 @@ static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) if (kn->parent && kernfs_ns_enabled(kn->parent) && kernfs_info(dentry->d_sb)->ns != kn->ns) goto out_bad; - +out: mutex_unlock(&kernfs_mutex); return 1; out_bad: mutex_unlock(&kernfs_mutex); -out_bad_unlocked: return 0; } @@ -1080,33 +1100,24 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir, struct dentry *ret; struct kernfs_node *parent = dir->i_private; struct kernfs_node *kn; - struct inode *inode; + struct inode *inode = NULL; const void *ns = NULL; mutex_lock(&kernfs_mutex); - if (kernfs_ns_enabled(parent)) ns = kernfs_info(dir->i_sb)->ns; kn = kernfs_find_ns(parent, dentry->d_name.name, ns); - - /* no such entry */ - if (!kn || !kernfs_active(kn)) { - ret = NULL; - goto out_unlock; - } - /* attach dentry and inode */ - inode = kernfs_get_inode(dir->i_sb, kn); - if (!inode) { - ret = ERR_PTR(-ENOMEM); - goto out_unlock; + if (kn && kernfs_active(kn)) { + inode = kernfs_get_inode(dir->i_sb, kn); + if (!inode) + inode = ERR_PTR(-ENOMEM); } - - /* instantiate and hash dentry */ + /* instantiate and hash (possibly negative) dentry */ ret = d_splice_alias(inode, dentry); - out_unlock: mutex_unlock(&kernfs_mutex); + return ret; } ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 2/4] kernfs: use VFS negative dentry caching 2021-04-09 1:15 ` [PATCH v3 2/4] kernfs: use VFS negative dentry caching Ian Kent @ 2021-04-09 1:35 ` Al Viro 2021-04-09 8:26 ` Ian Kent 0 siblings, 1 reply; 10+ messages in thread From: Al Viro @ 2021-04-09 1:35 UTC (permalink / raw) To: Ian Kent Cc: Greg Kroah-Hartman, Tejun Heo, Brice Goglin, Fox Chen, Rick Lindsley, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel On Fri, Apr 09, 2021 at 09:15:06AM +0800, Ian Kent wrote: > + parent = kernfs_dentry_node(dentry->d_parent); > + if (parent) { > + const void *ns = NULL; > + > + if (kernfs_ns_enabled(parent)) > + ns = kernfs_info(dentry->d_parent->d_sb)->ns; For any dentry d, we have d->d_parent->d_sb == d->d_sb. All the time. If you ever run into the case where that would not be true, you've found a critical bug. > + kn = kernfs_find_ns(parent, dentry->d_name.name, ns); > + if (kn) > + goto out_bad; > + } Umm... What's to prevent a race with successful rename(2)? IOW, what's there to stabilize ->d_parent and ->d_name while we are in that function? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3 2/4] kernfs: use VFS negative dentry caching 2021-04-09 1:35 ` Al Viro @ 2021-04-09 8:26 ` Ian Kent 2021-04-09 9:34 ` Ian Kent 0 siblings, 1 reply; 10+ messages in thread From: Ian Kent @ 2021-04-09 8:26 UTC (permalink / raw) To: Al Viro Cc: Greg Kroah-Hartman, Tejun Heo, Brice Goglin, Fox Chen, Rick Lindsley, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel On Fri, 2021-04-09 at 01:35 +0000, Al Viro wrote: > On Fri, Apr 09, 2021 at 09:15:06AM +0800, Ian Kent wrote: > > + parent = kernfs_dentry_node(dentry->d_parent); > > + if (parent) { > > + const void *ns = NULL; > > + > > + if (kernfs_ns_enabled(parent)) > > + ns = kernfs_info(dentry->d_parent- > > >d_sb)->ns; > > For any dentry d, we have d->d_parent->d_sb == d->d_sb. All > the time. > If you ever run into the case where that would not be true, you've > found > a critical bug. Right, yes. > > > + kn = kernfs_find_ns(parent, dentry- > > >d_name.name, ns); > > + if (kn) > > + goto out_bad; > > + } > > Umm... What's to prevent a race with successful rename(2)? IOW, > what's > there to stabilize ->d_parent and ->d_name while we are in that > function? Indeed, glad you looked at this. Now I'm wondering how kerfs_iop_rename() protects itself from concurrent kernfs_rename_ns() ... ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3 2/4] kernfs: use VFS negative dentry caching 2021-04-09 8:26 ` Ian Kent @ 2021-04-09 9:34 ` Ian Kent 0 siblings, 0 replies; 10+ messages in thread From: Ian Kent @ 2021-04-09 9:34 UTC (permalink / raw) To: Al Viro Cc: Greg Kroah-Hartman, Tejun Heo, Brice Goglin, Fox Chen, Rick Lindsley, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel On Fri, 2021-04-09 at 16:26 +0800, Ian Kent wrote: > On Fri, 2021-04-09 at 01:35 +0000, Al Viro wrote: > > On Fri, Apr 09, 2021 at 09:15:06AM +0800, Ian Kent wrote: > > > + parent = kernfs_dentry_node(dentry->d_parent); > > > + if (parent) { > > > + const void *ns = NULL; > > > + > > > + if (kernfs_ns_enabled(parent)) > > > + ns = kernfs_info(dentry->d_parent- > > > > d_sb)->ns; > > > > For any dentry d, we have d->d_parent->d_sb == d->d_sb. All > > the time. > > If you ever run into the case where that would not be true, you've > > found > > a critical bug. > > Right, yes. > > > > + kn = kernfs_find_ns(parent, dentry- > > > > d_name.name, ns); > > > + if (kn) > > > + goto out_bad; > > > + } > > > > Umm... What's to prevent a race with successful rename(2)? IOW, > > what's > > there to stabilize ->d_parent and ->d_name while we are in that > > function? > > Indeed, glad you looked at this. > > Now I'm wondering how kerfs_iop_rename() protects itself from > concurrent kernfs_rename_ns() ... As I thought ... I haven't done an exhaustive search but I can't find any file system that doesn't call back into kernfs from kernfs_syscall_ops (if provided at kernfs root creation). I don't see anything that uses kernfs that defines a .rename() op but if there was one it would be expected to call back into kernfs at which point it would block on kernfs_mutex (kernfs_rwsem) until it's released. So I don't think there can be changes in this case due to the lock taken just above the code your questioning. I need to think a bit about whether the dentry being negative (ie. not having kernfs node) could allow bad things to happen ... Or am I misunderstanding the race your pointing out here? Ian ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 3/4] kernfs: switch kernfs to use an rwsem 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent 2021-04-09 1:14 ` [PATCH v3 1/4] kernfs: move revalidate to be near lookup Ian Kent 2021-04-09 1:15 ` [PATCH v3 2/4] kernfs: use VFS negative dentry caching Ian Kent @ 2021-04-09 1:15 ` Ian Kent 2021-04-09 1:15 ` [PATCH v3 4/4] kernfs: use i_lock to protect concurrent inode updates Ian Kent 2021-04-19 7:56 ` [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Fox Chen 4 siblings, 0 replies; 10+ messages in thread From: Ian Kent @ 2021-04-09 1:15 UTC (permalink / raw) To: Greg Kroah-Hartman, Tejun Heo Cc: Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel The kernfs global lock restricts the ability to perform kernfs node lookup operations in parallel during path walks. Change the kernfs mutex to an rwsem so that, when opportunity arises, node searches can be done in parallel with path walk lookups. Signed-off-by: Ian Kent <raven@themaw.net> --- fs/kernfs/dir.c | 117 ++++++++++++++++++++++++------------------- fs/kernfs/file.c | 4 + fs/kernfs/inode.c | 16 +++--- fs/kernfs/kernfs-internal.h | 5 +- fs/kernfs/mount.c | 12 ++-- fs/kernfs/symlink.c | 4 + include/linux/kernfs.h | 2 - 7 files changed, 86 insertions(+), 74 deletions(-) diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index edfeee1bf38ec..9bea235f2ec66 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -17,7 +17,7 @@ #include "kernfs-internal.h" -DEFINE_MUTEX(kernfs_mutex); +DECLARE_RWSEM(kernfs_rwsem); static DEFINE_SPINLOCK(kernfs_rename_lock); /* kn->parent and ->name */ static char kernfs_pr_cont_buf[PATH_MAX]; /* protected by rename_lock */ static DEFINE_SPINLOCK(kernfs_idr_lock); /* root->ino_idr */ @@ -26,10 +26,21 @@ static DEFINE_SPINLOCK(kernfs_idr_lock); /* root->ino_idr */ static bool kernfs_active(struct kernfs_node *kn) { - lockdep_assert_held(&kernfs_mutex); return atomic_read(&kn->active) >= 0; } +static bool kernfs_active_write(struct kernfs_node *kn) +{ + lockdep_assert_held_write(&kernfs_rwsem); + return kernfs_active(kn); +} + +static bool kernfs_active_read(struct kernfs_node *kn) +{ + lockdep_assert_held_read(&kernfs_rwsem); + return kernfs_active(kn); +} + static bool kernfs_lockdep(struct kernfs_node *kn) { #ifdef CONFIG_DEBUG_LOCK_ALLOC @@ -340,7 +351,7 @@ static int kernfs_sd_compare(const struct kernfs_node *left, * @kn->parent->dir.children. * * Locking: - * mutex_lock(kernfs_mutex) + * kernfs_rwsem held exclusive * * RETURNS: * 0 on susccess -EEXIST on failure. @@ -385,7 +396,7 @@ static int kernfs_link_sibling(struct kernfs_node *kn) * removed, %false if @kn wasn't on the rbtree. * * Locking: - * mutex_lock(kernfs_mutex) + * kernfs_rwsem held exclusive */ static bool kernfs_unlink_sibling(struct kernfs_node *kn) { @@ -455,14 +466,14 @@ void kernfs_put_active(struct kernfs_node *kn) * return after draining is complete. */ static void kernfs_drain(struct kernfs_node *kn) - __releases(&kernfs_mutex) __acquires(&kernfs_mutex) + __releases(&kernfs_rwsem) __acquires(&kernfs_rwsem) { struct kernfs_root *root = kernfs_root(kn); - lockdep_assert_held(&kernfs_mutex); + lockdep_assert_held_write(&kernfs_rwsem); WARN_ON_ONCE(kernfs_active(kn)); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); if (kernfs_lockdep(kn)) { rwsem_acquire(&kn->dep_map, 0, 0, _RET_IP_); @@ -481,7 +492,7 @@ static void kernfs_drain(struct kernfs_node *kn) kernfs_drain_open_files(kn); - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); } /** @@ -720,7 +731,7 @@ int kernfs_add_one(struct kernfs_node *kn) bool has_ns; int ret; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); ret = -EINVAL; has_ns = kernfs_ns_enabled(parent); @@ -735,7 +746,7 @@ int kernfs_add_one(struct kernfs_node *kn) if (parent->flags & KERNFS_EMPTY_DIR) goto out_unlock; - if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active(parent)) + if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active_write(parent)) goto out_unlock; kn->hash = kernfs_name_hash(kn->name, kn->ns); @@ -751,7 +762,7 @@ int kernfs_add_one(struct kernfs_node *kn) ps_iattr->ia_mtime = ps_iattr->ia_ctime; } - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); /* * Activate the new node unless CREATE_DEACTIVATED is requested. @@ -765,7 +776,7 @@ int kernfs_add_one(struct kernfs_node *kn) return 0; out_unlock: - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return ret; } @@ -786,7 +797,7 @@ static struct kernfs_node *kernfs_find_ns(struct kernfs_node *parent, bool has_ns = kernfs_ns_enabled(parent); unsigned int hash; - lockdep_assert_held(&kernfs_mutex); + lockdep_assert_held(&kernfs_rwsem); if (has_ns != (bool)ns) { WARN(1, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", @@ -818,7 +829,7 @@ static struct kernfs_node *kernfs_walk_ns(struct kernfs_node *parent, size_t len; char *p, *name; - lockdep_assert_held(&kernfs_mutex); + lockdep_assert_held_read(&kernfs_rwsem); /* grab kernfs_rename_lock to piggy back on kernfs_pr_cont_buf */ spin_lock_irq(&kernfs_rename_lock); @@ -858,10 +869,10 @@ struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent, { struct kernfs_node *kn; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); kn = kernfs_find_ns(parent, name, ns); kernfs_get(kn); - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return kn; } @@ -882,10 +893,10 @@ struct kernfs_node *kernfs_walk_and_get_ns(struct kernfs_node *parent, { struct kernfs_node *kn; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); kn = kernfs_walk_ns(parent, path, ns); kernfs_get(kn); - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return kn; } @@ -1037,7 +1048,7 @@ static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) if (flags & LOOKUP_RCU) return -ECHILD; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); kn = kernfs_dentry_node(dentry); @@ -1082,10 +1093,10 @@ static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) kernfs_info(dentry->d_sb)->ns != kn->ns) goto out_bad; out: - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return 1; out_bad: - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return 0; } @@ -1103,7 +1114,7 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir, struct inode *inode = NULL; const void *ns = NULL; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); if (kernfs_ns_enabled(parent)) ns = kernfs_info(dir->i_sb)->ns; @@ -1116,7 +1127,7 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir, } /* instantiate and hash (possibly negative) dentry */ ret = d_splice_alias(inode, dentry); - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return ret; } @@ -1238,7 +1249,7 @@ static struct kernfs_node *kernfs_next_descendant_post(struct kernfs_node *pos, { struct rb_node *rbn; - lockdep_assert_held(&kernfs_mutex); + lockdep_assert_held_write(&kernfs_rwsem); /* if first iteration, visit leftmost descendant which may be root */ if (!pos) @@ -1274,7 +1285,7 @@ void kernfs_activate(struct kernfs_node *kn) { struct kernfs_node *pos; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); pos = NULL; while ((pos = kernfs_next_descendant_post(pos, kn))) { @@ -1288,14 +1299,14 @@ void kernfs_activate(struct kernfs_node *kn) pos->flags |= KERNFS_ACTIVATED; } - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); } static void __kernfs_remove(struct kernfs_node *kn) { struct kernfs_node *pos; - lockdep_assert_held(&kernfs_mutex); + lockdep_assert_held_write(&kernfs_rwsem); /* * Short-circuit if non-root @kn has already finished removal. @@ -1310,7 +1321,7 @@ static void __kernfs_remove(struct kernfs_node *kn) /* prevent any new usage under @kn by deactivating all nodes */ pos = NULL; while ((pos = kernfs_next_descendant_post(pos, kn))) - if (kernfs_active(pos)) + if (kernfs_active_write(pos)) atomic_add(KN_DEACTIVATED_BIAS, &pos->active); /* deactivate and unlink the subtree node-by-node */ @@ -1318,7 +1329,7 @@ static void __kernfs_remove(struct kernfs_node *kn) pos = kernfs_leftmost_descendant(kn); /* - * kernfs_drain() drops kernfs_mutex temporarily and @pos's + * kernfs_drain() drops kernfs_rwsem temporarily and @pos's * base ref could have been put by someone else by the time * the function returns. Make sure it doesn't go away * underneath us. @@ -1365,9 +1376,9 @@ static void __kernfs_remove(struct kernfs_node *kn) */ void kernfs_remove(struct kernfs_node *kn) { - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); __kernfs_remove(kn); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); } /** @@ -1454,17 +1465,17 @@ bool kernfs_remove_self(struct kernfs_node *kn) { bool ret; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); kernfs_break_active_protection(kn); /* * SUICIDAL is used to arbitrate among competing invocations. Only * the first one will actually perform removal. When the removal * is complete, SUICIDED is set and the active ref is restored - * while holding kernfs_mutex. The ones which lost arbitration - * waits for SUICDED && drained which can happen only after the - * enclosing kernfs operation which executed the winning instance - * of kernfs_remove_self() finished. + * while kernfs_rwsem for held exclusive. The ones which lost + * arbitration waits for SUICIDED && drained which can happen only + * after the enclosing kernfs operation which executed the winning + * instance of kernfs_remove_self() finished. */ if (!(kn->flags & KERNFS_SUICIDAL)) { kn->flags |= KERNFS_SUICIDAL; @@ -1482,9 +1493,9 @@ bool kernfs_remove_self(struct kernfs_node *kn) atomic_read(&kn->active) == KN_DEACTIVATED_BIAS) break; - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); schedule(); - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); } finish_wait(waitq, &wait); WARN_ON_ONCE(!RB_EMPTY_NODE(&kn->rb)); @@ -1492,12 +1503,12 @@ bool kernfs_remove_self(struct kernfs_node *kn) } /* - * This must be done while holding kernfs_mutex; otherwise, waiting - * for SUICIDED && deactivated could finish prematurely. + * This must be done while kernfs_rwsem held exclusive; otherwise, + * waiting for SUICIDED && deactivated could finish prematurely. */ kernfs_unbreak_active_protection(kn); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return ret; } @@ -1521,13 +1532,13 @@ int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name, return -ENOENT; } - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); kn = kernfs_find_ns(parent, name, ns); if (kn) __kernfs_remove(kn); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); if (kn) return 0; @@ -1553,10 +1564,10 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, if (!kn->parent) return -EINVAL; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); error = -ENOENT; - if (!kernfs_active(kn) || !kernfs_active(new_parent) || + if (!kernfs_active_write(kn) || !kernfs_active_write(new_parent) || (new_parent->flags & KERNFS_EMPTY_DIR)) goto out; @@ -1607,7 +1618,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, error = 0; out: - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return error; } @@ -1627,7 +1638,7 @@ static struct kernfs_node *kernfs_dir_pos(const void *ns, struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos) { if (pos) { - int valid = kernfs_active(pos) && + int valid = kernfs_active_read(pos) && pos->parent == parent && hash == pos->hash; kernfs_put(pos); if (!valid) @@ -1647,7 +1658,7 @@ static struct kernfs_node *kernfs_dir_pos(const void *ns, } } /* Skip over entries which are dying/dead or in the wrong namespace */ - while (pos && (!kernfs_active(pos) || pos->ns != ns)) { + while (pos && (!kernfs_active_read(pos) || pos->ns != ns)) { struct rb_node *node = rb_next(&pos->rb); if (!node) pos = NULL; @@ -1668,7 +1679,7 @@ static struct kernfs_node *kernfs_dir_next_pos(const void *ns, pos = NULL; else pos = rb_to_kn(node); - } while (pos && (!kernfs_active(pos) || pos->ns != ns)); + } while (pos && (!kernfs_active_read(pos) || pos->ns != ns)); } return pos; } @@ -1682,7 +1693,7 @@ static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx) if (!dir_emit_dots(file, ctx)) return 0; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); if (kernfs_ns_enabled(parent)) ns = kernfs_info(dentry->d_sb)->ns; @@ -1699,12 +1710,12 @@ static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx) file->private_data = pos; kernfs_get(pos); - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); if (!dir_emit(ctx, name, len, ino, type)) return 0; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); } - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); file->private_data = NULL; ctx->pos = INT_MAX; return 0; diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index c757193121475..60e2a86c535eb 100644 --- a/fs/kernfs/file.c +++ b/fs/kernfs/file.c @@ -860,7 +860,7 @@ static void kernfs_notify_workfn(struct work_struct *work) spin_unlock_irq(&kernfs_notify_lock); /* kick fsnotify */ - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); list_for_each_entry(info, &kernfs_root(kn)->supers, node) { struct kernfs_node *parent; @@ -898,7 +898,7 @@ static void kernfs_notify_workfn(struct work_struct *work) iput(inode); } - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); kernfs_put(kn); goto repeat; } diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index d73950fc3d57d..3b01e9e61f14e 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -106,9 +106,9 @@ int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr) { int ret; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); ret = __kernfs_setattr(kn, iattr); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return ret; } @@ -122,7 +122,7 @@ int kernfs_iop_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, if (!kn) return -EINVAL; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); error = setattr_prepare(&init_user_ns, dentry, iattr); if (error) goto out; @@ -135,7 +135,7 @@ int kernfs_iop_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, setattr_copy(&init_user_ns, inode, iattr); out: - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return error; } @@ -191,9 +191,9 @@ int kernfs_iop_getattr(struct user_namespace *mnt_userns, struct inode *inode = d_inode(path->dentry); struct kernfs_node *kn = inode->i_private; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); kernfs_refresh_inode(kn, inode); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); generic_fillattr(&init_user_ns, inode, stat); return 0; @@ -284,9 +284,9 @@ int kernfs_iop_permission(struct user_namespace *mnt_userns, kn = inode->i_private; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); kernfs_refresh_inode(kn, inode); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); return generic_permission(&init_user_ns, inode, mask); } diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index ccc3b44f6306f..cbd4789fac0f5 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h @@ -13,6 +13,7 @@ #include <linux/lockdep.h> #include <linux/fs.h> #include <linux/mutex.h> +#include <linux/rwsem.h> #include <linux/xattr.h> #include <linux/kernfs.h> @@ -69,7 +70,7 @@ struct kernfs_super_info { */ const void *ns; - /* anchored at kernfs_root->supers, protected by kernfs_mutex */ + /* anchored at kernfs_root->supers, protected by kernfs_rwsem */ struct list_head node; }; #define kernfs_info(SB) ((struct kernfs_super_info *)(SB->s_fs_info)) @@ -102,7 +103,7 @@ int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr); /* * dir.c */ -extern struct mutex kernfs_mutex; +extern struct rw_semaphore kernfs_rwsem; extern const struct dentry_operations kernfs_dops; extern const struct file_operations kernfs_dir_fops; extern const struct inode_operations kernfs_dir_iops; diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index 9dc7e7a64e10f..baa4155ba2edf 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c @@ -255,9 +255,9 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k sb->s_shrink.seeks = 0; /* get root inode, initialize and unlock it */ - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); inode = kernfs_get_inode(sb, info->root->kn); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); if (!inode) { pr_debug("kernfs: could not get root inode\n"); return -ENOMEM; @@ -344,9 +344,9 @@ int kernfs_get_tree(struct fs_context *fc) } sb->s_flags |= SB_ACTIVE; - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); list_add(&info->node, &info->root->supers); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); } fc->root = dget(sb->s_root); @@ -372,9 +372,9 @@ void kernfs_kill_sb(struct super_block *sb) { struct kernfs_super_info *info = kernfs_info(sb); - mutex_lock(&kernfs_mutex); + down_write(&kernfs_rwsem); list_del(&info->node); - mutex_unlock(&kernfs_mutex); + up_write(&kernfs_rwsem); /* * Remove the superblock from fs_supers/s_instances diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c index 5432883d819f2..c8f8e41b84110 100644 --- a/fs/kernfs/symlink.c +++ b/fs/kernfs/symlink.c @@ -116,9 +116,9 @@ static int kernfs_getlink(struct inode *inode, char *path) struct kernfs_node *target = kn->symlink.target_kn; int error; - mutex_lock(&kernfs_mutex); + down_read(&kernfs_rwsem); error = kernfs_get_target_path(parent, target, path); - mutex_unlock(&kernfs_mutex); + up_read(&kernfs_rwsem); return error; } diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h index 9e8ca8743c268..1adb6f0c5f836 100644 --- a/include/linux/kernfs.h +++ b/include/linux/kernfs.h @@ -188,7 +188,7 @@ struct kernfs_root { u32 id_highbits; struct kernfs_syscall_ops *syscall_ops; - /* list of kernfs_super_info of this root, protected by kernfs_mutex */ + /* list of kernfs_super_info of this root, protected by kernfs_rwsem */ struct list_head supers; wait_queue_head_t deactivate_waitq; ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 4/4] kernfs: use i_lock to protect concurrent inode updates 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent ` (2 preceding siblings ...) 2021-04-09 1:15 ` [PATCH v3 3/4] kernfs: switch kernfs to use an rwsem Ian Kent @ 2021-04-09 1:15 ` Ian Kent 2021-04-19 7:56 ` [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Fox Chen 4 siblings, 0 replies; 10+ messages in thread From: Ian Kent @ 2021-04-09 1:15 UTC (permalink / raw) To: Greg Kroah-Hartman, Tejun Heo Cc: Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel The inode operations .permission() and .getattr() use the kernfs node write lock but all that's needed is to keep the rb tree stable while updating the inode attributes as well as protecting the update itself against concurrent changes. And .permission() is called frequently during path walks and can cause quite a bit of contention between kernfs node operations and path walks when the number of concurrent walks is high. To change kernfs_iop_getattr() and kernfs_iop_permission() to take the rw sem read lock instead of the write lock an additional lock is needed to protect against multiple processes concurrently updating the inode attributes and link count in kernfs_refresh_inode(). The inode i_lock seems like the sensible thing to use to protect these inode attribute updates so use it in kernfs_refresh_inode(). Signed-off-by: Ian Kent <raven@themaw.net> --- fs/kernfs/inode.c | 10 ++++++---- fs/kernfs/mount.c | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 3b01e9e61f14e..6728ecd81eb37 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -172,6 +172,7 @@ static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) { struct kernfs_iattrs *attrs = kn->iattr; + spin_lock(&inode->i_lock); inode->i_mode = kn->mode; if (attrs) /* @@ -182,6 +183,7 @@ static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) if (kernfs_type(kn) == KERNFS_DIR) set_nlink(inode, kn->dir.subdirs + 2); + spin_unlock(&inode->i_lock); } int kernfs_iop_getattr(struct user_namespace *mnt_userns, @@ -191,9 +193,9 @@ int kernfs_iop_getattr(struct user_namespace *mnt_userns, struct inode *inode = d_inode(path->dentry); struct kernfs_node *kn = inode->i_private; - down_write(&kernfs_rwsem); + down_read(&kernfs_rwsem); kernfs_refresh_inode(kn, inode); - up_write(&kernfs_rwsem); + up_read(&kernfs_rwsem); generic_fillattr(&init_user_ns, inode, stat); return 0; @@ -284,9 +286,9 @@ int kernfs_iop_permission(struct user_namespace *mnt_userns, kn = inode->i_private; - down_write(&kernfs_rwsem); + down_read(&kernfs_rwsem); kernfs_refresh_inode(kn, inode); - up_write(&kernfs_rwsem); + up_read(&kernfs_rwsem); return generic_permission(&init_user_ns, inode, mask); } diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index baa4155ba2edf..f2f909d09f522 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c @@ -255,9 +255,9 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k sb->s_shrink.seeks = 0; /* get root inode, initialize and unlock it */ - down_write(&kernfs_rwsem); + down_read(&kernfs_rwsem); inode = kernfs_get_inode(sb, info->root->kn); - up_write(&kernfs_rwsem); + up_read(&kernfs_rwsem); if (!inode) { pr_debug("kernfs: could not get root inode\n"); return -ENOMEM; ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent ` (3 preceding siblings ...) 2021-04-09 1:15 ` [PATCH v3 4/4] kernfs: use i_lock to protect concurrent inode updates Ian Kent @ 2021-04-19 7:56 ` Fox Chen 2021-04-19 12:25 ` Ian Kent 4 siblings, 1 reply; 10+ messages in thread From: Fox Chen @ 2021-04-19 7:56 UTC (permalink / raw) To: Ian Kent Cc: Greg Kroah-Hartman, Tejun Heo, Brice Goglin, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel [-- Attachment #1: Type: text/plain, Size: 3214 bytes --] On Fri, Apr 9, 2021 at 9:14 AM Ian Kent <raven@themaw.net> wrote: > > There have been a few instances of contention on the kernfs_mutex during > path walks, a case on very large IBM systems seen by myself, a report by > Brice Goglin and followed up by Fox Chen, and I've since seen a couple > of other reports by CoreOS users. > > The common thread is a large number of kernfs path walks leading to > slowness of path walks due to kernfs_mutex contention. > > The problem being that changes to the VFS over some time have increased > it's concurrency capabilities to an extent that kernfs's use of a mutex > is no longer appropriate. There's also an issue of walks for non-existent > paths causing contention if there are quite a few of them which is a less > common problem. > > This patch series is relatively straight forward. > > All it does is add the ability to take advantage of VFS negative dentry > caching to avoid needless dentry alloc/free cycles for lookups of paths > that don't exit and change the kernfs_mutex to a read/write semaphore. > > The patch that tried to stay in VFS rcu-walk mode during path walks has > been dropped for two reasons. First, it doesn't actually give very much > improvement and, second, if there's a place where mistakes could go > unnoticed it would be in that path. This makes the patch series simpler > to review and reduces the likelihood of problems going unnoticed and > popping up later. > > The patch to use a revision to identify if a directory has changed has > also been dropped. If the directory has changed the dentry revision > needs to be updated to avoid subsequent rb tree searches and after > changing to use a read/write semaphore the update also requires a lock. > But the d_lock is the only lock available at this point which might > itself be contended. > > Changes since v2: > - actually fix the inode attribute update locking. > - drop the patch that tried to stay in rcu-walk mode. > - drop the use a revision to identify if a directory has changed patch. > > Changes since v1: > - fix locking in .permission() and .getattr() by re-factoring the attribute > handling code. > > --- > > Ian Kent (4): > kernfs: move revalidate to be near lookup > kernfs: use VFS negative dentry caching > kernfs: switch kernfs to use an rwsem > kernfs: use i_lock to protect concurrent inode updates > > > fs/kernfs/dir.c | 240 +++++++++++++++++++++++-------------------- > fs/kernfs/file.c | 4 - > fs/kernfs/inode.c | 18 ++- > fs/kernfs/kernfs-internal.h | 5 + > fs/kernfs/mount.c | 12 +- > fs/kernfs/symlink.c | 4 - > include/linux/kernfs.h | 2 > 7 files changed, 155 insertions(+), 130 deletions(-) > > -- > Hi Ian, I tested this patchset with my benchmark(https://github.com/foxhlchen/sysfs_benchmark) on a 96 CPUs (aws c5) machine. The result was promising: Before, one open+read+close cycle took 500us without much variation. With this patch, the fastest one only takes 30us, though the slowest is still around 100us(due to the spinlock). perf report shows no more significant mutex contention. FYR, I put outputs in the attachment. thanks, fox [-- Attachment #2: result.after --] [-- Type: application/octet-stream, Size: 4927 bytes --] single: total 3.006701ms per 3.006701us concur: total 32.057796ms per 32.057796us CPU 51 concur: total 32.492103ms per 32.492103us CPU 3 concur: total 32.737743ms per 32.737743us CPU 7 concur: total 33.087308ms per 33.087308us CPU 2 concur: total 33.271875ms per 33.271875us CPU 49 concur: total 33.346198ms per 33.346198us CPU 50 concur: total 33.483394ms per 33.483394us CPU 55 concur: total 33.575117ms per 33.575117us CPU 1 concur: total 33.873799ms per 33.873799us CPU 6 concur: total 34.056747ms per 34.056747us CPU 5 concur: total 34.139490ms per 34.139490us CPU 54 concur: total 34.317747ms per 34.317747us CPU 53 concur: total 35.430002ms per 35.430002us CPU 48 concur: total 35.467414ms per 35.467414us CPU 0 concur: total 36.634091ms per 36.634091us CPU 4 concur: total 36.803717ms per 36.803717us CPU 52 concur: total 36.959244ms per 36.959244us CPU 11 concur: total 37.446623ms per 37.446623us CPU 59 concur: total 37.607590ms per 37.607590us CPU 58 concur: total 37.916612ms per 37.916612us CPU 10 concur: total 38.044637ms per 38.044637us CPU 9 concur: total 38.379601ms per 38.379601us CPU 57 concur: total 38.582989ms per 38.582989us CPU 15 concur: total 39.408612ms per 39.408612us CPU 62 concur: total 40.001796ms per 40.001796us CPU 63 concur: total 40.123991ms per 40.123991us CPU 14 concur: total 41.816000ms per 41.816000us CPU 13 concur: total 43.134413ms per 43.134413us CPU 8 concur: total 43.167374ms per 43.167374us CPU 61 concur: total 43.673585ms per 43.673585us CPU 56 concur: total 45.289910ms per 45.289910us CPU 12 concur: total 45.342382ms per 45.342382us CPU 60 concur: total 64.314757ms per 64.314757us CPU 67 concur: total 64.571128ms per 64.571128us CPU 23 concur: total 64.650921ms per 64.650921us CPU 71 concur: total 64.734934ms per 64.734934us CPU 19 concur: total 64.863810ms per 64.863810us CPU 17 concur: total 64.916032ms per 64.916032us CPU 66 concur: total 64.988355ms per 64.988355us CPU 21 concur: total 65.004955ms per 65.004955us CPU 65 concur: total 65.134421ms per 65.134421us CPU 18 concur: total 65.293527ms per 65.293527us CPU 70 concur: total 65.410172ms per 65.410172us CPU 22 concur: total 65.494995ms per 65.494995us CPU 69 concur: total 65.597959ms per 65.597959us CPU 64 concur: total 65.891331ms per 65.891331us CPU 20 concur: total 66.150142ms per 66.150142us CPU 68 concur: total 66.263326ms per 66.263326us CPU 16 concur: total 80.115175ms per 80.115175us CPU 27 concur: total 80.402707ms per 80.402707us CPU 31 concur: total 80.565403ms per 80.565403us CPU 75 concur: total 80.757601ms per 80.757601us CPU 79 concur: total 80.988801ms per 80.988801us CPU 73 concur: total 81.060023ms per 81.060023us CPU 78 concur: total 81.169068ms per 81.169068us CPU 25 concur: total 81.525702ms per 81.525702us CPU 30 concur: total 81.678108ms per 81.678108us CPU 26 concur: total 81.737981ms per 81.737981us CPU 29 concur: total 82.072014ms per 82.072014us CPU 77 concur: total 82.073764ms per 82.073764us CPU 74 concur: total 82.673568ms per 82.673568us CPU 72concur: total 82.687729ms per 82.687729us CPU 76 concur: total 83.002492ms per 83.002492us CPU 24 concur: total 83.163668ms per 83.163668us CPU 28 concur: total 102.776790ms per 102.776790us CPU 87 concur: total 102.857793ms per 102.857793us CPU 35 concur: total 103.023630ms per 103.023630us CPU 39 concur: total 103.143735ms per 103.143735us CPU 43 concur: total 103.251629ms per 103.251629us CPU 83 concur: total 103.304701ms per 103.304701us CPU 33 concur: total 103.393765ms per 103.393765us CPU 91 concur: total 103.416055ms per 103.416055us concur: total 103.419316ms per 103.419316us concur: total 103.429036ms per 103.429036us concur: total 103.424245ms per 103.424245us CPU 86 CPU 95 CPU 34 CPU 85 concur: total 103.465647ms per 103.465647us CPU 37 concur: total 103.556421ms per 103.556421us CPU 81 concur: total 103.600983ms per 103.600983us CPU 89concur: total 103.608003ms per 103.608003us CPU 82concur: total 103.622134ms per 103.622134us CPU 41 concur: total 103.659765ms per 103.659765us CPU 38 concur: total 103.759289ms per 103.759289us CPU 47 concur: total 103.795671ms per 103.795671us CPU 90 concur: total 103.835662ms per 103.835662us CPU 45 concur: total 103.874204ms per 103.874204us CPU 42 concur: total 103.921736ms per 103.921736us CPU 36 concur: total 104.031040ms per 104.031040us CPU 94 concur: total 104.070472ms per 104.070472us CPU 80 concur: total 104.078142ms per 104.078142us CPU 93 concur: total 104.124384ms per 104.124384us CPU 32 concur: total 104.160405ms per 104.160405us CPU 46 concur: total 104.185506ms per 104.185506us CPU 40 concur: total 104.207247ms per 104.207247us CPU 92 concur: total 104.246149ms per 104.246149us CPU 84 concur: total 104.293941ms per 104.293941us CPU 88 concur: total 104.314402ms per 104.314402us CPU 44 times: 1000 threads: 96 cpus: 96 [-- Attachment #3: result.before --] [-- Type: application/octet-stream, Size: 5055 bytes --] single: total 2.884608ms per 2.884608us concur: total 493.478294ms per 493.478294us CPU 54 concur: total 494.759468ms per 494.759468us CPU 16 concur: total 495.123051ms per 495.123051us CPU 17 concur: total 495.336105ms per 495.336105us CPU 64 concur: total 495.430841ms per 495.430841us CPU 14 concur: total 495.448193ms per 495.448193us CPU 70 concur: total 495.468434ms per 495.468434us CPU 67 concur: total 496.068303ms per 496.068303us CPU 43concur: total 496.073834ms per 496.073834us CPU 83 concur: total 496.214473ms per 496.214473us CPU 22 concur: total 496.388984ms per 496.388984us CPU 84 concur: total 496.615719ms per 496.615719us CPU 38 concur: total 496.662582ms per 496.662582us CPU 5 concur: total 496.954701ms per 496.954701us CPU 69 concur: total 496.963772ms per 496.963772us CPU 66 concur: total 497.130163ms per 497.130163us CPU 35 concur: total 497.164755ms per 497.164755us CPU 18concur: total 497.170125ms per 497.170125us CPU 74 concur: total 497.243370ms per 497.243370us CPU 19 concur: total 497.348467ms per 497.348467us CPU 85 concur: total 497.616995ms per 497.616995us CPU 79 concur: total 498.182402ms per 498.182402us CPU 15 concur: total 498.346592ms per 498.346592us CPU 78 concur: total 498.560636ms per 498.560636us CPU 71 concur: total 498.793862ms per 498.793862us CPU 36 concur: total 498.795112ms per 498.795112us CPU 10 concur: total 498.836754ms per 498.836754us CPU 94 concur: total 499.016226ms per 499.016226us CPU 80 concur: total 499.117983ms per 499.117983us CPU 24 concur: total 499.402951ms per 499.402951us CPU 2 concur: total 499.489227ms per 499.489227us CPU 32 concur: total 499.509828ms per 499.509828us CPU 81 concur: total 499.574623ms per 499.574623us concur: total 499.577163ms per 499.577163us CPU 37 concur: total 499.644097ms per 499.644097us CPU 91 CPU 63 concur: total 499.729263ms per 499.729263us CPU 30 concur: total 499.760315ms per 499.760315us CPU 65 concur: total 499.829729ms per 499.829729us CPU 8 concur: total 499.848731ms per 499.848731us CPU 21 concur: total 499.723043ms per 499.723043us CPU 55 concur: total 499.940567ms per 499.940567us CPU 62 concur: total 499.976419ms per 499.976419us CPU 34 concur: total 500.024402ms per 500.024402us CPU 53 concur: total 500.088066ms per 500.088066us CPU 44 concur: total 500.104787ms per 500.104787us CPU 11 concur: total 500.132569ms per 500.132569us CPU 27 concur: total 500.175832ms per 500.175832us CPU 86 concur: total 500.209424ms per 500.209424us CPU 46 concur: total 500.224665ms per 500.224665us CPU 73 concur: total 500.227475ms per 500.227475us CPU 50 concur: total 500.282449ms per 500.282449us CPU 23 concur: total 500.292870ms per 500.292870us CPU 41 concur: total 500.370375ms per 500.370375us CPU 6 concur: total 500.540066ms per 500.540066us CPU 33 concur: total 500.597190ms per 500.597190us CPU 61 concur: total 500.657503ms per 500.657503us CPU 90 concur: total 500.727758ms per 500.727758us CPU 92 concur: total 500.767171ms per 500.767171us CPU 3 concur: total 500.782442ms per 500.782442us CPU 56 concur: total 500.848026ms per 500.848026us CPU 47concur: total 500.853006ms per 500.853006us concur: total 500.861377ms per 500.861377us CPU 52 CPU 39 concur: total 500.883958ms per 500.883958us CPU 26 concur: total 500.948133ms per 500.948133us CPU 89 concur: total 500.954853ms per 500.954853us CPU 88 concur: total 501.007586ms per 501.007586us CPU 76 concur: total 501.106263ms per 501.106263us CPU 28 concur: total 501.153606ms per 501.153606us CPU 75 concur: total 501.174267ms per 501.174267us CPU 58 concur: total 501.187538ms per 501.187538us CPU 51 concur: total 501.249452ms per 501.249452us CPU 72 concur: total 501.258213ms per 501.258213us CPU 40 concur: total 501.340298ms per 501.340298us CPU 82 concur: total 501.346649ms per 501.346649us CPU 12 concur: total 501.371100ms per 501.371100us CPU 9 concur: total 501.405882ms per 501.405882us CPU 4 concur: total 501.449815ms per 501.449815us CPU 87 concur: total 501.468097ms per 501.468097us CPU 20concur: total 501.464897ms per 501.464897us CPU 95 concur: total 501.525250ms per 501.525250us CPU 45 concur: total 501.482868ms per 501.482868us CPU 25 concur: total 501.641478ms per 501.641478us CPU 42 concur: total 501.646838ms per 501.646838us CPU 68 concur: total 501.702382ms per 501.702382us CPU 59 concur: total 501.726964ms per 501.726964us CPU 31 concur: total 501.742874ms per 501.742874us CPU 7concur: total 501.728604ms per 501.728604us CPU 29 concur: total 501.780907ms per 501.780907us CPU 0 concur: total 501.818790ms per 501.818790us CPU 48 concur: total 501.827900ms per 501.827900us CPU 60 concur: total 501.849432ms per 501.849432us CPU 57 concur: total 501.862902ms per 501.862902us CPU 93 concur: total 501.879784ms per 501.879784us CPU 13 concur: total 501.938867ms per 501.938867us CPU 77 concur: total 502.001791ms per 502.001791us CPU 1 concur: total 502.009782ms per 502.009782us CPU 49 times: 1000 threads: 96 cpus: 96 [-- Attachment #4: perf_report --] [-- Type: application/octet-stream, Size: 230766 bytes --] # To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 2K of event 'cycles' # Event count (approx.): 513478020 # # Children Self Command Shared Object Symbol # ........ ........ ............... .................. .............................................. # 91.01% 0.20% bin_sysbm [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe | --90.80%--entry_SYSCALL_64_after_hwframe | --90.66%--do_syscall_64 | |--56.89%--__x64_sys_openat | | | --56.82%--do_sys_open | do_sys_openat2 | | | |--22.24%--fd_install | | | | | --22.08%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | |--18.23%--do_filp_open | | path_openat | | | | | |--8.39%--link_path_walk.part.0 | | | | | | | |--4.47%--inode_permission | | | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | | | |--1.19%--down_read | | | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | | | --0.58%--_raw_spin_lock | | | | | native_queued_spin_lock_slowpath | | | | | | | | | --0.57%--up_read | | | | | | | --3.49%--walk_component | | | | | | | --3.04%--lookup_fast | | | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | | | --0.94%--down_read | | | | | | | |--0.99%--__d_lookup | | | | _raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.59%--_raw_spin_lock | | | | | |--4.18%--vfs_open | | | do_dentry_open | | | | | | | --3.21%--kernfs_fop_open | | | | | | | --2.50%--mutex_lock | | | | | | | --2.18%--__mutex_lock_slowpath | | | | | | | --2.10%--__mutex_lock.isra.0 | | | | | | | --1.78%--osq_lock | | | | | |--1.88%--alloc_empty_file | | | __alloc_file | | | | | | | --1.09%--kmem_cache_alloc | | | | | |--1.35%--may_open | | | | | | | --1.27%--inode_permission | | | | | | | --1.05%--kernfs_iop_permission | | | | | | | --0.64%--kernfs_refresh_inode | | | | | | | --0.56%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --1.20%--lookup_fast | | | | | --0.70%--__d_lookup | | | | | --0.65%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --15.25%--get_unused_fd_flags | | | --14.76%--alloc_fd | | | --13.95%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--20.63%--__x64_sys_close | close_fd | | | |--19.93%--pick_file | | | | | --19.80%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.62%--_raw_spin_lock | |--9.22%--syscall_exit_to_user_mode | | | --9.13%--exit_to_user_mode_prepare | | | --8.98%--task_work_run | | | --8.93%--____fput | | | --8.85%--__fput | | | |--7.13%--kernfs_fop_release | | | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | | | --5.19%--mutex_lock | | | | | | | --5.01%--__mutex_lock_slowpath | | | | | | | --4.88%--__mutex_lock.isra.0 | | | | | | | --4.57%--osq_lock | | | | | --1.36%--seq_release | | | | | --1.10%--kvfree | | kfree | | | | | --1.02%--obj_cgroup_uncharge | | refill_obj_stock | | | | | --0.67%--drain_obj_stock.isra.0 | | | | | --0.51%--__memcg_kmem_uncharge | | | --0.82%--dput | _raw_spin_lock | native_queued_spin_lock_slowpath | --3.78%--__x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 90.66% 0.00% bin_sysbm [kernel.kallsyms] [k] do_syscall_64 | ---do_syscall_64 | |--56.89%--__x64_sys_openat | | | --56.82%--do_sys_open | do_sys_openat2 | | | |--22.24%--fd_install | | | | | --22.08%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | |--18.23%--do_filp_open | | path_openat | | | | | |--8.39%--link_path_walk.part.0 | | | | | | | |--4.47%--inode_permission | | | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | | | |--1.19%--down_read | | | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | | | --0.58%--_raw_spin_lock | | | | | native_queued_spin_lock_slowpath | | | | | | | | | --0.57%--up_read | | | | | | | --3.49%--walk_component | | | | | | | --3.04%--lookup_fast | | | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | | | --0.94%--down_read | | | | | | | |--0.99%--__d_lookup | | | | _raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.59%--_raw_spin_lock | | | | | |--4.18%--vfs_open | | | do_dentry_open | | | | | | | --3.21%--kernfs_fop_open | | | | | | | --2.50%--mutex_lock | | | | | | | --2.18%--__mutex_lock_slowpath | | | | | | | --2.10%--__mutex_lock.isra.0 | | | | | | | --1.78%--osq_lock | | | | | |--1.88%--alloc_empty_file | | | __alloc_file | | | | | | | --1.09%--kmem_cache_alloc | | | | | |--1.35%--may_open | | | | | | | --1.27%--inode_permission | | | | | | | --1.05%--kernfs_iop_permission | | | | | | | --0.64%--kernfs_refresh_inode | | | | | | | --0.56%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --1.20%--lookup_fast | | | | | --0.70%--__d_lookup | | | | | --0.65%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --15.25%--get_unused_fd_flags | | | --14.76%--alloc_fd | | | --13.95%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--20.63%--__x64_sys_close | close_fd | | | |--19.93%--pick_file | | | | | --19.80%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.62%--_raw_spin_lock | |--9.22%--syscall_exit_to_user_mode | | | --9.13%--exit_to_user_mode_prepare | | | --8.98%--task_work_run | | | --8.93%--____fput | | | --8.85%--__fput | | | |--7.13%--kernfs_fop_release | | | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | | | --5.19%--mutex_lock | | | | | | | --5.01%--__mutex_lock_slowpath | | | | | | | --4.88%--__mutex_lock.isra.0 | | | | | | | --4.57%--osq_lock | | | | | --1.36%--seq_release | | | | | --1.10%--kvfree | | kfree | | | | | --1.02%--obj_cgroup_uncharge | | refill_obj_stock | | | | | --0.67%--drain_obj_stock.isra.0 | | | | | --0.51%--__memcg_kmem_uncharge | | | --0.82%--dput | _raw_spin_lock | native_queued_spin_lock_slowpath | --3.78%--__x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 61.98% 2.26% bin_sysbm [kernel.kallsyms] [k] _raw_spin_lock | |--59.71%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--1.64%--0x7379732f73656369 | 0x7f88520d7ad4 | entry_SYSCALL_64_after_hwframe | do_syscall_64 | __x64_sys_openat | do_sys_open | do_sys_openat2 | | | --1.03%--do_filp_open | path_openat | | | --0.81%--link_path_walk.part.0 | | | --0.59%--walk_component | lookup_fast | _raw_spin_lock | --0.62%--0x7f88520cc609 0x56303487c721 0x7f88520d73fb entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_close close_fd _raw_spin_lock 59.80% 59.80% bin_sysbm [kernel.kallsyms] [k] native_queued_spin_lock_slowpath | |--39.17%--0x7379732f73656369 | 0x7f88520d7ad4 | entry_SYSCALL_64_after_hwframe | do_syscall_64 | __x64_sys_openat | do_sys_open | do_sys_openat2 | | | |--22.08%--fd_install | | _raw_spin_lock | | native_queued_spin_lock_slowpath | | | |--14.03%--get_unused_fd_flags | | alloc_fd | | | | | --13.95%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --3.07%--do_filp_open | path_openat | | | |--1.65%--link_path_walk.part.0 | | | | | |--1.07%--walk_component | | | | | | | --0.99%--lookup_fast | | | __d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.58%--inode_permission | | kernfs_iop_permission | | kernfs_refresh_inode | | _raw_spin_lock | | native_queued_spin_lock_slowpath | | | |--0.65%--lookup_fast | | __d_lookup | | _raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.56%--may_open | inode_permission | kernfs_iop_permission | kernfs_refresh_inode | _raw_spin_lock | native_queued_spin_lock_slowpath | --20.62%--0x7f88520cc609 0x56303487c721 0x7f88520d73fb entry_SYSCALL_64_after_hwframe do_syscall_64 | |--19.80%--__x64_sys_close | close_fd | pick_file | _raw_spin_lock | native_queued_spin_lock_slowpath | --0.82%--syscall_exit_to_user_mode exit_to_user_mode_prepare task_work_run ____fput __fput dput _raw_spin_lock native_queued_spin_lock_slowpath 57.29% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520d7ad4 | ---0x7f88520d7ad4 | --57.09%--entry_SYSCALL_64_after_hwframe | --56.97%--do_syscall_64 | --56.89%--__x64_sys_openat | --56.82%--do_sys_open do_sys_openat2 | |--22.24%--fd_install | | | --22.08%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--18.23%--do_filp_open | path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --15.25%--get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 57.25% 0.00% bin_sysbm [unknown] [k] 0x7379732f73656369 | ---0x7379732f73656369 0x7f88520d7ad4 | --57.05%--entry_SYSCALL_64_after_hwframe | --56.97%--do_syscall_64 | --56.89%--__x64_sys_openat | --56.82%--do_sys_open do_sys_openat2 | |--22.24%--fd_install | | | --22.08%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--18.23%--do_filp_open | path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --15.25%--get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 56.89% 0.00% bin_sysbm [kernel.kallsyms] [k] __x64_sys_openat | ---__x64_sys_openat | --56.82%--do_sys_open do_sys_openat2 | |--22.24%--fd_install | | | --22.08%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--18.23%--do_filp_open | path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --15.25%--get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 56.89% 0.31% bin_sysbm [kernel.kallsyms] [k] do_sys_openat2 | --56.58%--do_sys_openat2 | |--22.24%--fd_install | | | --22.08%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--18.23%--do_filp_open | path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --15.25%--get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 56.82% 0.00% bin_sysbm [kernel.kallsyms] [k] do_sys_open | ---do_sys_open do_sys_openat2 | |--22.24%--fd_install | | | --22.08%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--18.23%--do_filp_open | path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --15.25%--get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 34.29% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520cc609 | ---0x7f88520cc609 | --34.20%--0x56303487c721 | |--30.00%--0x7f88520d73fb | entry_SYSCALL_64_after_hwframe | | | --29.84%--do_syscall_64 | | | |--20.63%--__x64_sys_close | | close_fd | | | | | |--19.93%--pick_file | | | | | | | --19.80%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.62%--_raw_spin_lock | | | --9.13%--syscall_exit_to_user_mode | exit_to_user_mode_prepare | | | --8.98%--task_work_run | | | --8.93%--____fput | | | --8.85%--__fput | | | |--7.13%--kernfs_fop_release | | | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | | | --5.19%--mutex_lock | | | | | | | --5.01%--__mutex_lock_slowpath | | | | | | | --4.88%--__mutex_lock.isra.0 | | | | | | | --4.57%--osq_lock | | | | | --1.36%--seq_release | | | | | --1.10%--kvfree | | kfree | | | | | --1.02%--obj_cgroup_uncharge | | refill_obj_stock | | | | | --0.67%--drain_obj_stock.isra.0 | | | | | --0.51%--__memcg_kmem_uncharge | | | --0.82%--dput | _raw_spin_lock | native_queued_spin_lock_slowpath | --3.83%--0x7f88520d736c entry_SYSCALL_64_after_hwframe | --3.78%--do_syscall_64 __x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 34.20% 0.00% bin_sysbm bin_sysbm [.] 0x000056303487c721 | ---0x56303487c721 | |--30.00%--0x7f88520d73fb | entry_SYSCALL_64_after_hwframe | | | --29.84%--do_syscall_64 | | | |--20.63%--__x64_sys_close | | close_fd | | | | | |--19.93%--pick_file | | | | | | | --19.80%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.62%--_raw_spin_lock | | | --9.13%--syscall_exit_to_user_mode | exit_to_user_mode_prepare | | | --8.98%--task_work_run | | | --8.93%--____fput | | | --8.85%--__fput | | | |--7.13%--kernfs_fop_release | | | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | | | --5.19%--mutex_lock | | | | | | | --5.01%--__mutex_lock_slowpath | | | | | | | --4.88%--__mutex_lock.isra.0 | | | | | | | --4.57%--osq_lock | | | | | --1.36%--seq_release | | | | | --1.10%--kvfree | | kfree | | | | | --1.02%--obj_cgroup_uncharge | | refill_obj_stock | | | | | --0.67%--drain_obj_stock.isra.0 | | | | | --0.51%--__memcg_kmem_uncharge | | | --0.82%--dput | _raw_spin_lock | native_queued_spin_lock_slowpath | --3.83%--0x7f88520d736c entry_SYSCALL_64_after_hwframe | --3.78%--do_syscall_64 __x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 30.00% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520d73fb | ---0x7f88520d73fb entry_SYSCALL_64_after_hwframe | --29.84%--do_syscall_64 | |--20.63%--__x64_sys_close | close_fd | | | |--19.93%--pick_file | | | | | --19.80%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.62%--_raw_spin_lock | --9.13%--syscall_exit_to_user_mode exit_to_user_mode_prepare | --8.98%--task_work_run | --8.93%--____fput | --8.85%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 22.24% 0.16% bin_sysbm [kernel.kallsyms] [k] fd_install | --22.08%--fd_install _raw_spin_lock native_queued_spin_lock_slowpath 20.71% 0.08% bin_sysbm [kernel.kallsyms] [k] close_fd | --20.63%--close_fd | |--19.93%--pick_file | | | --19.80%--_raw_spin_lock | native_queued_spin_lock_slowpath | --0.62%--_raw_spin_lock 20.63% 0.00% bin_sysbm [kernel.kallsyms] [k] __x64_sys_close | ---__x64_sys_close close_fd | |--19.93%--pick_file | | | --19.80%--_raw_spin_lock | native_queued_spin_lock_slowpath | --0.62%--_raw_spin_lock 19.93% 0.13% bin_sysbm [kernel.kallsyms] [k] pick_file | --19.80%--pick_file _raw_spin_lock native_queued_spin_lock_slowpath 18.23% 0.00% bin_sysbm [kernel.kallsyms] [k] do_filp_open | ---do_filp_open path_openat | |--8.39%--link_path_walk.part.0 | | | |--4.47%--inode_permission | | | | | |--2.84%--kernfs_iop_permission | | | | | | | |--1.19%--down_read | | | | | | | |--0.68%--generic_permission | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | --0.58%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.57%--up_read | | | --3.49%--walk_component | | | --3.04%--lookup_fast | | | |--1.02%--kernfs_dop_revalidate | | | | | --0.94%--down_read | | | |--0.99%--__d_lookup | | _raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.59%--_raw_spin_lock | |--4.18%--vfs_open | do_dentry_open | | | --3.21%--kernfs_fop_open | | | --2.50%--mutex_lock | | | --2.18%--__mutex_lock_slowpath | | | --2.10%--__mutex_lock.isra.0 | | | --1.78%--osq_lock | |--1.88%--alloc_empty_file | __alloc_file | | | --1.09%--kmem_cache_alloc | |--1.35%--may_open | | | --1.27%--inode_permission | | | --1.05%--kernfs_iop_permission | | | --0.64%--kernfs_refresh_inode | | | --0.56%--_raw_spin_lock | native_queued_spin_lock_slowpath | --1.20%--lookup_fast | --0.70%--__d_lookup | --0.65%--_raw_spin_lock native_queued_spin_lock_slowpath 18.23% 0.50% bin_sysbm [kernel.kallsyms] [k] path_openat | |--17.72%--path_openat | | | |--8.39%--link_path_walk.part.0 | | | | | |--4.47%--inode_permission | | | | | | | |--2.84%--kernfs_iop_permission | | | | | | | | | |--1.19%--down_read | | | | | | | | | |--0.68%--generic_permission | | | | | | | | | --0.66%--kernfs_refresh_inode | | | | | | | | | --0.58%--_raw_spin_lock | | | | native_queued_spin_lock_slowpath | | | | | | | --0.57%--up_read | | | | | --3.49%--walk_component | | | | | --3.04%--lookup_fast | | | | | |--1.02%--kernfs_dop_revalidate | | | | | | | --0.94%--down_read | | | | | |--0.99%--__d_lookup | | | _raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.59%--_raw_spin_lock | | | |--4.18%--vfs_open | | do_dentry_open | | | | | --3.21%--kernfs_fop_open | | | | | --2.50%--mutex_lock | | | | | --2.18%--__mutex_lock_slowpath | | | | | --2.10%--__mutex_lock.isra.0 | | | | | --1.78%--osq_lock | | | |--1.88%--alloc_empty_file | | __alloc_file | | | | | --1.09%--kmem_cache_alloc | | | |--1.35%--may_open | | | | | --1.27%--inode_permission | | | | | --1.05%--kernfs_iop_permission | | | | | --0.64%--kernfs_refresh_inode | | | | | --0.56%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --1.20%--lookup_fast | | | --0.70%--__d_lookup | | | --0.65%--_raw_spin_lock | native_queued_spin_lock_slowpath | --0.50%--0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat 15.25% 0.00% bin_sysbm [kernel.kallsyms] [k] get_unused_fd_flags | ---get_unused_fd_flags | --14.76%--alloc_fd | --13.95%--_raw_spin_lock native_queued_spin_lock_slowpath 14.76% 0.54% bin_sysbm [kernel.kallsyms] [k] alloc_fd | |--14.21%--alloc_fd | | | --13.95%--_raw_spin_lock | native_queued_spin_lock_slowpath | --0.54%--0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 get_unused_fd_flags alloc_fd 9.30% 0.17% bin_sysbm [kernel.kallsyms] [k] syscall_exit_to_user_mode | --9.13%--syscall_exit_to_user_mode | --9.13%--exit_to_user_mode_prepare | --8.98%--task_work_run | --8.93%--____fput | --8.85%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 9.13% 0.00% bin_sysbm [kernel.kallsyms] [k] exit_to_user_mode_prepare | ---exit_to_user_mode_prepare | --8.98%--task_work_run | --8.93%--____fput | --8.85%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 9.00% 0.07% bin_sysbm [kernel.kallsyms] [k] ____fput | --8.93%--____fput | --8.85%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 8.98% 0.00% bin_sysbm [kernel.kallsyms] [k] task_work_run | ---task_work_run | --8.93%--____fput | --8.85%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 8.85% 0.23% bin_sysbm [kernel.kallsyms] [k] __fput | --8.61%--__fput | |--7.13%--kernfs_fop_release | | | |--5.46%--kernfs_put_open_node.isra.0 | | | | | --5.19%--mutex_lock | | | | | --5.01%--__mutex_lock_slowpath | | | | | --4.88%--__mutex_lock.isra.0 | | | | | --4.57%--osq_lock | | | --1.36%--seq_release | | | --1.10%--kvfree | kfree | | | --1.02%--obj_cgroup_uncharge | refill_obj_stock | | | --0.67%--drain_obj_stock.isra.0 | | | --0.51%--__memcg_kmem_uncharge | --0.82%--dput _raw_spin_lock native_queued_spin_lock_slowpath 8.39% 0.10% bin_sysbm [kernel.kallsyms] [k] link_path_walk.part.0 | --8.29%--link_path_walk.part.0 | |--4.47%--inode_permission | | | |--2.84%--kernfs_iop_permission | | | | | |--1.19%--down_read | | | | | |--0.68%--generic_permission | | | | | --0.66%--kernfs_refresh_inode | | | | | --0.58%--_raw_spin_lock | | native_queued_spin_lock_slowpath | | | --0.57%--up_read | --3.49%--walk_component | --3.04%--lookup_fast | |--1.02%--kernfs_dop_revalidate | | | --0.94%--down_read | |--0.99%--__d_lookup | _raw_spin_lock | native_queued_spin_lock_slowpath | --0.59%--_raw_spin_lock 8.29% 0.00% swapper [kernel.kallsyms] [k] secondary_startup_64_no_verify | ---secondary_startup_64_no_verify | --8.19%--start_secondary cpu_startup_entry | --8.18%--do_idle | --7.83%--call_cpuidle cpuidle_enter | --7.79%--cpuidle_enter_state | |--6.14%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.02%--irq_exit_rcu | | | | | --3.98%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.87%--run_rebalance_domains | | | | | --0.81%--rebalance_domains | | | | | --0.65%--load_balance | | | --2.06%--__sysvec_apic_timer_interrupt | | | --1.85%--hrtimer_interrupt | | | |--0.85%--tick_program_event | | | | | --0.82%--clockevents_program_event | | | | | --0.79%--native_apic_mem_write | | | --0.82%--__hrtimer_run_queues | | | --0.80%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.51%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 8.29% 0.00% swapper [kernel.kallsyms] [k] cpu_startup_entry | ---cpu_startup_entry | --8.28%--do_idle | --7.90%--call_cpuidle cpuidle_enter | --7.86%--cpuidle_enter_state | |--6.19%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.04%--irq_exit_rcu | | | | | --4.00%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.88%--run_rebalance_domains | | | | | --0.83%--rebalance_domains | | | | | --0.66%--load_balance | | | --2.09%--__sysvec_apic_timer_interrupt | | | --1.88%--hrtimer_interrupt | | | |--0.86%--tick_program_event | | | | | --0.83%--clockevents_program_event | | | | | --0.80%--native_apic_mem_write | | | --0.83%--__hrtimer_run_queues | | | --0.81%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.52%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 8.28% 0.03% swapper [kernel.kallsyms] [k] do_idle | --8.25%--do_idle | --7.90%--call_cpuidle cpuidle_enter | --7.86%--cpuidle_enter_state | |--6.19%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.04%--irq_exit_rcu | | | | | --4.00%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.88%--run_rebalance_domains | | | | | --0.83%--rebalance_domains | | | | | --0.66%--load_balance | | | --2.09%--__sysvec_apic_timer_interrupt | | | --1.88%--hrtimer_interrupt | | | |--0.86%--tick_program_event | | | | | --0.83%--clockevents_program_event | | | | | --0.80%--native_apic_mem_write | | | --0.83%--__hrtimer_run_queues | | | --0.81%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.52%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 8.19% 0.00% swapper [kernel.kallsyms] [k] start_secondary | ---start_secondary cpu_startup_entry | --8.18%--do_idle | --7.83%--call_cpuidle cpuidle_enter | --7.79%--cpuidle_enter_state | |--6.14%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.02%--irq_exit_rcu | | | | | --3.98%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.87%--run_rebalance_domains | | | | | --0.81%--rebalance_domains | | | | | --0.65%--load_balance | | | --2.06%--__sysvec_apic_timer_interrupt | | | --1.85%--hrtimer_interrupt | | | |--0.85%--tick_program_event | | | | | --0.82%--clockevents_program_event | | | | | --0.79%--native_apic_mem_write | | | --0.82%--__hrtimer_run_queues | | | --0.80%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.51%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 7.90% 0.00% swapper [kernel.kallsyms] [k] call_cpuidle | ---call_cpuidle cpuidle_enter | --7.86%--cpuidle_enter_state | |--6.19%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.04%--irq_exit_rcu | | | | | --4.00%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.88%--run_rebalance_domains | | | | | --0.83%--rebalance_domains | | | | | --0.66%--load_balance | | | --2.09%--__sysvec_apic_timer_interrupt | | | --1.88%--hrtimer_interrupt | | | |--0.86%--tick_program_event | | | | | --0.83%--clockevents_program_event | | | | | --0.80%--native_apic_mem_write | | | --0.83%--__hrtimer_run_queues | | | --0.81%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.52%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 7.90% 0.01% swapper [kernel.kallsyms] [k] cpuidle_enter | --7.89%--cpuidle_enter | --7.86%--cpuidle_enter_state | |--6.19%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.04%--irq_exit_rcu | | | | | --4.00%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.88%--run_rebalance_domains | | | | | --0.83%--rebalance_domains | | | | | --0.66%--load_balance | | | --2.09%--__sysvec_apic_timer_interrupt | | | --1.88%--hrtimer_interrupt | | | |--0.86%--tick_program_event | | | | | --0.83%--clockevents_program_event | | | | | --0.80%--native_apic_mem_write | | | --0.83%--__hrtimer_run_queues | | | --0.81%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.52%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 7.86% 0.08% swapper [kernel.kallsyms] [k] cpuidle_enter_state | --7.78%--cpuidle_enter_state | |--6.19%--asm_sysvec_apic_timer_interrupt | sysvec_apic_timer_interrupt | | | |--4.04%--irq_exit_rcu | | | | | --4.00%--__softirqentry_text_start | | | | | |--3.11%--rcu_core_si | | | | | | | --3.03%--rcu_core | | | | | | | --3.00%--file_free_rcu | | | | | | | --1.63%--kmem_cache_free | | | | | | | --0.75%--obj_cgroup_uncharge | | | refill_obj_stock | | | | | --0.88%--run_rebalance_domains | | | | | --0.83%--rebalance_domains | | | | | --0.66%--load_balance | | | --2.09%--__sysvec_apic_timer_interrupt | | | --1.88%--hrtimer_interrupt | | | |--0.86%--tick_program_event | | | | | --0.83%--clockevents_program_event | | | | | --0.80%--native_apic_mem_write | | | --0.83%--__hrtimer_run_queues | | | --0.81%--tick_sched_timer | | | --0.73%--tick_sched_handle.isra.0 | | | --0.72%--update_process_times | --1.52%--acpi_idle_enter | --1.51%--acpi_idle_do_entry 7.78% 0.51% bin_sysbm [kernel.kallsyms] [k] mutex_lock | --7.27%--mutex_lock | --7.19%--__mutex_lock_slowpath | --6.97%--__mutex_lock.isra.0 | --6.35%--osq_lock 7.25% 0.06% bin_sysbm [kernel.kallsyms] [k] __mutex_lock_slowpath | --7.19%--__mutex_lock_slowpath | --6.97%--__mutex_lock.isra.0 | --6.35%--osq_lock 7.21% 0.19% bin_sysbm [kernel.kallsyms] [k] kernfs_fop_release | --7.02%--kernfs_fop_release | |--5.46%--kernfs_put_open_node.isra.0 | | | --5.19%--mutex_lock | | | --5.01%--__mutex_lock_slowpath | | | --4.88%--__mutex_lock.isra.0 | | | --4.57%--osq_lock | --1.36%--seq_release | --1.10%--kvfree kfree | --1.02%--obj_cgroup_uncharge refill_obj_stock | --0.67%--drain_obj_stock.isra.0 | --0.51%--__memcg_kmem_uncharge 6.97% 0.25% bin_sysbm [kernel.kallsyms] [k] __mutex_lock.isra.0 | --6.73%--__mutex_lock.isra.0 | --6.35%--osq_lock 6.57% 6.57% bin_sysbm [kernel.kallsyms] [k] osq_lock | |--4.71%--0x7f88520cc609 | 0x56303487c721 | 0x7f88520d73fb | entry_SYSCALL_64_after_hwframe | do_syscall_64 | syscall_exit_to_user_mode | exit_to_user_mode_prepare | task_work_run | ____fput | __fput | kernfs_fop_release | kernfs_put_open_node.isra.0 | mutex_lock | __mutex_lock_slowpath | | | --4.57%--__mutex_lock.isra.0 | osq_lock | --1.86%--0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat vfs_open do_dentry_open kernfs_fop_open mutex_lock __mutex_lock_slowpath | --1.78%--__mutex_lock.isra.0 osq_lock 6.19% 0.00% swapper [kernel.kallsyms] [k] asm_sysvec_apic_timer_interrupt | ---asm_sysvec_apic_timer_interrupt sysvec_apic_timer_interrupt | |--4.04%--irq_exit_rcu | | | --4.00%--__softirqentry_text_start | | | |--3.11%--rcu_core_si | | | | | --3.03%--rcu_core | | | | | --3.00%--file_free_rcu | | | | | --1.63%--kmem_cache_free | | | | | --0.75%--obj_cgroup_uncharge | | refill_obj_stock | | | --0.88%--run_rebalance_domains | | | --0.83%--rebalance_domains | | | --0.66%--load_balance | --2.09%--__sysvec_apic_timer_interrupt | --1.88%--hrtimer_interrupt | |--0.86%--tick_program_event | | | --0.83%--clockevents_program_event | | | --0.80%--native_apic_mem_write | --0.83%--__hrtimer_run_queues | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 6.19% 0.00% swapper [kernel.kallsyms] [k] sysvec_apic_timer_interrupt | ---sysvec_apic_timer_interrupt | |--4.04%--irq_exit_rcu | | | --4.00%--__softirqentry_text_start | | | |--3.11%--rcu_core_si | | | | | --3.03%--rcu_core | | | | | --3.00%--file_free_rcu | | | | | --1.63%--kmem_cache_free | | | | | --0.75%--obj_cgroup_uncharge | | refill_obj_stock | | | --0.88%--run_rebalance_domains | | | --0.83%--rebalance_domains | | | --0.66%--load_balance | --2.09%--__sysvec_apic_timer_interrupt | --1.88%--hrtimer_interrupt | |--0.86%--tick_program_event | | | --0.83%--clockevents_program_event | | | --0.80%--native_apic_mem_write | --0.83%--__hrtimer_run_queues | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 5.75% 0.80% bin_sysbm [kernel.kallsyms] [k] inode_permission | |--4.95%--inode_permission | | | |--3.89%--kernfs_iop_permission | | | | | |--1.52%--down_read | | | | | |--1.31%--kernfs_refresh_inode | | | | | | | --1.14%--_raw_spin_lock | | | native_queued_spin_lock_slowpath | | | | | --0.68%--generic_permission | | | --0.80%--up_read | --0.80%--0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat link_path_walk.part.0 inode_permission 5.46% 0.21% bin_sysbm [kernel.kallsyms] [k] kernfs_put_open_node.isra.0 | --5.25%--kernfs_put_open_node.isra.0 | --5.19%--mutex_lock | --5.01%--__mutex_lock_slowpath | --4.88%--__mutex_lock.isra.0 | --4.57%--osq_lock 4.24% 0.00% bin_sysbm [kernel.kallsyms] [k] lookup_fast | ---lookup_fast | |--1.69%--__d_lookup | | | --1.64%--_raw_spin_lock | native_queued_spin_lock_slowpath | |--1.31%--kernfs_dop_revalidate | | | --1.22%--down_read | --0.72%--_raw_spin_lock 4.18% 0.36% bin_sysbm [kernel.kallsyms] [k] do_dentry_open | --3.82%--do_dentry_open | --3.21%--kernfs_fop_open | --2.50%--mutex_lock | --2.18%--__mutex_lock_slowpath | --2.10%--__mutex_lock.isra.0 | --1.78%--osq_lock 4.18% 0.00% bin_sysbm [kernel.kallsyms] [k] vfs_open | ---vfs_open do_dentry_open | --3.21%--kernfs_fop_open | --2.50%--mutex_lock | --2.18%--__mutex_lock_slowpath | --2.10%--__mutex_lock.isra.0 | --1.78%--osq_lock 4.05% 0.00% swapper [kernel.kallsyms] [k] irq_exit_rcu | ---irq_exit_rcu | --4.01%--__softirqentry_text_start | |--3.11%--rcu_core_si | | | --3.03%--rcu_core | | | --3.00%--file_free_rcu | | | --1.63%--kmem_cache_free | | | --0.75%--obj_cgroup_uncharge | refill_obj_stock | --0.89%--run_rebalance_domains | --0.83%--rebalance_domains | --0.66%--load_balance 4.01% 0.00% swapper [kernel.kallsyms] [k] __softirqentry_text_start | --4.01%--__softirqentry_text_start | |--3.11%--rcu_core_si | | | --3.03%--rcu_core | | | --3.00%--file_free_rcu | | | --1.63%--kmem_cache_free | | | --0.75%--obj_cgroup_uncharge | refill_obj_stock | --0.89%--run_rebalance_domains | --0.83%--rebalance_domains | --0.66%--load_balance 3.99% 0.18% bin_sysbm [kernel.kallsyms] [k] kernfs_iop_permission | --3.81%--kernfs_iop_permission | |--1.52%--down_read | |--1.31%--kernfs_refresh_inode | | | --1.14%--_raw_spin_lock | native_queued_spin_lock_slowpath | --0.68%--generic_permission 3.83% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520d736c | ---0x7f88520d736c entry_SYSCALL_64_after_hwframe | --3.78%--do_syscall_64 __x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.83% 0.05% bin_sysbm [kernel.kallsyms] [k] __x64_sys_read | --3.78%--__x64_sys_read ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.78% 0.00% bin_sysbm [kernel.kallsyms] [k] ksys_read | ---ksys_read | --3.62%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.62% 0.07% bin_sysbm [kernel.kallsyms] [k] vfs_read | --3.55%--vfs_read | --3.15%--new_sync_read | --3.02%--kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.49% 0.07% bin_sysbm [kernel.kallsyms] [k] walk_component | --3.42%--walk_component | --3.04%--lookup_fast | |--1.02%--kernfs_dop_revalidate | | | --0.94%--down_read | |--0.99%--__d_lookup | _raw_spin_lock | native_queued_spin_lock_slowpath | --0.59%--_raw_spin_lock 3.21% 0.00% bin_sysbm [kernel.kallsyms] [k] kernfs_fop_open | ---kernfs_fop_open | --2.50%--mutex_lock | --2.18%--__mutex_lock_slowpath | --2.10%--__mutex_lock.isra.0 | --1.78%--osq_lock 3.15% 0.13% bin_sysbm [kernel.kallsyms] [k] new_sync_read | --3.02%--new_sync_read kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.11% 0.00% swapper [kernel.kallsyms] [k] rcu_core_si | ---rcu_core_si | --3.03%--rcu_core | --3.00%--file_free_rcu | --1.63%--kmem_cache_free | --0.75%--obj_cgroup_uncharge refill_obj_stock 3.03% 0.00% swapper [kernel.kallsyms] [k] rcu_core | --3.02%--rcu_core | --3.00%--file_free_rcu | --1.63%--kmem_cache_free | --0.75%--obj_cgroup_uncharge refill_obj_stock 3.02% 0.00% bin_sysbm [kernel.kallsyms] [k] kernfs_fop_read_iter | ---kernfs_fop_read_iter | --2.87%--seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 3.00% 1.37% swapper [kernel.kallsyms] [k] file_free_rcu | |--1.63%--file_free_rcu | | | --1.63%--kmem_cache_free | | | --0.75%--obj_cgroup_uncharge | refill_obj_stock | --1.37%--secondary_startup_64_no_verify start_secondary cpu_startup_entry do_idle call_cpuidle cpuidle_enter cpuidle_enter_state asm_sysvec_apic_timer_interrupt sysvec_apic_timer_interrupt irq_exit_rcu __softirqentry_text_start rcu_core_si rcu_core file_free_rcu 2.87% 0.00% bin_sysbm [kernel.kallsyms] [k] seq_read_iter | ---seq_read_iter | --1.74%--kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 2.74% 2.72% bin_sysbm [kernel.kallsyms] [k] down_read | --2.72%--0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat | --2.11%--link_path_walk.part.0 | |--1.17%--inode_permission | kernfs_iop_permission | down_read | --0.94%--walk_component lookup_fast kernfs_dop_revalidate down_read 2.09% 0.00% swapper [kernel.kallsyms] [k] __sysvec_apic_timer_interrupt | ---__sysvec_apic_timer_interrupt | --1.88%--hrtimer_interrupt | |--0.86%--tick_program_event | | | --0.83%--clockevents_program_event | | | --0.80%--native_apic_mem_write | --0.83%--__hrtimer_run_queues | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 2.03% 0.50% bin_sysbm [kernel.kallsyms] [k] refill_obj_stock | --1.53%--refill_obj_stock drain_obj_stock.isra.0 | --0.99%--__memcg_kmem_uncharge | --0.84%--page_counter_uncharge | --0.76%--page_counter_cancel 1.88% 0.00% swapper [kernel.kallsyms] [k] hrtimer_interrupt | --1.88%--hrtimer_interrupt | |--0.86%--tick_program_event | | | --0.83%--clockevents_program_event | | | --0.80%--native_apic_mem_write | --0.83%--__hrtimer_run_queues | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 1.88% 0.42% bin_sysbm [kernel.kallsyms] [k] __alloc_file | --1.46%--__alloc_file | --1.09%--kmem_cache_alloc 1.88% 0.00% bin_sysbm [kernel.kallsyms] [k] alloc_empty_file | ---alloc_empty_file __alloc_file | --1.09%--kmem_cache_alloc 1.74% 0.00% bin_sysbm [kernel.kallsyms] [k] kvmalloc_node | ---kvmalloc_node | --1.59%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 1.70% 0.08% bin_sysbm [kernel.kallsyms] [k] obj_cgroup_charge | --1.62%--obj_cgroup_charge | |--0.83%--refill_obj_stock | drain_obj_stock.isra.0 | --0.79%--__memcg_kmem_charge | --0.65%--page_counter_try_charge 1.69% 0.05% bin_sysbm [kernel.kallsyms] [k] __d_lookup | --1.64%--__d_lookup _raw_spin_lock native_queued_spin_lock_slowpath 1.63% 0.68% swapper [kernel.kallsyms] [k] kmem_cache_free | |--0.94%--kmem_cache_free | | | --0.75%--obj_cgroup_uncharge | refill_obj_stock | --0.68%--secondary_startup_64_no_verify start_secondary cpu_startup_entry do_idle call_cpuidle cpuidle_enter cpuidle_enter_state asm_sysvec_apic_timer_interrupt sysvec_apic_timer_interrupt irq_exit_rcu __softirqentry_text_start rcu_core_si rcu_core file_free_rcu kmem_cache_free 1.59% 0.13% bin_sysbm [kernel.kallsyms] [k] __kmalloc_node | --1.46%--__kmalloc_node | --1.32%--obj_cgroup_charge | --0.83%--refill_obj_stock drain_obj_stock.isra.0 1.53% 0.02% swapper [kernel.kallsyms] [k] acpi_idle_enter | --1.51%--acpi_idle_enter acpi_idle_do_entry 1.53% 0.54% bin_sysbm [kernel.kallsyms] [k] drain_obj_stock.isra.0 | |--0.99%--drain_obj_stock.isra.0 | __memcg_kmem_uncharge | | | --0.84%--page_counter_uncharge | | | --0.76%--page_counter_cancel | --0.54%--0x7f88520cc609 0x56303487c721 1.51% 1.51% swapper [kernel.kallsyms] [k] acpi_idle_do_entry | --1.51%--secondary_startup_64_no_verify start_secondary cpu_startup_entry do_idle call_cpuidle cpuidle_enter cpuidle_enter_state acpi_idle_enter acpi_idle_do_entry 1.43% 0.34% bin_sysbm [kernel.kallsyms] [k] kmem_cache_alloc | --1.09%--kmem_cache_alloc 1.36% 0.00% bin_sysbm [kernel.kallsyms] [k] seq_release | ---seq_release | --1.10%--kvfree kfree | --1.02%--obj_cgroup_uncharge refill_obj_stock | --0.67%--drain_obj_stock.isra.0 | --0.51%--__memcg_kmem_uncharge 1.35% 0.07% bin_sysbm [kernel.kallsyms] [k] may_open | --1.27%--may_open inode_permission | --1.05%--kernfs_iop_permission | --0.64%--kernfs_refresh_inode | --0.56%--_raw_spin_lock native_queued_spin_lock_slowpath 1.31% 0.08% bin_sysbm [kernel.kallsyms] [k] kernfs_dop_revalidate | --1.22%--kernfs_dop_revalidate down_read 1.31% 0.16% bin_sysbm [kernel.kallsyms] [k] kernfs_refresh_inode | --1.14%--kernfs_refresh_inode _raw_spin_lock native_queued_spin_lock_slowpath 1.20% 0.00% bin_sysbm [kernel.kallsyms] [k] obj_cgroup_uncharge | ---obj_cgroup_uncharge refill_obj_stock | --0.70%--drain_obj_stock.isra.0 | --0.54%--__memcg_kmem_uncharge 1.18% 0.16% bin_sysbm [kernel.kallsyms] [k] kfree | --1.02%--kfree obj_cgroup_uncharge refill_obj_stock | --0.67%--drain_obj_stock.isra.0 | --0.51%--__memcg_kmem_uncharge 1.10% 0.00% bin_sysbm [kernel.kallsyms] [k] kvfree | ---kvfree kfree | --1.02%--obj_cgroup_uncharge refill_obj_stock | --0.67%--drain_obj_stock.isra.0 | --0.51%--__memcg_kmem_uncharge 1.09% 0.00% bin_sysbm [kernel.kallsyms] [k] dput | ---dput | --1.01%--_raw_spin_lock native_queued_spin_lock_slowpath 1.02% 1.02% swapper [kernel.kallsyms] [k] native_apic_mem_write | ---secondary_startup_64_no_verify | --1.01%--start_secondary cpu_startup_entry do_idle | --1.00%--call_cpuidle cpuidle_enter cpuidle_enter_state asm_sysvec_apic_timer_interrupt sysvec_apic_timer_interrupt __sysvec_apic_timer_interrupt | --0.79%--hrtimer_interrupt tick_program_event clockevents_program_event native_apic_mem_write 0.99% 0.00% bin_sysbm [kernel.kallsyms] [k] __memcg_kmem_uncharge | ---__memcg_kmem_uncharge | --0.84%--page_counter_uncharge | --0.76%--page_counter_cancel 0.96% 0.96% bin_sysbm [kernel.kallsyms] [k] up_read | ---0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat | --0.65%--link_path_walk.part.0 | --0.57%--inode_permission up_read 0.92% 0.00% bin_sysbm [kernel.kallsyms] [k] page_counter_uncharge | ---page_counter_uncharge | --0.84%--page_counter_cancel 0.89% 0.00% swapper [kernel.kallsyms] [k] run_rebalance_domains | ---run_rebalance_domains | --0.83%--rebalance_domains | --0.66%--load_balance 0.88% 0.01% swapper [kernel.kallsyms] [k] tick_program_event | --0.86%--tick_program_event | --0.85%--clockevents_program_event | --0.82%--native_apic_mem_write 0.85% 0.00% swapper [kernel.kallsyms] [k] clockevents_program_event | --0.85%--clockevents_program_event | --0.82%--native_apic_mem_write 0.84% 0.84% bin_sysbm [kernel.kallsyms] [k] page_counter_cancel | ---0x7f88520cc609 0x56303487c721 0.83% 0.16% swapper [kernel.kallsyms] [k] rebalance_domains | --0.67%--rebalance_domains | --0.67%--load_balance 0.83% 0.01% swapper [kernel.kallsyms] [k] __hrtimer_run_queues | --0.82%--__hrtimer_run_queues | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 0.82% 0.01% swapper [kernel.kallsyms] [k] tick_sched_timer | --0.81%--tick_sched_timer | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 0.81% 0.81% bin_sysbm [kernel.kallsyms] [k] generic_permission | ---0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat link_path_walk.part.0 inode_permission | --0.68%--kernfs_iop_permission generic_permission 0.79% 0.00% bin_sysbm [kernel.kallsyms] [k] __memcg_kmem_charge | ---__memcg_kmem_charge | --0.65%--page_counter_try_charge 0.75% 0.34% swapper [kernel.kallsyms] [k] refill_obj_stock 0.75% 0.00% swapper [kernel.kallsyms] [k] obj_cgroup_uncharge | ---obj_cgroup_uncharge refill_obj_stock 0.74% 0.01% swapper [kernel.kallsyms] [k] tick_sched_handle.isra.0 | --0.73%--tick_sched_handle.isra.0 | --0.72%--update_process_times 0.74% 0.04% swapper [kernel.kallsyms] [k] update_process_times | --0.70%--update_process_times 0.73% 0.55% bin_sysbm [kernel.kallsyms] [k] kmem_cache_free 0.73% 0.73% bin_sysbm [kernel.kallsyms] [k] page_counter_try_charge 0.67% 0.23% swapper [kernel.kallsyms] [k] load_balance 0.62% 0.62% bin_sysbm [kernel.kallsyms] [k] memset 0.60% 0.03% bin_sysbm [kernel.kallsyms] [k] step_into | --0.57%--step_into 0.51% 0.51% bin_sysbm [kernel.kallsyms] [k] lockref_put_return | ---0x7379732f73656369 0x7f88520d7ad4 entry_SYSCALL_64_after_hwframe do_syscall_64 __x64_sys_openat do_sys_open do_sys_openat2 do_filp_open path_openat 0.47% 0.00% bin_sysbm [kernel.kallsyms] [k] putname 0.46% 0.46% bin_sysbm [kernel.kallsyms] [k] get_obj_cgroup_from_current 0.44% 0.02% swapper [kernel.kallsyms] [k] scheduler_tick 0.44% 0.02% swapper [kernel.kallsyms] [k] find_busiest_group 0.44% 0.44% bin_sysbm [kernel.kallsyms] [k] kernfs_put_active 0.42% 0.12% bin_sysbm [kernel.kallsyms] [k] kernfs_seq_show 0.42% 0.23% swapper [kernel.kallsyms] [k] update_sd_lb_stats.constprop.0 0.42% 0.00% swapper [kernel.kallsyms] [k] perf_event_task_tick 0.41% 0.00% swapper [kernel.kallsyms] [k] amd_pmu_disable_all 0.41% 0.00% swapper [kernel.kallsyms] [k] perf_pmu_disable.part.0 0.41% 0.00% swapper [kernel.kallsyms] [k] x86_pmu_disable 0.40% 0.24% swapper [kernel.kallsyms] [k] drain_obj_stock.isra.0 0.40% 0.11% bin_sysbm [kernel.kallsyms] [k] rw_verify_area 0.39% 0.29% bin_sysbm [kernel.kallsyms] [k] lockref_get 0.39% 0.00% bin_sysbm [kernel.kallsyms] [k] path_get 0.38% 0.38% bin_sysbm [kernel.kallsyms] [k] kernfs_get_active 0.37% 0.00% bin_sysbm [kernel.kallsyms] [k] kernfs_seq_stop 0.34% 0.02% swapper [kernel.kallsyms] [k] x86_pmu_disable_all 0.34% 0.00% bin_sysbm [kernel.kallsyms] [k] seq_open 0.33% 0.00% bin_sysbm [kernel.kallsyms] [k] terminate_walk 0.33% 0.00% bin_sysbm [kernel.kallsyms] [k] kernfs_seq_start 0.32% 0.32% swapper [kernel.kallsyms] [k] native_read_msr 0.31% 0.31% bin_sysbm [kernel.kallsyms] [k] _raw_spin_lock_irq 0.30% 0.08% bin_sysbm [kernel.kallsyms] [k] sysfs_kf_seq_show 0.30% 0.30% bin_sysbm [kernel.kallsyms] [k] apparmor_file_free_security 0.30% 0.30% bin_sysbm [kernel.kallsyms] [k] mutex_spin_on_owner 0.29% 0.14% bin_sysbm [kernel.kallsyms] [k] security_file_permission 0.27% 0.00% bin_sysbm [kernel.kallsyms] [k] getname 0.27% 0.00% bin_sysbm [kernel.kallsyms] [k] getname_flags 0.27% 0.27% bin_sysbm [kernel.kallsyms] [k] mutex_unlock 0.26% 0.26% bin_sysbm [kernel.kallsyms] [k] __cond_resched 0.24% 0.24% swapper [kernel.kallsyms] [k] rcu_sched_clock_irq 0.24% 0.00% bin_sysbm [kernel.kallsyms] [k] security_file_alloc 0.22% 0.06% bin_sysbm [kernel.kallsyms] [k] dev_attr_show 0.22% 0.22% bin_sysbm [kernel.kallsyms] [k] strcmp 0.22% 0.00% bin_sysbm [kernel.kallsyms] [k] security_file_free 0.22% 0.00% swapper [kernel.kallsyms] [k] cpuidle_select 0.20% 0.14% swapper [kernel.kallsyms] [k] menu_select 0.20% 0.20% bin_sysbm libpthread-2.31.so [.] 0x0000000000014ad4 0.17% 0.17% bin_sysbm [kernel.kallsyms] [k] _find_next_bit.constprop.0 0.17% 0.09% bin_sysbm [kernel.kallsyms] [k] __mod_memcg_lruvec_state 0.16% 0.00% swapper [kernel.kallsyms] [k] __memcg_kmem_uncharge 0.16% 0.00% swapper [kernel.kallsyms] [k] page_counter_uncharge 0.16% 0.16% swapper [kernel.kallsyms] [k] page_counter_cancel 0.16% 0.08% bin_sysbm [kernel.kallsyms] [k] get_page_from_freelist 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] __slab_alloc 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] ___slab_alloc 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] allocate_slab 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] alloc_pages_current 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] __alloc_pages_nodemask 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] core_id_show 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] sysfs_emit 0.16% 0.00% bin_sysbm [kernel.kallsyms] [k] vscnprintf 0.16% 0.16% bin_sysbm libpthread-2.31.so [.] 0x0000000000014003 0.16% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520d7003 0.16% 0.16% swapper [kernel.kallsyms] [k] __slab_free 0.15% 0.15% bin_sysbm [kernel.kallsyms] [k] lockref_get_not_dead 0.15% 0.00% bin_sysbm [kernel.kallsyms] [k] try_to_unlazy 0.15% 0.00% bin_sysbm [kernel.kallsyms] [k] __legitimize_path.isra.0 0.15% 0.00% swapper [kernel.kallsyms] [k] cpumask_next_and 0.15% 0.15% bin_sysbm [kernel.kallsyms] [k] locks_remove_file 0.15% 0.07% bin_sysbm [kernel.kallsyms] [k] refill_stock 0.15% 0.14% bin_sysbm [kernel.kallsyms] [k] security_file_open 0.15% 0.15% bin_sysbm [kernel.kallsyms] [k] __d_lookup_rcu 0.14% 0.00% bin_sysbm [kernel.kallsyms] [k] try_charge 0.14% 0.14% bin_sysbm [kernel.kallsyms] [k] propagate_protected_usage 0.13% 0.13% bin_sysbm [kernel.kallsyms] [k] rcu_all_qs 0.12% 0.12% swapper [kernel.kallsyms] [k] ktime_get 0.11% 0.02% bin_sysbm [kernel.kallsyms] [k] security_task_getsecid 0.11% 0.00% bin_sysbm [kernel.kallsyms] [k] ima_file_check 0.10% 0.02% bin_sysbm [kernel.kallsyms] [k] __check_object_size 0.10% 0.10% swapper [kernel.kallsyms] [k] read_tsc 0.10% 0.00% swapper [kernel.kallsyms] [k] x86_64_start_kernel 0.10% 0.00% swapper [kernel.kallsyms] [k] x86_64_start_reservations 0.10% 0.00% swapper [kernel.kallsyms] [k] start_kernel 0.10% 0.00% swapper [kernel.kallsyms] [k] arch_call_rest_init 0.10% 0.00% swapper [kernel.kallsyms] [k] rest_init 0.10% 0.10% swapper [kernel.kallsyms] [k] find_next_and_bit 0.09% 0.09% bin_sysbm [kernel.kallsyms] [k] aa_get_task_label 0.09% 0.00% bin_sysbm [kernel.kallsyms] [k] apparmor_task_getsecid 0.09% 0.00% bin_sysbm libc-2.31.so [.] 0x00007f8851fd689b 0.09% 0.09% swapper [kernel.kallsyms] [k] ktime_get_update_offsets_now 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] rcu_read_unlock_strict 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] memcpy 0.08% 0.00% bin_sysbm [kernel.kallsyms] [k] drain_stock.isra.0 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] __mod_memcg_state 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] clear_page_rep 0.08% 0.08% migration/91 [kernel.kallsyms] [k] balance_rt 0.08% 0.00% migration/91 [kernel.kallsyms] [k] ret_from_fork 0.08% 0.00% migration/91 [kernel.kallsyms] [k] kthread 0.08% 0.00% migration/91 [kernel.kallsyms] [k] smpboot_thread_fn 0.08% 0.00% migration/91 [kernel.kallsyms] [k] schedule 0.08% 0.08% bin_sysbm bin_sysbm [.] 0x000000000000144c 0.08% 0.00% bin_sysbm bin_sysbm [.] 0x000056303487c44c 0.08% 0.08% bin_sysbm libpthread-2.31.so [.] 0x0000000000014054 0.08% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520d7054 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] mntput_no_expire 0.08% 0.00% bin_sysbm [kernel.kallsyms] [k] mntput 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] security_inode_permission 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] __virt_addr_valid 0.08% 0.00% bin_sysbm [kernel.kallsyms] [k] strncpy_from_user 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] common_file_perm 0.08% 0.00% bin_sysbm [kernel.kallsyms] [k] apparmor_file_permission 0.08% 0.08% swapper [kernel.kallsyms] [k] menu_reflect 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] vsnprintf 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] locks_remove_posix 0.08% 0.00% bin_sysbm [kernel.kallsyms] [k] filp_close 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] osq_unlock 0.08% 0.08% swapper [kernel.kallsyms] [k] rcu_cblist_dequeue 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] kernfs_seq_next 0.08% 0.08% bin_sysbm [kernel.kallsyms] [k] legitimize_root 0.07% 0.07% bin_sysbm [kernel.kallsyms] [k] set_root 0.07% 0.00% bin_sysbm [kernel.kallsyms] [k] path_init 0.07% 0.00% bin_sysbm [kernel.kallsyms] [k] nd_jump_root 0.07% 0.07% swapper [kernel.kallsyms] [k] _find_next_bit.constprop.0 0.07% 0.07% bin_sysbm [kernel.kallsyms] [k] apparmor_file_alloc_security 0.07% 0.07% swapper [kernel.kallsyms] [k] native_write_msr 0.07% 0.07% bin_sysbm [kernel.kallsyms] [k] __fsnotify_parent 0.07% 0.00% bin_sysbm [kernel.kallsyms] [k] schedule 0.07% 0.01% bin_sysbm [kernel.kallsyms] [k] __schedule 0.07% 0.00% bin_sysbm [kernel.kallsyms] [k] __x64_sys_sched_yield 0.06% 0.06% bin_sysbm [kernel.kallsyms] [k] mem_cgroup_from_task 0.06% 0.06% bin_sysbm [kernel.kallsyms] [k] _raw_spin_lock_irqsave 0.06% 0.00% bin_sysbm [kernel.kallsyms] [k] do_sched_yield 0.05% 0.05% bin_sysbm [kernel.kallsyms] [k] make_kuid 0.05% 0.05% swapper [kernel.kallsyms] [k] tick_nohz_next_event 0.05% 0.03% swapper [kernel.kallsyms] [k] update_blocked_averages 0.05% 0.00% swapper [kernel.kallsyms] [k] tick_nohz_get_sleep_length 0.05% 0.01% swapper [kernel.kallsyms] [k] tick_nohz_irq_exit 0.04% 0.04% bin_sysbm [kernel.kallsyms] [k] __lookup_mnt 0.04% 0.01% swapper [kernel.kallsyms] [k] irq_enter_rcu 0.04% 0.04% swapper [kernel.kallsyms] [k] __mod_memcg_state 0.04% 0.04% rcu_sched [kernel.kallsyms] [k] update_nohz_stats 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] ret_from_fork 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] kthread 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] rcu_gp_kthread 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] schedule_timeout 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] schedule 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] __schedule 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] pick_next_task_fair 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] newidle_balance 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] load_balance 0.04% 0.00% rcu_sched [kernel.kallsyms] [k] find_busiest_group 0.04% 0.00% swapper [kernel.kallsyms] [k] asm_sysvec_call_function_single 0.04% 0.00% swapper [kernel.kallsyms] [k] sysvec_call_function_single 0.04% 0.01% bin_sysbm [kernel.kallsyms] [k] pick_next_task_fair 0.03% 0.00% swapper [kernel.kallsyms] [k] sched_clock 0.03% 0.00% swapper [kernel.kallsyms] [k] sched_clock_cpu 0.03% 0.03% swapper [kernel.kallsyms] [k] _raw_spin_lock 0.03% 0.00% swapper [kernel.kallsyms] [k] tick_irq_enter 0.03% 0.03% swapper [kernel.kallsyms] [k] pvclock_clocksource_read 0.03% 0.00% swapper [kernel.kallsyms] [k] kvm_sched_clock_read 0.03% 0.03% swapper [kernel.kallsyms] [k] llist_reverse_order 0.03% 0.00% swapper [kernel.kallsyms] [k] __sysvec_call_function_single 0.03% 0.00% swapper [kernel.kallsyms] [k] generic_smp_call_function_single_interrupt 0.03% 0.00% bin_sysbm [kernel.kallsyms] [k] asm_sysvec_apic_timer_interrupt 0.03% 0.00% bin_sysbm [kernel.kallsyms] [k] sysvec_apic_timer_interrupt 0.02% 0.00% swapper [kernel.kallsyms] [k] arch_cpu_idle_enter 0.02% 0.00% bin_sysbm [kernel.kallsyms] [k] __softirqentry_text_start 0.02% 0.00% bin_sysbm [kernel.kallsyms] [k] irq_exit_rcu 0.02% 0.02% swapper [kernel.kallsyms] [k] error_return 0.02% 0.02% swapper [kernel.kallsyms] [k] tsc_verify_tsc_adjust 0.02% 0.02% swapper [kernel.kallsyms] [k] __update_load_avg_cfs_rq 0.02% 0.00% swapper [kernel.kallsyms] [k] hrtimer_start_range_ns 0.02% 0.00% swapper [kernel.kallsyms] [k] hrtimer_reprogram 0.02% 0.00% bin_sysbm [kernel.kallsyms] [k] load_balance 0.02% 0.00% bin_sysbm [kernel.kallsyms] [k] find_busiest_group 0.02% 0.01% swapper [kernel.kallsyms] [k] update_load_avg 0.02% 0.00% swapper [kernel.kallsyms] [k] note_gp_changes 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] run_rebalance_domains 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] update_sd_lb_stats.constprop.0 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] update_blocked_averages 0.01% 0.00% swapper [kernel.kallsyms] [k] _nohz_idle_balance 0.01% 0.01% swapper [kernel.kallsyms] [k] lapic_next_event 0.01% 0.00% swapper [kernel.kallsyms] [k] sched_clock_idle_sleep_event 0.01% 0.01% kworker/75:1-mm [kernel.kallsyms] [k] __rdgsbase_inactive 0.01% 0.00% swapper [kernel.kallsyms] [k] schedule_idle 0.01% 0.00% swapper [kernel.kallsyms] [k] __schedule 0.01% 0.00% swapper [kernel.kallsyms] [k] tick_nohz_idle_exit 0.01% 0.00% swapper [kernel.kallsyms] [k] __tick_nohz_idle_restart_tick 0.01% 0.01% swapper [kernel.kallsyms] [k] nr_iowait_cpu 0.01% 0.01% swapper [kernel.kallsyms] [k] _raw_spin_lock_irqsave 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] update_curr 0.01% 0.01% bin_sysbm [kernel.kallsyms] [k] update_rq_clock 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] expand_files 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] newidle_balance 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] update_nohz_stats 0.01% 0.01% kworker/79:1-mm [kernel.kallsyms] [k] psi_group_change 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] ret_from_fork 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] kthread 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] worker_thread 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] schedule 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] __schedule 0.01% 0.00% kworker/79:1-mm [kernel.kallsyms] [k] psi_task_switch 0.01% 0.00% swapper [kernel.kallsyms] [k] pick_next_task_fair 0.01% 0.01% swapper [kernel.kallsyms] [k] cpuidle_governor_latency_req 0.01% 0.01% bin_sysbm [kernel.kallsyms] [k] apparmor_file_open 0.01% 0.01% kworker/59:1-mm [kernel.kallsyms] [k] update_sd_lb_stats.constprop.0 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] ret_from_fork 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] kthread 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] worker_thread 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] schedule 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] __schedule 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] pick_next_task_fair 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] newidle_balance 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] load_balance 0.01% 0.00% kworker/59:1-mm [kernel.kallsyms] [k] find_busiest_group 0.01% 0.01% swapper [kernel.kallsyms] [k] __note_gp_changes 0.01% 0.01% swapper [kernel.kallsyms] [k] __remove_hrtimer 0.01% 0.01% swapper [kernel.kallsyms] [k] update_group_capacity 0.01% 0.00% swapper [kernel.kallsyms] [k] update_rq_clock 0.01% 0.01% swapper [kernel.kallsyms] [k] idle_cpu 0.01% 0.01% swapper [kernel.kallsyms] [k] cpuidle_reflect 0.01% 0.01% swapper [kernel.kallsyms] [k] irqentry_exit 0.01% 0.00% swapper [kernel.kallsyms] [k] hrtimer_update_next_event 0.01% 0.00% bin_sysbm libc-2.31.so [.] 0x00007f8851ef80b3 0.01% 0.00% bin_sysbm bin_sysbm [.] 0x000056303487cb61 0.01% 0.00% bin_sysbm bin_sysbm [.] 0x000056303487ca0f 0.01% 0.00% bin_sysbm libpthread-2.31.so [.] 0x00007f88520cd2d3 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] asm_exc_page_fault 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] exc_page_fault 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] do_user_addr_fault 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] handle_mm_fault 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] __handle_mm_fault 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] lru_cache_add_inactive_or_unevictable 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] lru_cache_add 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] __pagevec_lru_add 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] __mod_lruvec_state 0.01% 0.01% swapper [kernel.kallsyms] [k] put_cpu_partial 0.01% 0.01% swapper [kernel.kallsyms] [k] rcu_eqs_enter.constprop.0 0.01% 0.01% swapper [kernel.kallsyms] [k] _raw_spin_trylock 0.01% 0.01% swapper [kernel.kallsyms] [k] get_cpu_device 0.01% 0.01% bin_sysbm [kernel.kallsyms] [k] native_apic_mem_write 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] rebalance_domains 0.01% 0.01% swapper [kernel.kallsyms] [k] __hrtimer_next_event_base 0.01% 0.01% swapper [kernel.kallsyms] [k] tick_check_broadcast_expired 0.01% 0.01% migration/85 [kernel.kallsyms] [k] schedule 0.01% 0.00% migration/85 [kernel.kallsyms] [k] ret_from_fork 0.01% 0.00% migration/85 [kernel.kallsyms] [k] kthread 0.01% 0.01% swapper [kernel.kallsyms] [k] kvm_guest_apic_eoi_write 0.01% 0.01% swapper [kernel.kallsyms] [k] sched_idle_set_state 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] __sysvec_apic_timer_interrupt 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] hrtimer_interrupt 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] tick_program_event 0.01% 0.00% bin_sysbm [kernel.kallsyms] [k] clockevents_program_event 0.01% 0.01% swapper [kernel.kallsyms] [k] tick_nohz_tick_stopped 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_idle_enter 0.00% 0.00% swapper [kernel.kallsyms] [k] tick_nohz_idle_stop_tick 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] clear_buddies 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] pick_next_entity 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_segcblist_ready_cbs 0.00% 0.00% swapper [kernel.kallsyms] [k] get_nohz_timer_target 0.00% 0.00% swapper [kernel.kallsyms] [k] run_timer_softirq 0.00% 0.00% swapper [kernel.kallsyms] [k] __run_timers.part.0 0.00% 0.00% swapper [kernel.kallsyms] [k] call_timer_fn 0.00% 0.00% swapper [kernel.kallsyms] [k] blk_stat_timer_fn 0.00% 0.00% swapper [kernel.kallsyms] [k] wb_timer_fn 0.00% 0.00% swapper [kernel.kallsyms] [k] rwb_arm_timer 0.00% 0.00% swapper [kernel.kallsyms] [k] mod_timer 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] note_gp_changes 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] rcu_core_si 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] rcu_core 0.00% 0.00% swapper [kernel.kallsyms] [k] tick_sched_do_timer 0.00% 0.00% swapper [kernel.kallsyms] [k] tick_do_update_jiffies64 0.00% 0.00% swapper [kernel.kallsyms] [k] update_wall_time 0.00% 0.00% swapper [kernel.kallsyms] [k] timekeeping_advance 0.00% 0.00% swapper [kernel.kallsyms] [k] acpi_processor_ffh_cstate_enter 0.00% 0.00% sshd [kernel.kallsyms] [k] sock_poll 0.00% 0.00% sshd [unknown] [k] 0000000000000000 0.00% 0.00% sshd [unknown] [k] 0x000055a63851e470 0.00% 0.00% sshd libc-2.31.so [.] 0x00007f661ce310da 0.00% 0.00% sshd [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe 0.00% 0.00% sshd [kernel.kallsyms] [k] do_syscall_64 0.00% 0.00% sshd [kernel.kallsyms] [k] __x64_sys_select 0.00% 0.00% sshd [kernel.kallsyms] [k] kern_select 0.00% 0.00% sshd [kernel.kallsyms] [k] core_sys_select 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_dynticks_eqs_enter 0.00% 0.00% swapper [kernel.kallsyms] [k] __msecs_to_jiffies 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] syscall_enter_from_user_mode 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] cpuacct_charge 0.00% 0.00% bin_sysbm libc-2.31.so [.] 0x000000000010589b 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] entry_SYSCALL_64_safe_stack 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] fpregs_assert_state_consistent 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] cgroup_rstat_updated 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] __cgroup_account_cputime 0.00% 0.00% swapper [kernel.kallsyms] [k] update_ts_time_stats 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] update_min_vruntime 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_advance_cbs 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_accelerate_cbs 0.00% 0.00% swapper [kernel.kallsyms] [k] __hrtimer_get_next_event 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] rcu_advance_cbs 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] error_return 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] asm_sysvec_call_function_single 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] sysvec_call_function_single 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] __sysvec_call_function_single 0.00% 0.00% swapper [kernel.kallsyms] [k] pm_qos_read_value 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_segcblist_pend_cbs 0.00% 0.00% swapper [kernel.kallsyms] [k] __bitmap_and 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] update_group_capacity 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] group_balance_cpu 0.00% 0.00% swapper [kernel.kallsyms] [k] enqueue_hrtimer 0.00% 0.00% swapper [kernel.kallsyms] [k] propagate_protected_usage 0.00% 0.00% swapper [kernel.kallsyms] [k] local_touch_nmi 0.00% 0.00% swapper [kernel.kallsyms] [k] timerqueue_add 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] __bitmap_and 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] __update_load_avg_cfs_rq 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_nmi_exit 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_read_unlock_strict 0.00% 0.00% swapper [kernel.kallsyms] [k] rcu_segcblist_accelerate 0.00% 0.00% swapper [kernel.kallsyms] [k] __update_load_avg_se 0.00% 0.00% swapper [kernel.kallsyms] [k] finish_task_switch 0.00% 0.00% swapper [kernel.kallsyms] [k] trigger_load_balance 0.00% 0.00% swapper [kernel.kallsyms] [k] native_send_call_func_single_ipi 0.00% 0.00% swapper [kernel.kallsyms] [k] kick_ilb 0.00% 0.00% swapper [kernel.kallsyms] [k] smp_call_function_single_async 0.00% 0.00% swapper [kernel.kallsyms] [k] generic_exec_single 0.00% 0.00% swapper [kernel.kallsyms] [k] __smp_call_single_queue 0.00% 0.00% bin_sysbm [kernel.kallsyms] [k] ktime_get 0.00% 0.00% swapper [kernel.kallsyms] [k] rb_insert_color 0.00% 0.00% swapper [kernel.kallsyms] [k] run_posix_cpu_timers 0.00% 0.00% swapper [kernel.kallsyms] [k] profile_tick 0.00% 0.00% swapper [kernel.kallsyms] [k] nohz_balance_exit_idle 0.00% 0.00% swapper [kernel.kallsyms] [k] _raw_spin_lock_irq 0.00% 0.00% perf libc-2.31.so [.] 0x00007f4a016440b3 0.00% 0.00% perf perf [.] 0x0000559a782e6b7c 0.00% 0.00% perf perf [.] 0x0000559a783755ff 0.00% 0.00% perf perf [.] 0x0000559a78300622 0.00% 0.00% perf [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe 0.00% 0.00% perf [kernel.kallsyms] [k] do_syscall_64 0.00% 0.00% perf [kernel.kallsyms] [k] asm_sysvec_apic_timer_interrupt 0.00% 0.00% perf [kernel.kallsyms] [k] sysvec_apic_timer_interrupt 0.00% 0.00% perf [kernel.kallsyms] [k] __sysvec_apic_timer_interrupt 0.00% 0.00% perf [kernel.kallsyms] [k] hrtimer_interrupt 0.00% 0.00% perf [kernel.kallsyms] [k] nohz_balance_exit_idle 0.00% 0.00% perf perf [.] 0x0000559a7838aac4 0.00% 0.00% perf libc-2.31.so [.] 0x00007f4a017229cb 0.00% 0.00% perf [kernel.kallsyms] [k] __x64_sys_sched_setaffinity 0.00% 0.00% perf [kernel.kallsyms] [k] sched_setaffinity 0.00% 0.00% perf [kernel.kallsyms] [k] __set_cpus_allowed_ptr 0.00% 0.00% perf [kernel.kallsyms] [k] affine_move_task 0.00% 0.00% perf [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore 0.00% 0.00% perf [kernel.kallsyms] [k] __hrtimer_run_queues 0.00% 0.00% perf [kernel.kallsyms] [k] tick_sched_timer 0.00% 0.00% perf [kernel.kallsyms] [k] tick_sched_handle.isra.0 0.00% 0.00% perf [kernel.kallsyms] [k] update_process_times 0.00% 0.00% perf [kernel.kallsyms] [k] scheduler_tick 0.00% 0.00% perf [kernel.kallsyms] [k] trigger_load_balance 0.00% 0.00% perf perf [.] 0x0000559a7838ac1a 0.00% 0.00% perf libc-2.31.so [.] 0x00007f4a0173450b 0.00% 0.00% perf [kernel.kallsyms] [k] __x64_sys_ioctl 0.00% 0.00% perf [kernel.kallsyms] [k] perf_ioctl 0.00% 0.00% perf [kernel.kallsyms] [k] _perf_ioctl 0.00% 0.00% perf [kernel.kallsyms] [k] generic_exec_single 0.00% 0.00% perf [kernel.kallsyms] [k] perf_event_for_each_child 0.00% 0.00% perf [kernel.kallsyms] [k] _perf_event_enable 0.00% 0.00% perf [kernel.kallsyms] [k] event_function_call 0.00% 0.00% perf [kernel.kallsyms] [k] smp_call_function_single 0.00% 0.00% perf [kernel.kallsyms] [k] native_apic_mem_write 0.00% 0.00% perf [kernel.kallsyms] [k] tick_program_event 0.00% 0.00% perf [kernel.kallsyms] [k] clockevents_program_event 0.00% 0.00% perf [kernel.kallsyms] [k] syscall_exit_to_user_mode 0.00% 0.00% perf [kernel.kallsyms] [k] mutex_unlock 0.00% 0.00% perf [kernel.kallsyms] [k] put_ctx 0.00% 0.00% perf [kernel.kallsyms] [k] __fget_light 0.00% 0.00% perf [kernel.kallsyms] [k] fpregs_assert_state_consistent 0.00% 0.00% perf [kernel.kallsyms] [k] exit_to_user_mode_prepare 0.00% 0.00% perf perf [.] 0x000000000036dac2 0.00% 0.00% perf perf [.] 0x0000559a78491ac2 0.00% 0.00% perf perf [.] 0x0000000000266c33 0.00% 0.00% perf perf [.] 0x0000559a7838ac33 # Samples: 0 of event 'dummy:HG' # Event count (approx.): 0 # # Children Self Command Shared Object Symbol # ........ ........ ....... ............. ...... # # # (Tip: List events using substring match: perf list <keyword>) # ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement 2021-04-19 7:56 ` [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Fox Chen @ 2021-04-19 12:25 ` Ian Kent 0 siblings, 0 replies; 10+ messages in thread From: Ian Kent @ 2021-04-19 12:25 UTC (permalink / raw) To: Fox Chen Cc: Greg Kroah-Hartman, Tejun Heo, Brice Goglin, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List, linux-fsdevel On Mon, 2021-04-19 at 15:56 +0800, Fox Chen wrote: > On Fri, Apr 9, 2021 at 9:14 AM Ian Kent <raven@themaw.net> wrote: > > There have been a few instances of contention on the kernfs_mutex > > during > > path walks, a case on very large IBM systems seen by myself, a > > report by > > Brice Goglin and followed up by Fox Chen, and I've since seen a > > couple > > of other reports by CoreOS users. > > > > The common thread is a large number of kernfs path walks leading to > > slowness of path walks due to kernfs_mutex contention. > > > > The problem being that changes to the VFS over some time have > > increased > > it's concurrency capabilities to an extent that kernfs's use of a > > mutex > > is no longer appropriate. There's also an issue of walks for non- > > existent > > paths causing contention if there are quite a few of them which is > > a less > > common problem. > > > > This patch series is relatively straight forward. > > > > All it does is add the ability to take advantage of VFS negative > > dentry > > caching to avoid needless dentry alloc/free cycles for lookups of > > paths > > that don't exit and change the kernfs_mutex to a read/write > > semaphore. > > > > The patch that tried to stay in VFS rcu-walk mode during path walks > > has > > been dropped for two reasons. First, it doesn't actually give very > > much > > improvement and, second, if there's a place where mistakes could go > > unnoticed it would be in that path. This makes the patch series > > simpler > > to review and reduces the likelihood of problems going unnoticed > > and > > popping up later. > > > > The patch to use a revision to identify if a directory has changed > > has > > also been dropped. If the directory has changed the dentry revision > > needs to be updated to avoid subsequent rb tree searches and after > > changing to use a read/write semaphore the update also requires a > > lock. > > But the d_lock is the only lock available at this point which might > > itself be contended. > > > > Changes since v2: > > - actually fix the inode attribute update locking. > > - drop the patch that tried to stay in rcu-walk mode. > > - drop the use a revision to identify if a directory has changed > > patch. > > > > Changes since v1: > > - fix locking in .permission() and .getattr() by re-factoring the > > attribute > > handling code. > > > > --- > > > > Ian Kent (4): > > kernfs: move revalidate to be near lookup > > kernfs: use VFS negative dentry caching > > kernfs: switch kernfs to use an rwsem > > kernfs: use i_lock to protect concurrent inode updates > > > > > > fs/kernfs/dir.c | 240 +++++++++++++++++++++++------ > > -------------- > > fs/kernfs/file.c | 4 - > > fs/kernfs/inode.c | 18 ++- > > fs/kernfs/kernfs-internal.h | 5 + > > fs/kernfs/mount.c | 12 +- > > fs/kernfs/symlink.c | 4 - > > include/linux/kernfs.h | 2 > > 7 files changed, 155 insertions(+), 130 deletions(-) > > > > -- > > > > Hi Ian, > > I tested this patchset with my > benchmark(https://github.com/foxhlchen/sysfs_benchmark) on a 96 CPUs > (aws c5) machine. > > The result was promising: > Before, one open+read+close cycle took 500us without much variation. > With this patch, the fastest one only takes 30us, though the slowest > is still around 100us(due to the spinlock). perf report shows no more > significant mutex contention. Thanks for this Fox. I'll have a look through the data a bit later. For now, I'd like to keep the series as simple as possible. But there shouldn't be a problem reading and comparing those attributes between the kernfs node and the inode without taking the additional lock. So a check could be done and the lock only taken if an update is needed. That may well improve that worst case quite a bit, but as I say, it would need to be a follow up change. Ian ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-04-19 12:31 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-09 1:14 [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Ian Kent 2021-04-09 1:14 ` [PATCH v3 1/4] kernfs: move revalidate to be near lookup Ian Kent 2021-04-09 1:15 ` [PATCH v3 2/4] kernfs: use VFS negative dentry caching Ian Kent 2021-04-09 1:35 ` Al Viro 2021-04-09 8:26 ` Ian Kent 2021-04-09 9:34 ` Ian Kent 2021-04-09 1:15 ` [PATCH v3 3/4] kernfs: switch kernfs to use an rwsem Ian Kent 2021-04-09 1:15 ` [PATCH v3 4/4] kernfs: use i_lock to protect concurrent inode updates Ian Kent 2021-04-19 7:56 ` [PATCH v3 0/4] kernfs: proposed locking and concurrency improvement Fox Chen 2021-04-19 12:25 ` Ian Kent
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).