* [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; 12+ 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] 12+ 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 3:39 ` kernel test robot 2021-04-09 1:15 ` [PATCH v3 2/4] kernfs: use VFS negative dentry caching Ian Kent ` (3 subsequent siblings) 4 siblings, 1 reply; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ messages in thread
* Re: [PATCH v3 1/4] kernfs: move revalidate to be near lookup 2021-04-09 1:14 ` [PATCH v3 1/4] kernfs: move revalidate to be near lookup Ian Kent @ 2021-04-09 3:39 ` kernel test robot 0 siblings, 0 replies; 12+ messages in thread From: kernel test robot @ 2021-04-09 3:39 UTC (permalink / raw) To: Ian Kent, Greg Kroah-Hartman, Tejun Heo Cc: kbuild-all, Brice Goglin, Fox Chen, Rick Lindsley, Al Viro, Miklos Szeredi, David Howells, Eric Sandeen, Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 3396 bytes --] Hi Ian, I love your patch! Yet something to improve: [auto build test ERROR on driver-core/driver-core-testing] [also build test ERROR on v5.12-rc6 next-20210408] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git c2f3f755f5c717f3621b33ef06d974b9cec4a104 config: arm-defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/a3608518cc551301c1c33dbf6976c360ea82a95c git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 git checkout a3608518cc551301c1c33dbf6976c360ea82a95c # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Note: the linux-review/Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 HEAD b2217b0abf0a4518541559173ff04138a6e4f083 builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): fs/kernfs/dir.c: In function 'kernfs_dop_revalidate': >> fs/kernfs/dir.c:1048:7: error: implicit declaration of function 'kernfs_active_read'; did you mean 'kernfs_active'? [-Werror=implicit-function-declaration] 1048 | if (!kernfs_active_read(kn)) | ^~~~~~~~~~~~~~~~~~ | kernfs_active cc1: some warnings being treated as errors vim +1048 fs/kernfs/dir.c 1032 1033 static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) 1034 { 1035 struct kernfs_node *kn; 1036 1037 if (flags & LOOKUP_RCU) 1038 return -ECHILD; 1039 1040 /* Always perform fresh lookup for negatives */ 1041 if (d_really_is_negative(dentry)) 1042 goto out_bad_unlocked; 1043 1044 kn = kernfs_dentry_node(dentry); 1045 mutex_lock(&kernfs_mutex); 1046 1047 /* The kernfs node has been deactivated */ > 1048 if (!kernfs_active_read(kn)) 1049 goto out_bad; 1050 1051 /* The kernfs node has been moved? */ 1052 if (kernfs_dentry_node(dentry->d_parent) != kn->parent) 1053 goto out_bad; 1054 1055 /* The kernfs node has been renamed */ 1056 if (strcmp(dentry->d_name.name, kn->name) != 0) 1057 goto out_bad; 1058 1059 /* The kernfs node has been moved to a different namespace */ 1060 if (kn->parent && kernfs_ns_enabled(kn->parent) && 1061 kernfs_info(dentry->d_sb)->ns != kn->ns) 1062 goto out_bad; 1063 1064 mutex_unlock(&kernfs_mutex); 1065 return 1; 1066 out_bad: 1067 mutex_unlock(&kernfs_mutex); 1068 out_bad_unlocked: 1069 return 0; 1070 } 1071 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 54352 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/4] kernfs: move revalidate to be near lookup @ 2021-04-09 3:39 ` kernel test robot 0 siblings, 0 replies; 12+ messages in thread From: kernel test robot @ 2021-04-09 3:39 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 3484 bytes --] Hi Ian, I love your patch! Yet something to improve: [auto build test ERROR on driver-core/driver-core-testing] [also build test ERROR on v5.12-rc6 next-20210408] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git c2f3f755f5c717f3621b33ef06d974b9cec4a104 config: arm-defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/a3608518cc551301c1c33dbf6976c360ea82a95c git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 git checkout a3608518cc551301c1c33dbf6976c360ea82a95c # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Note: the linux-review/Ian-Kent/kernfs-proposed-locking-and-concurrency-improvement/20210409-091821 HEAD b2217b0abf0a4518541559173ff04138a6e4f083 builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): fs/kernfs/dir.c: In function 'kernfs_dop_revalidate': >> fs/kernfs/dir.c:1048:7: error: implicit declaration of function 'kernfs_active_read'; did you mean 'kernfs_active'? [-Werror=implicit-function-declaration] 1048 | if (!kernfs_active_read(kn)) | ^~~~~~~~~~~~~~~~~~ | kernfs_active cc1: some warnings being treated as errors vim +1048 fs/kernfs/dir.c 1032 1033 static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) 1034 { 1035 struct kernfs_node *kn; 1036 1037 if (flags & LOOKUP_RCU) 1038 return -ECHILD; 1039 1040 /* Always perform fresh lookup for negatives */ 1041 if (d_really_is_negative(dentry)) 1042 goto out_bad_unlocked; 1043 1044 kn = kernfs_dentry_node(dentry); 1045 mutex_lock(&kernfs_mutex); 1046 1047 /* The kernfs node has been deactivated */ > 1048 if (!kernfs_active_read(kn)) 1049 goto out_bad; 1050 1051 /* The kernfs node has been moved? */ 1052 if (kernfs_dentry_node(dentry->d_parent) != kn->parent) 1053 goto out_bad; 1054 1055 /* The kernfs node has been renamed */ 1056 if (strcmp(dentry->d_name.name, kn->name) != 0) 1057 goto out_bad; 1058 1059 /* The kernfs node has been moved to a different namespace */ 1060 if (kn->parent && kernfs_ns_enabled(kn->parent) && 1061 kernfs_info(dentry->d_sb)->ns != kn->ns) 1062 goto out_bad; 1063 1064 mutex_unlock(&kernfs_mutex); 1065 return 1; 1066 out_bad: 1067 mutex_unlock(&kernfs_mutex); 1068 out_bad_unlocked: 1069 return 0; 1070 } 1071 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 54352 bytes --] ^ permalink raw reply [flat|nested] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ messages in thread
end of thread, other threads:[~2021-04-19 12:31 UTC | newest] Thread overview: 12+ 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 3:39 ` kernel test robot 2021-04-09 3:39 ` kernel test robot 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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.