diff mbox series

[1/2] xfs: bound maximum wait time for inodegc work

Message ID 20220524063802.1938505-2-david@fromorbit.com (mailing list archive)
State Superseded
Headers show
Series xfs: non-blocking inodegc pushes | expand

Commit Message

Dave Chinner May 24, 2022, 6:38 a.m. UTC
From: Dave Chinner <dchinner@redhat.com>

Currently inodegc work can sit queued on the per-cpu queue until
the workqueue is either flushed of the queue reaches a depth that
triggers work queuing (and later throttling). This means that we
could queue work that waits for a long time for some other event to
trigger flushing.

Hence instead of just queueing work at a specific depth, use a
delayed work that queues the work at a bound time. We can still
schedule the work immediately at a given depth, but we no long need
to worry about leaving a number of items on the list that won't get
processed until external events prevail.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 fs/xfs/xfs_icache.c | 36 ++++++++++++++++++++++--------------
 fs/xfs/xfs_mount.h  |  2 +-
 fs/xfs/xfs_super.c  |  2 +-
 3 files changed, 24 insertions(+), 16 deletions(-)

Comments

Darrick J. Wong May 24, 2022, 4:54 p.m. UTC | #1
On Tue, May 24, 2022 at 04:38:01PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> Currently inodegc work can sit queued on the per-cpu queue until
> the workqueue is either flushed of the queue reaches a depth that
> triggers work queuing (and later throttling). This means that we
> could queue work that waits for a long time for some other event to
> trigger flushing.
> 
> Hence instead of just queueing work at a specific depth, use a
> delayed work that queues the work at a bound time. We can still
> schedule the work immediately at a given depth, but we no long need

Nit: "no longer need..."

> to worry about leaving a number of items on the list that won't get
> processed until external events prevail.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
>  fs/xfs/xfs_icache.c | 36 ++++++++++++++++++++++--------------
>  fs/xfs/xfs_mount.h  |  2 +-
>  fs/xfs/xfs_super.c  |  2 +-
>  3 files changed, 24 insertions(+), 16 deletions(-)
> 
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 5269354b1b69..786702273621 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -440,7 +440,7 @@ xfs_inodegc_queue_all(
>  	for_each_online_cpu(cpu) {
>  		gc = per_cpu_ptr(mp->m_inodegc, cpu);
>  		if (!llist_empty(&gc->list))
> -			queue_work_on(cpu, mp->m_inodegc_wq, &gc->work);
> +			mod_delayed_work_on(cpu, mp->m_inodegc_wq, &gc->work, 0);
>  	}
>  }
>  
> @@ -1841,8 +1841,8 @@ void
>  xfs_inodegc_worker(
>  	struct work_struct	*work)
>  {
> -	struct xfs_inodegc	*gc = container_of(work, struct xfs_inodegc,
> -							work);
> +	struct xfs_inodegc	*gc = container_of(to_delayed_work(work),
> +						struct xfs_inodegc, work);
>  	struct llist_node	*node = llist_del_all(&gc->list);
>  	struct xfs_inode	*ip, *n;
>  
> @@ -2014,6 +2014,7 @@ xfs_inodegc_queue(
>  	struct xfs_inodegc	*gc;
>  	int			items;
>  	unsigned int		shrinker_hits;
> +	unsigned long		queue_delay = 1;

A default delay of one clock tick, correct?

Just out of curiosity, how does this shake out wrt fstests that do a
thing and then measure free space?

I have a dim recollection of a bug that I found in one of the
preproduction iterations of inodegc back when I used delayed_work to
schedule the background gc.  If memory serves, calling mod_delayed_work
on a delayed_work object that is currently running does /not/ cause the
delayed_work object to be requeued, even if delay==0.

Aha, I found a description in my notes.  I've adapted them to the
current patchset, since in those days inodegc used a radix tree tag
and per-AG workers instead of a locklesslist and per-cpu workers.
If the following occurs:

Worker 1			Thread 2

xfs_inodegc_worker
<starts up>
node = llist_del_all()
<start processing inodes>
<block on something, yield>
				xfs_irele
				xfs_inode_mark_reclaimable
				llist_add
				mod_delayed_work()
				<exit>
<process the rest of nodelist>
return

Then at the end of this sequence, we'll end up with thread 2's inode
queued to the gc list but the delayed work is /not/ queued.  That inode
remains on the gc list (and unprocessed) until someone comes along to
push that CPU's gc list, whether it's a statfs, or an unmount, or
someone hitting ENOSPC and triggering blockgc.

I observed this bug while digging into online repair occasionally
stalling for a long time or erroring out during inode scans.  If you'll
recall, earlier inodegc iterations allowed iget to recycle inodes that
were queued for inactivation, but later iterations didn't, so it became
the responsibility of the online repair's inode scanner to push the
inodegc workers when iget found an inode that was queued for
inactivation.

(The current online repair inode scanner is smarter in the sense that it
will try inodegc_flush a few times before backing out to userspace, and
if it does, xfs_scrub will generally requeue the entire scrub
operation.)

--D

>  
>  	trace_xfs_inode_set_need_inactive(ip);
>  	spin_lock(&ip->i_flags_lock);
> @@ -2025,19 +2026,26 @@ xfs_inodegc_queue(
>  	items = READ_ONCE(gc->items);
>  	WRITE_ONCE(gc->items, items + 1);
>  	shrinker_hits = READ_ONCE(gc->shrinker_hits);
> -	put_cpu_ptr(gc);
>  
> -	if (!xfs_is_inodegc_enabled(mp))
> +	/*
> +	 * We queue the work while holding the current CPU so that the work
> +	 * is scheduled to run on this CPU.
> +	 */
> +	if (!xfs_is_inodegc_enabled(mp)) {
> +		put_cpu_ptr(gc);
>  		return;
> -
> -	if (xfs_inodegc_want_queue_work(ip, items)) {
> -		trace_xfs_inodegc_queue(mp, __return_address);
> -		queue_work(mp->m_inodegc_wq, &gc->work);
>  	}
>  
> +	if (xfs_inodegc_want_queue_work(ip, items))
> +		queue_delay = 0;
> +
> +	trace_xfs_inodegc_queue(mp, __return_address);
> +	mod_delayed_work(mp->m_inodegc_wq, &gc->work, queue_delay);
> +	put_cpu_ptr(gc);
> +
>  	if (xfs_inodegc_want_flush_work(ip, items, shrinker_hits)) {
>  		trace_xfs_inodegc_throttle(mp, __return_address);
> -		flush_work(&gc->work);
> +		flush_delayed_work(&gc->work);
>  	}
>  }
>  
> @@ -2054,7 +2062,7 @@ xfs_inodegc_cpu_dead(
>  	unsigned int		count = 0;
>  
>  	dead_gc = per_cpu_ptr(mp->m_inodegc, dead_cpu);
> -	cancel_work_sync(&dead_gc->work);
> +	cancel_delayed_work_sync(&dead_gc->work);
>  
>  	if (llist_empty(&dead_gc->list))
>  		return;
> @@ -2073,12 +2081,12 @@ xfs_inodegc_cpu_dead(
>  	llist_add_batch(first, last, &gc->list);
>  	count += READ_ONCE(gc->items);
>  	WRITE_ONCE(gc->items, count);
> -	put_cpu_ptr(gc);
>  
>  	if (xfs_is_inodegc_enabled(mp)) {
>  		trace_xfs_inodegc_queue(mp, __return_address);
> -		queue_work(mp->m_inodegc_wq, &gc->work);
> +		mod_delayed_work(mp->m_inodegc_wq, &gc->work, 0);
>  	}
> +	put_cpu_ptr(gc);
>  }
>  
>  /*
> @@ -2173,7 +2181,7 @@ xfs_inodegc_shrinker_scan(
>  			unsigned int	h = READ_ONCE(gc->shrinker_hits);
>  
>  			WRITE_ONCE(gc->shrinker_hits, h + 1);
> -			queue_work_on(cpu, mp->m_inodegc_wq, &gc->work);
> +			mod_delayed_work_on(cpu, mp->m_inodegc_wq, &gc->work, 0);
>  			no_items = false;
>  		}
>  	}
> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> index 8c42786e4942..377c5e59f6a0 100644
> --- a/fs/xfs/xfs_mount.h
> +++ b/fs/xfs/xfs_mount.h
> @@ -61,7 +61,7 @@ struct xfs_error_cfg {
>   */
>  struct xfs_inodegc {
>  	struct llist_head	list;
> -	struct work_struct	work;
> +	struct delayed_work	work;
>  
>  	/* approximate count of inodes in the list */
>  	unsigned int		items;
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 51ce127a0cc6..62f6b97355a2 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -1073,7 +1073,7 @@ xfs_inodegc_init_percpu(
>  		gc = per_cpu_ptr(mp->m_inodegc, cpu);
>  		init_llist_head(&gc->list);
>  		gc->items = 0;
> -		INIT_WORK(&gc->work, xfs_inodegc_worker);
> +		INIT_DELAYED_WORK(&gc->work, xfs_inodegc_worker);
>  	}
>  	return 0;
>  }
> -- 
> 2.35.1
>
Dave Chinner May 24, 2022, 11:03 p.m. UTC | #2
On Tue, May 24, 2022 at 09:54:51AM -0700, Darrick J. Wong wrote:
> On Tue, May 24, 2022 at 04:38:01PM +1000, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> > 
> > Currently inodegc work can sit queued on the per-cpu queue until
> > the workqueue is either flushed of the queue reaches a depth that
> > triggers work queuing (and later throttling). This means that we
> > could queue work that waits for a long time for some other event to
> > trigger flushing.
> > 
> > Hence instead of just queueing work at a specific depth, use a
> > delayed work that queues the work at a bound time. We can still
> > schedule the work immediately at a given depth, but we no long need
> 
> Nit: "no longer need..."
> 
> > to worry about leaving a number of items on the list that won't get
> > processed until external events prevail.
> > 
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > ---
> >  fs/xfs/xfs_icache.c | 36 ++++++++++++++++++++++--------------
> >  fs/xfs/xfs_mount.h  |  2 +-
> >  fs/xfs/xfs_super.c  |  2 +-
> >  3 files changed, 24 insertions(+), 16 deletions(-)
> > 
> > diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> > index 5269354b1b69..786702273621 100644
> > --- a/fs/xfs/xfs_icache.c
> > +++ b/fs/xfs/xfs_icache.c
> > @@ -440,7 +440,7 @@ xfs_inodegc_queue_all(
> >  	for_each_online_cpu(cpu) {
> >  		gc = per_cpu_ptr(mp->m_inodegc, cpu);
> >  		if (!llist_empty(&gc->list))
> > -			queue_work_on(cpu, mp->m_inodegc_wq, &gc->work);
> > +			mod_delayed_work_on(cpu, mp->m_inodegc_wq, &gc->work, 0);
> >  	}
> >  }
> >  
> > @@ -1841,8 +1841,8 @@ void
> >  xfs_inodegc_worker(
> >  	struct work_struct	*work)
> >  {
> > -	struct xfs_inodegc	*gc = container_of(work, struct xfs_inodegc,
> > -							work);
> > +	struct xfs_inodegc	*gc = container_of(to_delayed_work(work),
> > +						struct xfs_inodegc, work);
> >  	struct llist_node	*node = llist_del_all(&gc->list);
> >  	struct xfs_inode	*ip, *n;
> >  
> > @@ -2014,6 +2014,7 @@ xfs_inodegc_queue(
> >  	struct xfs_inodegc	*gc;
> >  	int			items;
> >  	unsigned int		shrinker_hits;
> > +	unsigned long		queue_delay = 1;
> 
> A default delay of one clock tick, correct?
> 
> Just out of curiosity, how does this shake out wrt fstests that do a
> thing and then measure free space?

No regressions on a 5.18+for-next kernel on the two machines (one
ramdisk, one SSD) I ran it on yesterday. The runs were clean, which
is why I posted it for comments.

> I have a dim recollection of a bug that I found in one of the
> preproduction iterations of inodegc back when I used delayed_work to
> schedule the background gc.  If memory serves, calling mod_delayed_work
> on a delayed_work object that is currently running does /not/ cause the
> delayed_work object to be requeued, even if delay==0.

I don't think that is correct - I actually went through the code to
check this because I wanted to be certain that it behaved the way I
needed it to. Indeed, the documented behaviour of
mod_delayed_work_on() is:

 * If @dwork is idle, equivalent to queue_delayed_work_on(); otherwise,
 * modify @dwork's timer so that it expires after @delay.  If @delay is
 * zero, @work is guaranteed to be scheduled immediately regardless of its
 * current state.

In terms of the implementation, try_to_grab_pending() will grab the
delayed work and set/steal the WORK_STRUCT_PENDING_BIT, and
mod_delayed_work_on() will loop until it owns the bit or the dwork
is cancelled. Once it owns the PENDING bit, it will call
__queue_delayed_work(), which either queues the work immediately
(delay = 0) or sets up a timer to expire in delay ticks. 

The PENDING bit is cleared by the kworker thread before it calls the
work->current_func() to execute the work, so if the work is
currenlty running, try_to_grab_pending() will be able to set/steal
the WORK_STRUCT_PENDING_BIT without issues, and so even if the work
is currently running, we should be able queue it again via
mod_delayed_work_on().

So, AFAICT, the comment and behaviour match, and mod_delayed_work()
will result in queuing of the dwork even if it is currently running.

> Aha, I found a description in my notes.  I've adapted them to the
> current patchset, since in those days inodegc used a radix tree tag
> and per-AG workers instead of a locklesslist and per-cpu workers.
> If the following occurs:
> 
> Worker 1			Thread 2
> 
> xfs_inodegc_worker
> <starts up>
> node = llist_del_all()
> <start processing inodes>
> <block on something, yield>
> 				xfs_irele
> 				xfs_inode_mark_reclaimable
> 				llist_add
> 				mod_delayed_work()
> 				<exit>
> <process the rest of nodelist>
> return
> 
> Then at the end of this sequence, we'll end up with thread 2's inode
> queued to the gc list but the delayed work is /not/ queued.  That inode
> remains on the gc list (and unprocessed) until someone comes along to
> push that CPU's gc list, whether it's a statfs, or an unmount, or
> someone hitting ENOSPC and triggering blockgc.

Right, if mod_delayed_work() didn't queue the work then this would
be an issue, but AFAICT mod_delayed_work() will requeue in this
case and it will not get hung up in this case. I certainly haven't
seen any evidence that it's not working as I expected (so far).

Cheers,

Dave.
kernel test robot May 26, 2022, 9:05 a.m. UTC | #3
Greeting,

FYI, we noticed a 19.8% improvement of aim7.jobs-per-min due to commit:


commit: 55a3d6bbc5cc34a8e5aeb7ea5645a72cafddef2b ("[PATCH 1/2] xfs: bound maximum wait time for inodegc work")
url: https://github.com/intel-lab-lkp/linux/commits/Dave-Chinner/xfs-non-blocking-inodegc-pushes/20220524-144000
base: https://git.kernel.org/cgit/fs/xfs/xfs-linux.git for-next
patch link: https://lore.kernel.org/linux-xfs/20220524063802.1938505-2-david@fromorbit.com

in testcase: aim7
on test machine: 144 threads 4 sockets Intel(R) Xeon(R) Gold 5318H CPU @ 2.50GHz with 128G memory
with following parameters:

	disk: 1BRD_48G
	fs: xfs
	test: disk_rw
	load: 3000
	cpufreq_governor: performance
	ucode: 0x7002402

test-description: AIM7 is a traditional UNIX system level benchmark suite which is used to test and measure the performance of multiuser system.
test-url: https://sourceforge.net/projects/aimbench/files/aim-suite7/





Details are as below:
-------------------------------------------------------------------------------------------------->


To reproduce:

        git clone https://github.com/intel/lkp-tests.git
        cd lkp-tests
        sudo bin/lkp install job.yaml           # job file is attached in this email
        bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
        sudo bin/lkp run generated-yaml-file

        # if come across any failure that blocks the test,
        # please remove ~/.lkp and /lkp dir to run from a clean state.

=========================================================================================
compiler/cpufreq_governor/disk/fs/kconfig/load/rootfs/tbox_group/test/testcase/ucode:
  gcc-11/performance/1BRD_48G/xfs/x86_64-rhel-8.3/3000/debian-10.4-x86_64-20200603.cgz/lkp-cpl-4sp1/disk_rw/aim7/0x7002402

commit: 
  ab6a8d3f1a ("Merge branch 'guilt/xfs-5.19-misc-3' into xfs-5.19-for-next")
  55a3d6bbc5 ("xfs: bound maximum wait time for inodegc work")

ab6a8d3f1a2a85de 55a3d6bbc5cc34a8e5aeb7ea564 
---------------- --------------------------- 
         %stddev     %change         %stddev
             \          |                \  
    403537           +19.8%     483615        aim7.jobs-per-min
     44.91           -16.7%      37.42        aim7.time.elapsed_time
     44.91           -16.7%      37.42        aim7.time.elapsed_time.max
     26113 ±  2%    +201.4%      78708 ± 16%  aim7.time.involuntary_context_switches
      2848            -2.1%       2787        aim7.time.maximum_resident_set_size
      1036           -35.0%     673.56        aim7.time.system_time
    631532           -31.7%     431436        aim7.time.voluntary_context_switches
     65148           -28.5%      46596 ± 31%  numa-numastat.node3.other_node
 5.487e+09           -12.9%  4.779e+09        cpuidle..time
  12110694           -20.4%    9645343 ± 17%  cpuidle..usage
     82.99            +1.5%      84.25        iostat.cpu.idle
     16.38            -8.7%      14.95        iostat.cpu.system
     24.67 ±  8%     -26.4%      18.17 ±  4%  vmstat.procs.r
     42006           +20.9%      50773        vmstat.system.cs
     26178 ±  2%     -32.4%      17695 ±  4%  meminfo.Active
     26016 ±  2%     -32.6%      17522 ±  4%  meminfo.Active(anon)
     49632 ±  7%     -20.5%      39475 ±  2%  meminfo.Shmem
      1.04 ±  8%      +0.2        1.20 ± 11%  mpstat.cpu.all.irq%
      0.12 ±  5%      +0.0        0.14 ±  9%  mpstat.cpu.all.soft%
     15.86            -1.6       14.29        mpstat.cpu.all.sys%
      0.64            +0.2        0.81 ±  2%  mpstat.cpu.all.usr%
    581.00           -17.4%     480.00        turbostat.Avg_MHz
     18.30            -2.8       15.50 ±  2%  turbostat.Busy%
      3181            -2.4%       3103        turbostat.Bzy_MHz
      0.19 ±  2%     +36.2%       0.26 ±  2%  turbostat.IPC
  14124132           -22.5%   10948641 ± 16%  turbostat.IRQ
    371.48            -1.6%     365.70        turbostat.PkgWatt
    120505 ± 70%     +99.8%     240737 ± 29%  numa-meminfo.node0.AnonPages
    132911 ± 64%     +92.1%     255280 ± 30%  numa-meminfo.node0.AnonPages.max
    132341 ± 60%     +89.9%     251379 ± 28%  numa-meminfo.node0.Inactive(anon)
     14263 ±112%    +105.9%      29369 ± 73%  numa-meminfo.node0.KernelStack
     30681 ± 40%     -41.1%      18067 ± 31%  numa-meminfo.node2.KReclaimable
     30681 ± 40%     -41.1%      18067 ± 31%  numa-meminfo.node2.SReclaimable
     21106 ±  3%     -34.1%      13904 ± 12%  numa-meminfo.node3.Active
     21106 ±  3%     -34.1%      13904 ± 12%  numa-meminfo.node3.Active(anon)
     26276 ± 15%     -29.3%      18581 ± 13%  numa-meminfo.node3.Shmem
     30111 ± 70%    +100.0%      60231 ± 29%  numa-vmstat.node0.nr_anon_pages
     33069 ± 60%     +90.2%      62893 ± 28%  numa-vmstat.node0.nr_inactive_anon
     14242 ±112%    +106.6%      29422 ± 73%  numa-vmstat.node0.nr_kernel_stack
     33069 ± 60%     +90.2%      62892 ± 28%  numa-vmstat.node0.nr_zone_inactive_anon
      7674 ± 40%     -41.1%       4523 ± 32%  numa-vmstat.node2.nr_slab_reclaimable
      5251 ±  3%     -35.6%       3381 ± 12%  numa-vmstat.node3.nr_active_anon
      6583 ± 14%     -30.2%       4597 ± 13%  numa-vmstat.node3.nr_shmem
      5251 ±  3%     -35.6%       3381 ± 12%  numa-vmstat.node3.nr_zone_active_anon
     65140           -28.5%      46596 ± 31%  numa-vmstat.node3.numa_other
      6504 ±  2%     -33.2%       4347 ±  4%  proc-vmstat.nr_active_anon
    270275            -8.2%     248155        proc-vmstat.nr_dirty
    868712            -2.8%     844011        proc-vmstat.nr_file_pages
    270401            -8.2%     248295        proc-vmstat.nr_inactive_file
     12408 ±  7%     -20.4%       9879 ±  3%  proc-vmstat.nr_shmem
     39345            -2.9%      38186        proc-vmstat.nr_slab_reclaimable
    107105            -1.9%     105036        proc-vmstat.nr_slab_unreclaimable
      6504 ±  2%     -33.2%       4347 ±  4%  proc-vmstat.nr_zone_active_anon
    270402            -8.2%     248294        proc-vmstat.nr_zone_inactive_file
    270276            -8.2%     248155        proc-vmstat.nr_zone_write_pending
     11886 ±  3%     -14.5%      10162 ±  4%  proc-vmstat.pgactivate
    578250            -6.5%     540908        proc-vmstat.pgfault
     32358 ±  3%      -6.8%      30168 ±  2%  proc-vmstat.pgreuse
      1585            -1.3%       1564        proc-vmstat.unevictable_pgs_culled
      4.63 ±119%    +185.3%      13.21 ± 83%  perf-stat.i.MPKI
 1.126e+10           +11.6%  1.256e+10        perf-stat.i.branch-instructions
      1.02 ± 57%      +0.9        1.88 ± 56%  perf-stat.i.branch-miss-rate%
  54201742 ±  4%     +29.0%   69896187 ±  5%  perf-stat.i.branch-misses
     36.01 ±  3%      -6.6       29.42 ± 12%  perf-stat.i.cache-miss-rate%
  34680496           +10.2%   38229820 ±  2%  perf-stat.i.cache-misses
  85947764 ± 10%     +38.4%   1.19e+08 ± 14%  perf-stat.i.cache-references
     42770           +21.1%      51798        perf-stat.i.context-switches
 8.358e+10           -18.7%  6.794e+10        perf-stat.i.cpu-cycles
 1.634e+10           +10.4%  1.804e+10        perf-stat.i.dTLB-loads
      0.01 ±150%      +0.0        0.04 ± 73%  perf-stat.i.dTLB-store-miss-rate%
    134798 ± 26%     +46.9%     198054 ± 27%  perf-stat.i.dTLB-store-misses
 8.912e+09           +15.1%  1.026e+10        perf-stat.i.dTLB-stores
  36040275 ±  3%     +24.5%   44863056 ±  4%  perf-stat.i.iTLB-load-misses
 5.647e+10           +11.2%  6.278e+10        perf-stat.i.instructions
      0.61 ±  2%     +24.9%       0.76        perf-stat.i.ipc
      0.58           -18.7%       0.47        perf-stat.i.metric.GHz
    253.65           +12.0%     284.09        perf-stat.i.metric.M/sec
      9922           +11.7%      11084        perf-stat.i.minor-faults
   6990890           +18.7%    8300960 ±  4%  perf-stat.i.node-load-misses
   3326179           +18.7%    3949195        perf-stat.i.node-loads
   3443940           +11.1%    3825016 ±  2%  perf-stat.i.node-store-misses
   7324856           +10.5%    8090736        perf-stat.i.node-stores
      9958           +11.7%      11124        perf-stat.i.page-faults
      1.52 ± 10%     +23.9%       1.88 ± 13%  perf-stat.overall.MPKI
      0.48 ±  4%      +0.1        0.55 ±  4%  perf-stat.overall.branch-miss-rate%
      1.48           -27.0%       1.08        perf-stat.overall.cpi
      2409           -26.3%       1774 ±  3%  perf-stat.overall.cycles-between-cache-misses
     86.34            +1.9       88.25        perf-stat.overall.iTLB-load-miss-rate%
      1568 ±  3%     -10.7%       1400 ±  3%  perf-stat.overall.instructions-per-iTLB-miss
      0.68           +37.0%       0.93        perf-stat.overall.ipc
 1.108e+10           +12.2%  1.243e+10        perf-stat.ps.branch-instructions
  53180193 ±  4%     +29.3%   68763152 ±  4%  perf-stat.ps.branch-misses
  34126941           +10.9%   37833475 ±  2%  perf-stat.ps.cache-misses
  84414160 ± 10%     +38.5%  1.169e+08 ± 13%  perf-stat.ps.cache-references
     42090           +21.9%      51290        perf-stat.ps.context-switches
 8.222e+10           -18.4%   6.71e+10        perf-stat.ps.cpu-cycles
 1.608e+10           +11.1%  1.787e+10        perf-stat.ps.dTLB-loads
    131907 ± 26%     +45.3%     191712 ± 26%  perf-stat.ps.dTLB-store-misses
  8.77e+09           +15.8%  1.016e+10        perf-stat.ps.dTLB-stores
  35474759 ±  3%     +25.3%   44446876 ±  4%  perf-stat.ps.iTLB-load-misses
 5.556e+10           +11.8%  6.214e+10        perf-stat.ps.instructions
      9585            +9.4%      10490        perf-stat.ps.minor-faults
   6879195           +19.6%    8227277 ±  4%  perf-stat.ps.node-load-misses
   3270811           +19.5%    3907209        perf-stat.ps.node-loads
   3389704           +11.8%    3790016 ±  2%  perf-stat.ps.node-store-misses
   7209880           +11.1%    8013315        perf-stat.ps.node-stores
      9619            +9.4%      10528        perf-stat.ps.page-faults
 2.547e+12            -6.7%  2.375e+12        perf-stat.total.instructions
     15.20 ±  5%     -11.9        3.34 ±  4%  perf-profile.calltrace.cycles-pp.osq_lock.rwsem_optimistic_spin.rwsem_down_write_slowpath.do_unlinkat.__x64_sys_unlink
     15.82 ±  5%     -11.6        4.20 ±  4%  perf-profile.calltrace.cycles-pp.rwsem_optimistic_spin.rwsem_down_write_slowpath.do_unlinkat.__x64_sys_unlink.do_syscall_64
     16.02 ±  5%     -11.5        4.56 ±  4%  perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.do_unlinkat.__x64_sys_unlink.do_syscall_64.entry_SYSCALL_64_after_hwframe
     14.72 ±  5%     -11.4        3.36 ±  4%  perf-profile.calltrace.cycles-pp.osq_lock.rwsem_optimistic_spin.rwsem_down_write_slowpath.open_last_lookups.path_openat
     16.58 ±  5%     -11.3        5.30 ±  4%  perf-profile.calltrace.cycles-pp.__x64_sys_unlink.do_syscall_64.entry_SYSCALL_64_after_hwframe.unlink
     16.58 ±  5%     -11.3        5.30 ±  4%  perf-profile.calltrace.cycles-pp.do_unlinkat.__x64_sys_unlink.do_syscall_64.entry_SYSCALL_64_after_hwframe.unlink
     16.59 ±  5%     -11.3        5.32 ±  4%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.unlink
     16.59 ±  5%     -11.3        5.32 ±  4%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.unlink
     16.60 ±  5%     -11.3        5.33 ±  4%  perf-profile.calltrace.cycles-pp.unlink
     15.32 ±  5%     -11.1        4.20 ±  4%  perf-profile.calltrace.cycles-pp.rwsem_optimistic_spin.rwsem_down_write_slowpath.open_last_lookups.path_openat.do_filp_open
     15.53 ±  5%     -11.0        4.57 ±  3%  perf-profile.calltrace.cycles-pp.rwsem_down_write_slowpath.open_last_lookups.path_openat.do_filp_open.do_sys_openat2
     16.44 ±  5%     -10.8        5.66 ±  4%  perf-profile.calltrace.cycles-pp.open_last_lookups.path_openat.do_filp_open.do_sys_openat2.__x64_sys_creat
     16.48 ±  5%     -10.8        5.71 ±  4%  perf-profile.calltrace.cycles-pp.path_openat.do_filp_open.do_sys_openat2.__x64_sys_creat.do_syscall_64
     16.48 ±  5%     -10.8        5.71 ±  4%  perf-profile.calltrace.cycles-pp.do_filp_open.do_sys_openat2.__x64_sys_creat.do_syscall_64.entry_SYSCALL_64_after_hwframe
     16.49 ±  5%     -10.8        5.73 ±  4%  perf-profile.calltrace.cycles-pp.do_sys_openat2.__x64_sys_creat.do_syscall_64.entry_SYSCALL_64_after_hwframe.creat64
     16.50 ±  5%     -10.8        5.74 ±  4%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.creat64
     16.49 ±  5%     -10.8        5.73 ±  4%  perf-profile.calltrace.cycles-pp.__x64_sys_creat.do_syscall_64.entry_SYSCALL_64_after_hwframe.creat64
     16.50 ±  5%     -10.8        5.74 ±  4%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.creat64
     16.51 ±  5%     -10.8        5.76 ±  4%  perf-profile.calltrace.cycles-pp.creat64
      0.86 ±  7%      +0.2        1.01 ±  8%  perf-profile.calltrace.cycles-pp.lookup_open.open_last_lookups.path_openat.do_filp_open.do_sys_openat2
      0.70 ±  4%      +0.2        0.86 ± 11%  perf-profile.calltrace.cycles-pp.xfs_inactive_ifree.xfs_inactive.xfs_inodegc_worker.process_one_work.worker_thread
      0.58 ±  4%      +0.2        0.82 ±  4%  perf-profile.calltrace.cycles-pp.rwsem_spin_on_owner.rwsem_optimistic_spin.rwsem_down_write_slowpath.open_last_lookups.path_openat
      0.59 ±  5%      +0.2        0.84 ±  5%  perf-profile.calltrace.cycles-pp.rwsem_spin_on_owner.rwsem_optimistic_spin.rwsem_down_write_slowpath.do_unlinkat.__x64_sys_unlink
      0.54 ±  4%      +0.3        0.79 ±  3%  perf-profile.calltrace.cycles-pp.xas_load.__filemap_get_folio.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write
      0.53 ±  4%      +0.3        0.79 ±  6%  perf-profile.calltrace.cycles-pp.__alloc_pages.folio_alloc.__filemap_get_folio.iomap_write_begin.iomap_write_iter
      0.55 ±  3%      +0.3        0.84 ±  4%  perf-profile.calltrace.cycles-pp.down_write.xfs_ilock.xfs_file_buffered_write.new_sync_write.vfs_write
      0.57 ±  5%      +0.3        0.86 ±  5%  perf-profile.calltrace.cycles-pp.apparmor_file_permission.security_file_permission.vfs_write.ksys_write.do_syscall_64
      0.61 ±  4%      +0.3        0.92 ±  5%  perf-profile.calltrace.cycles-pp.folio_alloc.__filemap_get_folio.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write
      0.64 ±  4%      +0.3        0.97 ±  6%  perf-profile.calltrace.cycles-pp.__folio_mark_dirty.filemap_dirty_folio.iomap_write_end.iomap_write_iter.iomap_file_buffered_write
      0.66 ±  5%      +0.3        1.00 ±  4%  perf-profile.calltrace.cycles-pp.security_file_permission.vfs_write.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.71 ±  4%      +0.3        1.05 ±  3%  perf-profile.calltrace.cycles-pp.down_write.xfs_ilock.xfs_buffered_write_iomap_begin.iomap_iter.iomap_file_buffered_write
      0.68 ±  4%      +0.3        1.03 ±  4%  perf-profile.calltrace.cycles-pp.xfs_ilock.xfs_file_buffered_write.new_sync_write.vfs_write.ksys_write
      0.78 ±  4%      +0.4        1.14 ±  6%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.llseek
      0.72 ±  4%      +0.4        1.09 ±  5%  perf-profile.calltrace.cycles-pp.fault_in_readable.fault_in_iov_iter_readable.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write
      0.96 ±  4%      +0.4        1.34 ±  5%  perf-profile.calltrace.cycles-pp.memset_erms.zero_user_segments.__iomap_write_begin.iomap_write_begin.iomap_write_iter
      0.98 ±  2%      +0.4        1.37 ±  5%  perf-profile.calltrace.cycles-pp.__filemap_add_folio.filemap_add_folio.__filemap_get_folio.iomap_write_begin.iomap_write_iter
      1.00 ±  4%      +0.4        1.40 ±  5%  perf-profile.calltrace.cycles-pp.zero_user_segments.__iomap_write_begin.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write
      0.84 ±  4%      +0.4        1.25 ±  4%  perf-profile.calltrace.cycles-pp.xfs_ilock.xfs_buffered_write_iomap_begin.iomap_iter.iomap_file_buffered_write.xfs_file_buffered_write
      0.92 ±  4%      +0.4        1.34 ±  5%  perf-profile.calltrace.cycles-pp.__entry_text_start.write
      0.87 ±  4%      +0.4        1.31 ±  4%  perf-profile.calltrace.cycles-pp.fault_in_iov_iter_readable.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      0.91 ±  4%      +0.4        1.35 ±  6%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.llseek
      0.79 ±  5%      +0.5        1.24 ±  7%  perf-profile.calltrace.cycles-pp.release_pages.__pagevec_release.truncate_inode_pages_range.evict.__dentry_kill
      0.81 ±  4%      +0.5        1.27 ±  7%  perf-profile.calltrace.cycles-pp.__pagevec_release.truncate_inode_pages_range.evict.__dentry_kill.dentry_kill
      0.26 ±100%      +0.5        0.75 ±  5%  perf-profile.calltrace.cycles-pp.ksys_lseek.do_syscall_64.entry_SYSCALL_64_after_hwframe.llseek
      0.27 ±100%      +0.5        0.77 ±  5%  perf-profile.calltrace.cycles-pp.balance_dirty_pages_ratelimited.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      0.17 ±141%      +0.5        0.69 ±  3%  perf-profile.calltrace.cycles-pp.xfs_file_write_iter.new_sync_write.vfs_write.ksys_write.do_syscall_64
      0.80 ±  5%      +0.5        1.32 ± 46%  perf-profile.calltrace.cycles-pp.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call
      0.09 ±223%      +0.5        0.62 ±  6%  perf-profile.calltrace.cycles-pp.xfs_remove.xfs_vn_unlink.vfs_unlink.do_unlinkat.__x64_sys_unlink
      0.09 ±223%      +0.5        0.62 ±  6%  perf-profile.calltrace.cycles-pp.xfs_vn_unlink.vfs_unlink.do_unlinkat.__x64_sys_unlink.do_syscall_64
      0.86 ±  6%      +0.5        1.40 ± 44%  perf-profile.calltrace.cycles-pp.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter.cpuidle_idle_call.do_idle
      0.09 ±223%      +0.5        0.64 ±  6%  perf-profile.calltrace.cycles-pp.vfs_unlink.do_unlinkat.__x64_sys_unlink.do_syscall_64.entry_SYSCALL_64_after_hwframe
      0.08 ±223%      +0.6        0.64 ± 12%  perf-profile.calltrace.cycles-pp.xfs_ifree.xfs_inactive_ifree.xfs_inactive.xfs_inodegc_worker.process_one_work
      0.17 ±141%      +0.6        0.74 ±  5%  perf-profile.calltrace.cycles-pp.folio_add_lru.filemap_add_folio.__filemap_get_folio.iomap_write_begin.iomap_write_iter
      0.00            +0.6        0.57 ±  6%  perf-profile.calltrace.cycles-pp.truncate_cleanup_folio.truncate_inode_pages_range.evict.__dentry_kill.dentry_kill
      0.00            +0.6        0.58 ±  7%  perf-profile.calltrace.cycles-pp.xfs_buffered_write_iomap_end.iomap_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      0.08 ±223%      +0.6        0.67 ±  5%  perf-profile.calltrace.cycles-pp.__entry_text_start.llseek
      0.18 ±141%      +0.6        0.77 ±  5%  perf-profile.calltrace.cycles-pp.xfs_break_layouts.xfs_file_write_checks.xfs_file_buffered_write.new_sync_write.vfs_write
      0.00            +0.6        0.62 ±  5%  perf-profile.calltrace.cycles-pp.get_page_from_freelist.__alloc_pages.folio_alloc.__filemap_get_folio.iomap_write_begin
      0.00            +0.6        0.62 ± 16%  perf-profile.calltrace.cycles-pp.xfs_inactive_truncate.xfs_inactive.xfs_inodegc_worker.process_one_work.worker_thread
      0.00            +0.6        0.62 ±  4%  perf-profile.calltrace.cycles-pp.__mem_cgroup_charge.__filemap_add_folio.filemap_add_folio.__filemap_get_folio.iomap_write_begin
      0.00            +0.6        0.63 ±  5%  perf-profile.calltrace.cycles-pp.xfs_iunlock.xfs_file_buffered_write.new_sync_write.vfs_write.ksys_write
      1.22 ±  4%      +0.6        1.85 ±  4%  perf-profile.calltrace.cycles-pp.filemap_dirty_folio.iomap_write_end.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write
      0.00            +0.6        0.64 ±  5%  perf-profile.calltrace.cycles-pp.disk_rw
      0.00            +0.6        0.65 ±  4%  perf-profile.calltrace.cycles-pp.xfs_iunlock.xfs_buffered_write_iomap_begin.iomap_iter.iomap_file_buffered_write.xfs_file_buffered_write
      0.08 ±223%      +0.6        0.73 ± 40%  perf-profile.calltrace.cycles-pp.hrtimer_interrupt.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state
      0.08 ±223%      +0.7        0.74 ± 40%  perf-profile.calltrace.cycles-pp.__sysvec_apic_timer_interrupt.sysvec_apic_timer_interrupt.asm_sysvec_apic_timer_interrupt.cpuidle_enter_state.cpuidle_enter
      1.48 ±  3%      +0.7        2.14 ±  5%  perf-profile.calltrace.cycles-pp.filemap_add_folio.__filemap_get_folio.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write
      0.00            +0.7        0.66 ±  5%  perf-profile.calltrace.cycles-pp.__pagevec_lru_add.folio_add_lru.filemap_add_folio.__filemap_get_folio.iomap_write_begin
      0.00            +0.7        0.67 ±  3%  perf-profile.calltrace.cycles-pp.xlog_cil_commit.__xfs_trans_commit.xfs_vn_update_time.file_update_time.xfs_file_write_checks
      1.65 ±  5%      +0.7        2.34 ±  6%  perf-profile.calltrace.cycles-pp.copy_user_enhanced_fast_string.copyin.copy_page_from_iter_atomic.iomap_write_iter.iomap_file_buffered_write
      0.00            +0.7        0.70 ±  6%  perf-profile.calltrace.cycles-pp.folio_account_dirtied.__folio_mark_dirty.filemap_dirty_folio.iomap_write_end.iomap_write_iter
      0.00            +0.7        0.71 ±  3%  perf-profile.calltrace.cycles-pp.__xfs_trans_commit.xfs_vn_update_time.file_update_time.xfs_file_write_checks.xfs_file_buffered_write
      0.75 ±  5%      +0.7        1.48 ± 11%  perf-profile.calltrace.cycles-pp.xfs_inactive.xfs_inodegc_worker.process_one_work.worker_thread.kthread
      0.76 ±  5%      +0.7        1.50 ± 10%  perf-profile.calltrace.cycles-pp.xfs_inodegc_worker.process_one_work.worker_thread.kthread.ret_from_fork
      0.78 ±  4%      +0.7        1.53 ± 10%  perf-profile.calltrace.cycles-pp.process_one_work.worker_thread.kthread.ret_from_fork
      1.81 ±  4%      +0.8        2.57 ±  6%  perf-profile.calltrace.cycles-pp.copyin.copy_page_from_iter_atomic.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write
      0.84 ± 12%      +0.8        1.61 ±  5%  perf-profile.calltrace.cycles-pp.file_update_time.xfs_file_write_checks.xfs_file_buffered_write.new_sync_write.vfs_write
      0.78 ±  4%      +0.8        1.58 ± 10%  perf-profile.calltrace.cycles-pp.worker_thread.kthread.ret_from_fork
      0.79 ±  4%      +0.8        1.61 ± 10%  perf-profile.calltrace.cycles-pp.ret_from_fork
      0.79 ±  4%      +0.8        1.61 ± 10%  perf-profile.calltrace.cycles-pp.kthread.ret_from_fork
      0.10 ±223%      +0.9        0.98 ±  6%  perf-profile.calltrace.cycles-pp.xfs_vn_update_time.file_update_time.xfs_file_write_checks.xfs_file_buffered_write.new_sync_write
      1.87 ±  4%      +0.9        2.78 ±  5%  perf-profile.calltrace.cycles-pp.llseek
      1.76 ±  6%      +0.9        2.68 ±  6%  perf-profile.calltrace.cycles-pp.truncate_inode_pages_range.evict.__dentry_kill.dentry_kill.dput
      1.78 ±  6%      +0.9        2.70 ±  6%  perf-profile.calltrace.cycles-pp.evict.__dentry_kill.dentry_kill.dput.__fput
      1.81 ±  6%      +1.0        2.76 ±  6%  perf-profile.calltrace.cycles-pp.dentry_kill.dput.__fput.task_work_run.exit_to_user_mode_loop
      1.80 ±  6%      +1.0        2.76 ±  6%  perf-profile.calltrace.cycles-pp.__dentry_kill.dentry_kill.dput.__fput.task_work_run
      1.82 ±  6%      +1.0        2.79 ±  6%  perf-profile.calltrace.cycles-pp.dput.__fput.task_work_run.exit_to_user_mode_loop.exit_to_user_mode_prepare
      2.26 ±  4%      +1.0        3.25 ±  5%  perf-profile.calltrace.cycles-pp.copy_page_from_iter_atomic.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      1.90 ±  6%      +1.0        2.91 ±  6%  perf-profile.calltrace.cycles-pp.task_work_run.exit_to_user_mode_loop.exit_to_user_mode_prepare.syscall_exit_to_user_mode.do_syscall_64
      1.90 ±  6%      +1.0        2.90 ±  6%  perf-profile.calltrace.cycles-pp.__fput.task_work_run.exit_to_user_mode_loop.exit_to_user_mode_prepare.syscall_exit_to_user_mode
      1.91 ±  6%      +1.0        2.92 ±  6%  perf-profile.calltrace.cycles-pp.syscall_exit_to_user_mode.do_syscall_64.entry_SYSCALL_64_after_hwframe.__close
      1.91 ±  6%      +1.0        2.92 ±  6%  perf-profile.calltrace.cycles-pp.exit_to_user_mode_prepare.syscall_exit_to_user_mode.do_syscall_64.entry_SYSCALL_64_after_hwframe.__close
      1.90 ±  6%      +1.0        2.92 ±  6%  perf-profile.calltrace.cycles-pp.exit_to_user_mode_loop.exit_to_user_mode_prepare.syscall_exit_to_user_mode.do_syscall_64.entry_SYSCALL_64_after_hwframe
      1.92 ±  6%      +1.0        2.93 ±  6%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.__close
      1.92 ±  6%      +1.0        2.94 ±  6%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.__close
      1.92 ±  6%      +1.0        2.94 ±  6%  perf-profile.calltrace.cycles-pp.__close
      1.97 ±  5%      +1.3        3.28 ±  4%  perf-profile.calltrace.cycles-pp.xfs_file_write_checks.xfs_file_buffered_write.new_sync_write.vfs_write.ksys_write
      3.32 ±  4%      +1.4        4.67 ±  4%  perf-profile.calltrace.cycles-pp.__iomap_write_begin.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write
      2.94 ±  4%      +1.5        4.42 ±  4%  perf-profile.calltrace.cycles-pp.xfs_buffered_write_iomap_begin.iomap_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      4.40 ±  4%      +2.1        6.47 ±  5%  perf-profile.calltrace.cycles-pp.__filemap_get_folio.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write
      4.48 ±  3%      +2.3        6.74 ±  4%  perf-profile.calltrace.cycles-pp.iomap_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write.vfs_write
      6.36 ±  4%      +2.8        9.20 ±  4%  perf-profile.calltrace.cycles-pp.iomap_write_end.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
      8.14 ±  3%      +3.6       11.77 ±  4%  perf-profile.calltrace.cycles-pp.iomap_write_begin.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write
     19.08 ±  4%      +8.6       27.69 ±  4%  perf-profile.calltrace.cycles-pp.iomap_write_iter.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write.vfs_write
     24.25 ±  4%     +11.2       35.45 ±  4%  perf-profile.calltrace.cycles-pp.iomap_file_buffered_write.xfs_file_buffered_write.new_sync_write.vfs_write.ksys_write
     27.82 ±  3%     +13.3       41.14 ±  4%  perf-profile.calltrace.cycles-pp.xfs_file_buffered_write.new_sync_write.vfs_write.ksys_write.do_syscall_64
     28.69 ±  4%     +13.7       42.44 ±  4%  perf-profile.calltrace.cycles-pp.new_sync_write.vfs_write.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe
     30.64 ±  3%     +14.8       45.43 ±  4%  perf-profile.calltrace.cycles-pp.vfs_write.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
     31.21 ±  3%     +15.1       46.28 ±  4%  perf-profile.calltrace.cycles-pp.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
     31.66 ±  3%     +15.3       46.95 ±  4%  perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
     31.92 ±  3%     +15.4       47.35 ±  4%  perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.write
     33.93 ±  4%     +16.8       50.75 ±  4%  perf-profile.calltrace.cycles-pp.write
     29.92 ±  5%     -23.2        6.71 ±  4%  perf-profile.children.cycles-pp.osq_lock
     31.14 ±  5%     -22.7        8.41 ±  4%  perf-profile.children.cycles-pp.rwsem_optimistic_spin
     31.55 ±  5%     -22.4        9.12 ±  4%  perf-profile.children.cycles-pp.rwsem_down_write_slowpath
     16.58 ±  5%     -11.3        5.30 ±  4%  perf-profile.children.cycles-pp.__x64_sys_unlink
     16.58 ±  5%     -11.3        5.30 ±  4%  perf-profile.children.cycles-pp.do_unlinkat
     16.61 ±  5%     -11.3        5.34 ±  4%  perf-profile.children.cycles-pp.unlink
     16.44 ±  5%     -10.8        5.66 ±  4%  perf-profile.children.cycles-pp.open_last_lookups
     16.49 ±  5%     -10.8        5.73 ±  4%  perf-profile.children.cycles-pp.__x64_sys_creat
     16.51 ±  5%     -10.8        5.76 ±  4%  perf-profile.children.cycles-pp.path_openat
     16.51 ±  5%     -10.8        5.76 ±  4%  perf-profile.children.cycles-pp.creat64
     16.51 ±  5%     -10.8        5.76 ±  4%  perf-profile.children.cycles-pp.do_filp_open
     16.54 ±  5%     -10.7        5.80 ±  4%  perf-profile.children.cycles-pp.do_sys_openat2
     67.60 ±  4%      -5.3       62.29 ±  4%  perf-profile.children.cycles-pp.do_syscall_64
     68.00 ±  4%      -5.1       62.90 ±  4%  perf-profile.children.cycles-pp.entry_SYSCALL_64_after_hwframe
      0.62 ±  6%      -0.2        0.44 ± 12%  perf-profile.children.cycles-pp.xfs_check_agi_freecount
      0.34 ±  8%      -0.1        0.22 ± 14%  perf-profile.children.cycles-pp.xfs_inobt_get_rec
      0.29 ±  8%      -0.1        0.17 ± 10%  perf-profile.children.cycles-pp.xfs_btree_check_sblock
      0.22 ±  8%      -0.1        0.14 ± 10%  perf-profile.children.cycles-pp.__xfs_btree_check_sblock
      0.35 ±  7%      -0.1        0.27 ±  9%  perf-profile.children.cycles-pp.xfs_dialloc_ag
      0.20 ±  7%      -0.1        0.12 ±  8%  perf-profile.children.cycles-pp.xfs_btree_get_rec
      0.20 ±  7%      -0.1        0.12 ± 11%  perf-profile.children.cycles-pp.xfs_btree_increment
      0.39 ±  7%      -0.1        0.32 ±  8%  perf-profile.children.cycles-pp.xfs_dialloc
      0.04 ± 45%      +0.0        0.07 ± 11%  perf-profile.children.cycles-pp.up
      0.05 ±  7%      +0.0        0.08 ± 10%  perf-profile.children.cycles-pp.balance_dirty_pages
      0.06 ±  8%      +0.0        0.08 ± 10%  perf-profile.children.cycles-pp.__x64_sys_write
      0.06 ±  6%      +0.0        0.08 ± 11%  perf-profile.children.cycles-pp.xfs_btree_read_buf_block
      0.06 ± 11%      +0.0        0.08 ±  5%  perf-profile.children.cycles-pp.cgroup_rstat_updated
      0.07 ± 12%      +0.0        0.10 ±  4%  perf-profile.children.cycles-pp.xfs_bmapi_reserve_delalloc
      0.05 ±  7%      +0.0        0.08 ± 12%  perf-profile.children.cycles-pp.free_unref_page_commit
      0.05 ±  8%      +0.0        0.08 ±  7%  perf-profile.children.cycles-pp.rw_verify_area
      0.06 ± 11%      +0.0        0.09 ±  6%  perf-profile.children.cycles-pp.xas_create
      0.04 ± 45%      +0.0        0.07 ±  8%  perf-profile.children.cycles-pp.iomap_adjust_read_range
      0.05 ± 13%      +0.0        0.08 ±  4%  perf-profile.children.cycles-pp.xfs_dir3_data_check
      0.05 ± 13%      +0.0        0.08 ±  4%  perf-profile.children.cycles-pp.__xfs_dir3_data_check
      0.05 ±  7%      +0.0        0.08 ± 12%  perf-profile.children.cycles-pp.xas_clear_mark
      0.06 ±  7%      +0.0        0.09 ±  9%  perf-profile.children.cycles-pp.xfs_free_eofblocks
      0.06 ± 13%      +0.0        0.08 ±  8%  perf-profile.children.cycles-pp.iov_iter_init
      0.06 ±  9%      +0.0        0.09 ±  4%  perf-profile.children.cycles-pp.xfs_dir2_leafn_lookup_for_entry
      0.06 ± 11%      +0.0        0.09 ± 10%  perf-profile.children.cycles-pp.iomap_iter_done
      0.04 ± 71%      +0.0        0.06 ±  7%  perf-profile.children.cycles-pp.__x64_sys_openat
      0.06            +0.0        0.09 ±  6%  perf-profile.children.cycles-pp.folio_memcg_unlock
      0.07 ± 11%      +0.0        0.10 ±  6%  perf-profile.children.cycles-pp.xfs_vn_lookup
      0.04 ± 45%      +0.0        0.08 ±  6%  perf-profile.children.cycles-pp.kmem_cache_alloc
      0.06 ± 11%      +0.0        0.09 ±  5%  perf-profile.children.cycles-pp.xfs_lookup
      0.06 ± 11%      +0.0        0.09 ±  5%  perf-profile.children.cycles-pp.xfs_dir_lookup
      0.04 ± 45%      +0.0        0.08 ± 14%  perf-profile.children.cycles-pp.wake_up_q
      0.06 ±  6%      +0.0        0.09 ±  9%  perf-profile.children.cycles-pp.PageHeadHuge
      0.06 ±  9%      +0.0        0.09 ±  5%  perf-profile.children.cycles-pp.__list_add_valid
      0.06 ± 11%      +0.0        0.10 ±  5%  perf-profile.children.cycles-pp.syscall_exit_to_user_mode_prepare
      0.05 ± 47%      +0.0        0.08 ±  4%  perf-profile.children.cycles-pp.xfs_dir2_node_addname_int
      0.08 ± 10%      +0.0        0.11 ± 11%  perf-profile.children.cycles-pp.__xa_set_mark
      0.06 ±  9%      +0.0        0.10 ±  5%  perf-profile.children.cycles-pp.__mark_inode_dirty
      0.07 ±  5%      +0.0        0.10 ±  7%  perf-profile.children.cycles-pp.mem_cgroup_charge_statistics
      0.07 ± 11%      +0.0        0.10 ±  9%  perf-profile.children.cycles-pp.xfs_release
      0.09 ±  6%      +0.0        0.13 ± 12%  perf-profile.children.cycles-pp._xfs_trans_bjoin
      0.06 ± 11%      +0.0        0.10 ± 10%  perf-profile.children.cycles-pp.xfs_btree_lookup_get_block
      0.04 ± 71%      +0.0        0.08 ±  6%  perf-profile.children.cycles-pp.xfs_dir2_node_lookup
      0.04 ± 71%      +0.0        0.07 ±  6%  perf-profile.children.cycles-pp.open64
      0.07 ±  6%      +0.0        0.11 ± 11%  perf-profile.children.cycles-pp.alloc_pages
      0.10 ±  5%      +0.0        0.14 ±  9%  perf-profile.children.cycles-pp.xfs_btree_lookup
      0.10 ± 13%      +0.0        0.14 ±  7%  perf-profile.children.cycles-pp.get_mem_cgroup_from_mm
      0.09 ± 14%      +0.0        0.13 ±  5%  perf-profile.children.cycles-pp.xfs_dir2_node_addname
      0.06 ± 11%      +0.0        0.11 ± 10%  perf-profile.children.cycles-pp.rwsem_wake
      0.02 ± 99%      +0.0        0.07 ± 10%  perf-profile.children.cycles-pp.xas_find
      0.08 ±  8%      +0.0        0.13 ±  5%  perf-profile.children.cycles-pp.xfs_get_extsz_hint
      0.03 ± 70%      +0.0        0.08 ± 11%  perf-profile.children.cycles-pp.xfs_isilocked
      0.09 ± 11%      +0.0        0.14 ±  5%  perf-profile.children.cycles-pp.xfs_dir_createname
      0.02 ±141%      +0.0        0.06 ± 14%  perf-profile.children.cycles-pp.perf_mux_hrtimer_handler
      0.10 ±  4%      +0.0        0.15 ±  7%  perf-profile.children.cycles-pp.node_dirty_ok
      0.01 ±223%      +0.0        0.06 ± 11%  perf-profile.children.cycles-pp.mem_cgroup_track_foreign_dirty_slowpath
      0.11 ±  8%      +0.1        0.16 ± 11%  perf-profile.children.cycles-pp.memcpy_erms
      0.00            +0.1        0.05        perf-profile.children.cycles-pp.xas_alloc
      0.08 ±  5%      +0.1        0.14 ± 11%  perf-profile.children.cycles-pp._raw_spin_lock_irq
      0.00            +0.1        0.05 ±  7%  perf-profile.children.cycles-pp.uncharge_folio
      0.11 ±  6%      +0.1        0.16 ±  9%  perf-profile.children.cycles-pp.filemap_unaccount_folio
      0.01 ±223%      +0.1        0.06 ± 17%  perf-profile.children.cycles-pp.generic_file_llseek_size
      0.01 ±223%      +0.1        0.06 ±  6%  perf-profile.children.cycles-pp.xlog_grant_push_ail
      0.01 ±223%      +0.1        0.06 ±  6%  perf-profile.children.cycles-pp.xlog_grant_push_threshold
      0.00            +0.1        0.05 ±  8%  perf-profile.children.cycles-pp.folio_mapping
      0.07 ± 10%      +0.1        0.13 ± 22%  perf-profile.children.cycles-pp.kmem_cache_free
      0.02 ± 99%      +0.1        0.08 ± 21%  perf-profile.children.cycles-pp.memcg_slab_free_hook
      0.00            +0.1        0.06 ±  9%  perf-profile.children.cycles-pp.schedule_idle
      0.12 ± 11%      +0.1        0.18 ± 11%  perf-profile.children.cycles-pp.__free_one_page
      0.00            +0.1        0.06 ±  8%  perf-profile.children.cycles-pp.mem_cgroup_update_lru_size
      0.00            +0.1        0.06 ±  8%  perf-profile.children.cycles-pp.memcg_check_events
      0.00            +0.1        0.06 ±  8%  perf-profile.children.cycles-pp.filemap_free_folio
      0.13 ±  8%      +0.1        0.18 ±  5%  perf-profile.children.cycles-pp.xfs_da_read_buf
      0.10 ±  9%      +0.1        0.16 ±  8%  perf-profile.children.cycles-pp.file_remove_privs
      0.12 ±  5%      +0.1        0.18 ±  5%  perf-profile.children.cycles-pp.aa_file_perm
      0.00            +0.1        0.06 ± 11%  perf-profile.children.cycles-pp.down_read
      0.01 ±223%      +0.1        0.07 ± 11%  perf-profile.children.cycles-pp.xfs_dir2_leafn_remove
      0.01 ±223%      +0.1        0.07 ±  7%  perf-profile.children.cycles-pp.xlog_space_left
      0.12 ±  5%      +0.1        0.18 ±  8%  perf-profile.children.cycles-pp.rmqueue_bulk
      0.00            +0.1        0.06        perf-profile.children.cycles-pp.kmem_cache_alloc_lru
      0.08 ±  6%      +0.1        0.14 ± 12%  perf-profile.children.cycles-pp.folio_lruvec_lock_irqsave
      0.02 ±141%      +0.1        0.08 ± 20%  perf-profile.children.cycles-pp.propagate_protected_usage
      0.15 ±  2%      +0.1        0.21 ±  3%  perf-profile.children.cycles-pp.generic_write_check_limits
      0.12 ±  4%      +0.1        0.18 ± 10%  perf-profile.children.cycles-pp.page_counter_try_charge
      0.14 ±  6%      +0.1        0.20 ±  3%  perf-profile.children.cycles-pp.folio_memcg_lock
      0.13 ±  6%      +0.1        0.19 ±  5%  perf-profile.children.cycles-pp.iomap_page_create
      0.07 ± 12%      +0.1        0.14 ± 25%  perf-profile.children.cycles-pp.rcu_do_batch
      0.00            +0.1        0.07 ± 14%  perf-profile.children.cycles-pp.idle_cpu
      0.00            +0.1        0.07 ± 18%  perf-profile.children.cycles-pp.update_rq_clock
      0.14 ±  7%      +0.1        0.21 ±  4%  perf-profile.children.cycles-pp.xfs_dir2_node_removename
      0.15 ±  8%      +0.1        0.22 ±  4%  perf-profile.children.cycles-pp.xfs_dir_removename
      0.15 ±  5%      +0.1        0.22 ±  5%  perf-profile.children.cycles-pp.xfs_iread_extents
      0.14 ±  7%      +0.1        0.22 ±  5%  perf-profile.children.cycles-pp.file_modified
      0.11 ± 17%      +0.1        0.19 ± 27%  perf-profile.children.cycles-pp.rcu_core
      0.15 ±  9%      +0.1        0.22 ±  7%  perf-profile.children.cycles-pp.find_lock_entries
      0.15 ±  9%      +0.1        0.23 ±  4%  perf-profile.children.cycles-pp.xfs_da3_node_lookup_int
      0.16 ± 12%      +0.1        0.23 ± 12%  perf-profile.children.cycles-pp.free_pcppages_bulk
      0.17 ±  4%      +0.1        0.25 ±  8%  perf-profile.children.cycles-pp.__mod_node_page_state
      0.08 ± 12%      +0.1        0.16 ± 25%  perf-profile.children.cycles-pp.try_to_wake_up
      0.18 ±  2%      +0.1        0.26 ±  4%  perf-profile.children.cycles-pp.xas_start
      0.17 ±  6%      +0.1        0.25 ±  8%  perf-profile.children.cycles-pp.xfs_file_llseek
      0.16 ±  6%      +0.1        0.25 ±  8%  perf-profile.children.cycles-pp.inode_to_bdi
      0.18 ±  6%      +0.1        0.28 ±  6%  perf-profile.children.cycles-pp.syscall_enter_from_user_mode
      0.18 ±  5%      +0.1        0.27 ±  5%  perf-profile.children.cycles-pp.rcu_all_qs
      0.17 ±  4%      +0.1        0.26 ±  7%  perf-profile.children.cycles-pp.try_charge_memcg
      0.20 ±  5%      +0.1        0.29 ±  8%  perf-profile.children.cycles-pp.__mod_lruvec_state
      0.06 ± 13%      +0.1        0.16 ± 27%  perf-profile.children.cycles-pp.xfs_log_ticket_ungrant
      0.21 ±  5%      +0.1        0.32 ±  5%  perf-profile.children.cycles-pp.entry_SYSCALL_64_safe_stack
      0.22 ± 11%      +0.1        0.33 ± 10%  perf-profile.children.cycles-pp.current_time
      0.24 ±  6%      +0.1        0.36 ±  6%  perf-profile.children.cycles-pp.__list_del_entry_valid
      0.27 ±  4%      +0.1        0.38 ±  4%  perf-profile.children.cycles-pp.xfs_errortag_test
      0.25 ±  7%      +0.1        0.38 ±  6%  perf-profile.children.cycles-pp.folio_account_cleaned
      0.28 ±  4%      +0.1        0.41 ±  5%  perf-profile.children.cycles-pp.rmqueue
      0.24 ±  6%      +0.1        0.37 ±  4%  perf-profile.children.cycles-pp.xfs_bmbt_to_iomap
      0.27 ±  8%      +0.1        0.40 ± 10%  perf-profile.children.cycles-pp.free_unref_page_list
      0.30 ±  3%      +0.1        0.43 ±  4%  perf-profile.children.cycles-pp.generic_write_checks
      0.49 ±  4%      +0.1        0.62 ±  6%  perf-profile.children.cycles-pp.xfs_vn_unlink
      0.32 ±  5%      +0.1        0.46 ±  5%  perf-profile.children.cycles-pp.__mod_memcg_lruvec_state
      0.49 ±  5%      +0.1        0.62 ±  6%  perf-profile.children.cycles-pp.xfs_remove
      0.30 ±  6%      +0.1        0.44 ±  8%  perf-profile.children.cycles-pp.xas_store
      0.50 ±  5%      +0.1        0.64 ±  6%  perf-profile.children.cycles-pp.vfs_unlink
      0.22 ±  3%      +0.1        0.36 ±  9%  perf-profile.children.cycles-pp.uncharge_batch
      0.20 ±  5%      +0.1        0.35 ±  9%  perf-profile.children.cycles-pp.page_counter_uncharge
      0.08 ± 32%      +0.1        0.23 ± 10%  perf-profile.children.cycles-pp.xlog_grant_add_space
      0.30 ±  2%      +0.2        0.45 ±  5%  perf-profile.children.cycles-pp.charge_memcg
      0.86 ±  7%      +0.2        1.01 ±  8%  perf-profile.children.cycles-pp.lookup_open
      0.31 ±  5%      +0.2        0.47 ±  2%  perf-profile.children.cycles-pp.folio_unlock
      0.22 ±  5%      +0.2        0.38 ±  8%  perf-profile.children.cycles-pp._raw_spin_lock_irqsave
      0.70 ±  4%      +0.2        0.86 ± 11%  perf-profile.children.cycles-pp.xfs_inactive_ifree
      0.32 ±  6%      +0.2        0.48 ±  6%  perf-profile.children.cycles-pp.xfs_break_leased_layouts
      0.33 ±  8%      +0.2        0.50 ±  6%  perf-profile.children.cycles-pp.__folio_cancel_dirty
      0.32 ±  2%      +0.2        0.49 ±  7%  perf-profile.children.cycles-pp.xfs_iext_lookup_extent
      0.47 ±  4%      +0.2        0.64 ± 12%  perf-profile.children.cycles-pp.xfs_ifree
      0.25 ±  4%      +0.2        0.42 ±  8%  perf-profile.children.cycles-pp.__mem_cgroup_uncharge_list
      0.32 ±  4%      +0.2        0.49 ±  5%  perf-profile.children.cycles-pp.__pagevec_lru_add_fn
      0.39 ±  6%      +0.2        0.56 ± 13%  perf-profile.children.cycles-pp.xfs_difree
      0.36 ±  7%      +0.2        0.54 ±  8%  perf-profile.children.cycles-pp.delete_from_page_cache_batch
      0.46 ±  4%      +0.2        0.63 ±  6%  perf-profile.children.cycles-pp.__mod_lruvec_page_state
      0.33 ±  8%      +0.2        0.51 ±  9%  perf-profile.children.cycles-pp.percpu_counter_add_batch
      0.38 ±  3%      +0.2        0.57 ±  4%  perf-profile.children.cycles-pp.__might_sleep
      0.38 ±  7%      +0.2        0.58 ±  6%  perf-profile.children.cycles-pp.truncate_cleanup_folio
      0.06            +0.2        0.26 ± 14%  perf-profile.children.cycles-pp.__down_common
      0.05 ±  8%      +0.2        0.25 ± 14%  perf-profile.children.cycles-pp.schedule_timeout
      0.06            +0.2        0.26 ± 13%  perf-profile.children.cycles-pp.down
      0.06            +0.2        0.26 ± 14%  perf-profile.children.cycles-pp.xfs_buf_lock
      0.42 ±  4%      +0.2        0.62 ±  4%  perf-profile.children.cycles-pp.get_page_from_freelist
      0.42 ±  4%      +0.2        0.62 ±  4%  perf-profile.children.cycles-pp.__mem_cgroup_charge
      0.42 ±  6%      +0.2        0.63 ±  4%  perf-profile.children.cycles-pp.__cond_resched
      0.46 ±  5%      +0.2        0.67 ±  5%  perf-profile.children.cycles-pp.__fget_light
      0.47 ±  6%      +0.2        0.69 ±  3%  perf-profile.children.cycles-pp.xfs_file_write_iter
      0.39 ±  3%      +0.2        0.61 ±  7%  perf-profile.children.cycles-pp.xfs_buffered_write_iomap_end
      0.29 ± 12%      +0.2        0.51 ± 44%  perf-profile.children.cycles-pp.__softirqentry_text_start
      0.32 ± 11%      +0.2        0.55 ± 42%  perf-profile.children.cycles-pp.__irq_exit_rcu
      0.48 ±  4%      +0.2        0.71 ±  5%  perf-profile.children.cycles-pp.disk_rw
      0.09 ±  4%      +0.2        0.32 ± 14%  perf-profile.children.cycles-pp.xfs_ialloc_read_agi
      0.44 ±  4%      +0.2        0.68 ±  5%  perf-profile.children.cycles-pp.__pagevec_lru_add
      0.12 ±  3%      +0.2        0.36 ± 13%  perf-profile.children.cycles-pp.xfs_read_agi
      0.46 ±  4%      +0.2        0.71 ±  6%  perf-profile.children.cycles-pp.folio_account_dirtied
      0.13 ± 33%      +0.2        0.38 ± 13%  perf-profile.children.cycles-pp.xfs_log_reserve
      0.08 ±  4%      +0.2        0.33 ± 13%  perf-profile.children.cycles-pp.update_sg_lb_stats
      0.14 ± 31%      +0.3        0.39 ± 14%  perf-profile.children.cycles-pp.xfs_trans_reserve
      0.48 ±  4%      +0.3        0.74 ±  5%  perf-profile.children.cycles-pp.folio_add_lru
      0.16 ± 30%      +0.3        0.41 ± 13%  perf-profile.children.cycles-pp.xfs_trans_alloc
      0.19 ±  4%      +0.3        0.45 ± 10%  perf-profile.children.cycles-pp.xfs_buf_find
      0.09 ±  6%      +0.3        0.35 ± 14%  perf-profile.children.cycles-pp.update_sd_lb_stats
      0.00            +0.3        0.26 ± 18%  perf-profile.children.cycles-pp.xfs_trans_roll
      0.53 ±  4%      +0.3        0.79 ±  5%  perf-profile.children.cycles-pp.ksys_lseek
      0.09 ±  6%      +0.3        0.35 ± 14%  perf-profile.children.cycles-pp.find_busiest_group
      0.00            +0.3        0.26 ± 17%  perf-profile.children.cycles-pp.xfs_defer_trans_roll
      0.22 ±  4%      +0.3        0.48 ± 10%  perf-profile.children.cycles-pp.xfs_buf_read_map
      0.00            +0.3        0.26 ± 17%  perf-profile.children.cycles-pp.xfs_defer_finish
      0.20 ±  4%      +0.3        0.46 ± 10%  perf-profile.children.cycles-pp.xfs_buf_get_map
      0.53 ±  5%      +0.3        0.80 ±  5%  perf-profile.children.cycles-pp.xfs_break_layouts
      0.53 ±  4%      +0.3        0.80 ±  5%  perf-profile.children.cycles-pp.__alloc_pages
      0.54 ±  5%      +0.3        0.81 ±  5%  perf-profile.children.cycles-pp.balance_dirty_pages_ratelimited
      0.02 ±142%      +0.3        0.29 ± 16%  perf-profile.children.cycles-pp.xfs_itruncate_extents_flags
      0.08 ±  4%      +0.3        0.36 ± 16%  perf-profile.children.cycles-pp.newidle_balance
      0.59 ±  5%      +0.3        0.86 ±  4%  perf-profile.children.cycles-pp.__fdget_pos
      0.10 ±  3%      +0.3        0.39 ± 15%  perf-profile.children.cycles-pp.load_balance
      0.09 ±  6%      +0.3        0.38 ± 15%  perf-profile.children.cycles-pp.pick_next_task_fair
      0.58 ±  4%      +0.3        0.88 ±  4%  perf-profile.children.cycles-pp.apparmor_file_permission
      0.32 ±  4%      +0.3        0.62 ± 10%  perf-profile.children.cycles-pp.xfs_trans_read_buf_map
      0.62 ±  4%      +0.3        0.92 ±  6%  perf-profile.children.cycles-pp.folio_alloc
      0.67 ±  5%      +0.3        0.98 ±  4%  perf-profile.children.cycles-pp.xas_load
      0.14 ±  2%      +0.3        0.46 ± 13%  perf-profile.children.cycles-pp.schedule
      0.64 ±  4%      +0.3        0.97 ±  6%  perf-profile.children.cycles-pp.__folio_mark_dirty
      0.62 ±  4%      +0.3        0.96 ±  5%  perf-profile.children.cycles-pp.up_write
      0.67 ±  4%      +0.3        1.02 ±  4%  perf-profile.children.cycles-pp.security_file_permission
      0.18 ±  2%      +0.3        0.52 ± 12%  perf-profile.children.cycles-pp.__schedule
      0.75 ±  4%      +0.4        1.13 ±  5%  perf-profile.children.cycles-pp.fault_in_readable
      0.98 ±  4%      +0.4        1.36 ±  5%  perf-profile.children.cycles-pp.memset_erms
      0.99 ±  2%      +0.4        1.39 ±  5%  perf-profile.children.cycles-pp.__filemap_add_folio
      1.00 ±  4%      +0.4        1.40 ±  5%  perf-profile.children.cycles-pp.zero_user_segments
      0.89 ±  4%      +0.4        1.34 ±  4%  perf-profile.children.cycles-pp.fault_in_iov_iter_readable
      0.86 ±  4%      +0.5        1.31 ±  4%  perf-profile.children.cycles-pp.xfs_iunlock
      0.81 ±  4%      +0.5        1.27 ±  7%  perf-profile.children.cycles-pp.__pagevec_release
      0.85 ±  5%      +0.5        1.32 ±  7%  perf-profile.children.cycles-pp.release_pages
      1.01 ±  5%      +0.5        1.49 ±  4%  perf-profile.children.cycles-pp.__might_resched
      1.15 ±  5%      +0.5        1.67 ±  4%  perf-profile.children.cycles-pp.syscall_return_via_sysret
      0.05 ±  8%      +0.6        0.62 ± 16%  perf-profile.children.cycles-pp.xfs_inactive_truncate
      0.41 ± 20%      +0.6        0.98 ±  6%  perf-profile.children.cycles-pp.xfs_vn_update_time
      1.24 ±  4%      +0.6        1.88 ±  4%  perf-profile.children.cycles-pp.filemap_dirty_folio
      1.38 ±  5%      +0.6        2.01 ±  5%  perf-profile.children.cycles-pp.__entry_text_start
      1.49 ±  3%      +0.7        2.15 ±  5%  perf-profile.children.cycles-pp.filemap_add_folio
      1.35 ±  4%      +0.7        2.03 ±  3%  perf-profile.children.cycles-pp.down_write
      1.47 ±  4%      +0.7        2.16 ±  4%  perf-profile.children.cycles-pp.rwsem_spin_on_owner
      0.75 ±  5%      +0.7        1.48 ± 11%  perf-profile.children.cycles-pp.xfs_inactive
      1.76 ±  5%      +0.7        2.49 ±  6%  perf-profile.children.cycles-pp.copy_user_enhanced_fast_string
      0.76 ±  5%      +0.7        1.50 ± 10%  perf-profile.children.cycles-pp.xfs_inodegc_worker
      0.78 ±  4%      +0.7        1.53 ± 10%  perf-profile.children.cycles-pp.process_one_work
      1.82 ±  4%      +0.8        2.58 ±  6%  perf-profile.children.cycles-pp.copyin
      0.66 ±  4%      +0.8        1.42 ±  9%  perf-profile.children.cycles-pp.xlog_cil_insert_items
      0.84 ± 12%      +0.8        1.62 ±  5%  perf-profile.children.cycles-pp.file_update_time
      1.55 ±  3%      +0.8        2.32 ±  4%  perf-profile.children.cycles-pp.xfs_ilock
      0.78 ±  4%      +0.8        1.58 ± 10%  perf-profile.children.cycles-pp.worker_thread
      0.79 ±  4%      +0.8        1.61 ± 10%  perf-profile.children.cycles-pp.ret_from_fork
      0.79 ±  4%      +0.8        1.61 ± 10%  perf-profile.children.cycles-pp.kthread
      0.23 ±  6%      +0.8        1.05 ±  7%  perf-profile.children.cycles-pp.native_queued_spin_lock_slowpath
      0.35 ±  4%      +0.9        1.24 ±  7%  perf-profile.children.cycles-pp._raw_spin_lock
      1.76 ±  6%      +0.9        2.68 ±  6%  perf-profile.children.cycles-pp.truncate_inode_pages_range
      1.78 ±  6%      +0.9        2.70 ±  6%  perf-profile.children.cycles-pp.evict
      1.81 ±  6%      +1.0        2.76 ±  6%  perf-profile.children.cycles-pp.dentry_kill
      1.80 ±  6%      +1.0        2.76 ±  6%  perf-profile.children.cycles-pp.__dentry_kill
      1.84 ±  5%      +1.0        2.81 ±  6%  perf-profile.children.cycles-pp.dput
      0.94 ±  4%      +1.0        1.92 ±  6%  perf-profile.children.cycles-pp.xlog_cil_commit
      2.27 ±  5%      +1.0        3.26 ±  5%  perf-profile.children.cycles-pp.copy_page_from_iter_atomic
      1.90 ±  6%      +1.0        2.91 ±  6%  perf-profile.children.cycles-pp.task_work_run
      1.90 ±  6%      +1.0        2.90 ±  6%  perf-profile.children.cycles-pp.__fput
      1.91 ±  6%      +1.0        2.92 ±  6%  perf-profile.children.cycles-pp.exit_to_user_mode_loop
      1.92 ±  6%      +1.0        2.94 ±  6%  perf-profile.children.cycles-pp.__close
      0.97 ±  4%      +1.0        1.99 ±  6%  perf-profile.children.cycles-pp.__xfs_trans_commit
      2.13 ±  4%      +1.0        3.16 ±  5%  perf-profile.children.cycles-pp.llseek
      2.04 ±  6%      +1.1        3.13 ±  6%  perf-profile.children.cycles-pp.exit_to_user_mode_prepare
      2.21 ±  6%      +1.2        3.38 ±  6%  perf-profile.children.cycles-pp.syscall_exit_to_user_mode
      2.00 ±  5%      +1.3        3.33 ±  4%  perf-profile.children.cycles-pp.xfs_file_write_checks
      3.33 ±  4%      +1.4        4.70 ±  4%  perf-profile.children.cycles-pp.__iomap_write_begin
      3.00 ±  4%      +1.5        4.50 ±  4%  perf-profile.children.cycles-pp.xfs_buffered_write_iomap_begin
      4.47 ±  4%      +2.1        6.57 ±  5%  perf-profile.children.cycles-pp.__filemap_get_folio
      4.50 ±  3%      +2.3        6.78 ±  4%  perf-profile.children.cycles-pp.iomap_iter
      6.38 ±  4%      +2.9        9.23 ±  4%  perf-profile.children.cycles-pp.iomap_write_end
      8.16 ±  4%      +3.6       11.79 ±  4%  perf-profile.children.cycles-pp.iomap_write_begin
     19.12 ±  4%      +8.6       27.75 ±  4%  perf-profile.children.cycles-pp.iomap_write_iter
     24.29 ±  4%     +11.2       35.50 ±  4%  perf-profile.children.cycles-pp.iomap_file_buffered_write
     27.86 ±  3%     +13.3       41.20 ±  4%  perf-profile.children.cycles-pp.xfs_file_buffered_write
     28.72 ±  4%     +13.7       42.46 ±  4%  perf-profile.children.cycles-pp.new_sync_write
     30.67 ±  3%     +14.8       45.48 ±  4%  perf-profile.children.cycles-pp.vfs_write
     31.23 ±  3%     +15.1       46.30 ±  4%  perf-profile.children.cycles-pp.ksys_write
     34.29 ±  4%     +16.5       50.82 ±  4%  perf-profile.children.cycles-pp.write
     29.66 ±  5%     -23.1        6.60 ±  4%  perf-profile.self.cycles-pp.osq_lock
      0.20 ±  9%      -0.1        0.12 ± 10%  perf-profile.self.cycles-pp.__xfs_btree_check_sblock
      0.13 ±  4%      -0.1        0.07 ±  6%  perf-profile.self.cycles-pp.xfs_buf_item_format_segment
      0.09 ±  7%      -0.0        0.04 ± 72%  perf-profile.self.cycles-pp.xfs_inobt_get_rec
      0.05            +0.0        0.08 ±  6%  perf-profile.self.cycles-pp.rw_verify_area
      0.06 ± 11%      +0.0        0.08 ±  5%  perf-profile.self.cycles-pp.__folio_cancel_dirty
      0.06 ±  9%      +0.0        0.08 ±  5%  perf-profile.self.cycles-pp.folio_memcg_unlock
      0.05            +0.0        0.08 ± 11%  perf-profile.self.cycles-pp.alloc_pages
      0.04 ± 45%      +0.0        0.07 ±  9%  perf-profile.self.cycles-pp.folio_add_lru
      0.05 ±  7%      +0.0        0.08        perf-profile.self.cycles-pp.try_charge_memcg
      0.06 ±  6%      +0.0        0.09 ±  9%  perf-profile.self.cycles-pp.folio_account_cleaned
      0.06 ±  6%      +0.0        0.09 ± 10%  perf-profile.self.cycles-pp.mem_cgroup_charge_statistics
      0.05 ±  8%      +0.0        0.08 ±  5%  perf-profile.self.cycles-pp.__mark_inode_dirty
      0.06 ± 11%      +0.0        0.09 ±  7%  perf-profile.self.cycles-pp.__list_add_valid
      0.06 ±  6%      +0.0        0.09 ±  7%  perf-profile.self.cycles-pp.copyin
      0.04 ± 45%      +0.0        0.07 ±  6%  perf-profile.self.cycles-pp.iomap_iter_done
      0.07 ±  9%      +0.0        0.10 ±  4%  perf-profile.self.cycles-pp.rmqueue
      0.04 ± 45%      +0.0        0.08 ±  6%  perf-profile.self.cycles-pp.cgroup_rstat_updated
      0.04 ± 45%      +0.0        0.08 ±  9%  perf-profile.self.cycles-pp.syscall_exit_to_user_mode_prepare
      0.04 ± 45%      +0.0        0.08 ±  9%  perf-profile.self.cycles-pp.xas_clear_mark
      0.06 ±  7%      +0.0        0.10 ± 11%  perf-profile.self.cycles-pp.__alloc_pages
      0.07 ±  8%      +0.0        0.10 ±  9%  perf-profile.self.cycles-pp.node_dirty_ok
      0.10 ± 13%      +0.0        0.14 ±  8%  perf-profile.self.cycles-pp.get_mem_cgroup_from_mm
      0.07 ± 10%      +0.0        0.11 ±  8%  perf-profile.self.cycles-pp.xfs_get_extsz_hint
      0.02 ± 99%      +0.0        0.07 ± 11%  perf-profile.self.cycles-pp.get_page_from_freelist
      0.03 ± 70%      +0.0        0.08 ± 10%  perf-profile.self.cycles-pp.PageHeadHuge
      0.11 ±  8%      +0.0        0.15 ± 11%  perf-profile.self.cycles-pp.memcpy_erms
      0.07 ±  9%      +0.0        0.12 ±  8%  perf-profile.self.cycles-pp.folio_account_dirtied
      0.03 ±100%      +0.0        0.07 ±  8%  perf-profile.self.cycles-pp.iomap_adjust_read_range
      0.09 ± 13%      +0.0        0.14 ± 11%  perf-profile.self.cycles-pp.security_file_permission
      0.07 ±  6%      +0.0        0.12 ±  9%  perf-profile.self.cycles-pp._raw_spin_lock_irq
      0.01 ±223%      +0.0        0.06 ±  8%  perf-profile.self.cycles-pp.__mod_zone_page_state
      0.02 ±141%      +0.0        0.06 ± 11%  perf-profile.self.cycles-pp.delete_from_page_cache_batch
      0.01 ±223%      +0.0        0.06 ± 11%  perf-profile.self.cycles-pp.__mod_lruvec_state
      0.12 ±  5%      +0.1        0.17 ±  7%  perf-profile.self.cycles-pp.__filemap_add_folio
      0.00            +0.1        0.05 ±  7%  perf-profile.self.cycles-pp.uncharge_folio
      0.10 ± 10%      +0.1        0.15 ±  7%  perf-profile.self.cycles-pp.file_remove_privs
      0.02 ±141%      +0.1        0.07 ±  5%  perf-profile.self.cycles-pp.iov_iter_init
      0.11 ± 12%      +0.1        0.17 ± 13%  perf-profile.self.cycles-pp.__free_one_page
      0.10 ±  4%      +0.1        0.16 ±  6%  perf-profile.self.cycles-pp.aa_file_perm
      0.01 ±223%      +0.1        0.06 ± 14%  perf-profile.self.cycles-pp._xfs_trans_bjoin
      0.01 ±223%      +0.1        0.06 ± 17%  perf-profile.self.cycles-pp.generic_file_llseek_size
      0.01 ±223%      +0.1        0.06 ± 11%  perf-profile.self.cycles-pp.__x64_sys_write
      0.00            +0.1        0.05 ±  8%  perf-profile.self.cycles-pp.mem_cgroup_update_lru_size
      0.00            +0.1        0.05 ±  8%  perf-profile.self.cycles-pp.charge_memcg
      0.13 ±  5%      +0.1        0.18 ±  3%  perf-profile.self.cycles-pp.folio_memcg_lock
      0.10 ±  7%      +0.1        0.16 ±  8%  perf-profile.self.cycles-pp.page_counter_try_charge
      0.00            +0.1        0.06 ±  9%  perf-profile.self.cycles-pp.mem_cgroup_track_foreign_dirty_slowpath
      0.00            +0.1        0.06 ±  9%  perf-profile.self.cycles-pp.filemap_free_folio
      0.10 ±  5%      +0.1        0.16 ±  6%  perf-profile.self.cycles-pp.ksys_lseek
      0.11 ±  6%      +0.1        0.17 ±  5%  perf-profile.self.cycles-pp.iomap_page_create
      0.13 ±  8%      +0.1        0.19 ±  3%  perf-profile.self.cycles-pp.__fdget_pos
      0.11 ±  9%      +0.1        0.17 ±  7%  perf-profile.self.cycles-pp.find_lock_entries
      0.01 ±223%      +0.1        0.07 ±  7%  perf-profile.self.cycles-pp.xlog_space_left
      0.02 ±141%      +0.1        0.08 ± 16%  perf-profile.self.cycles-pp.propagate_protected_usage
      0.14 ±  4%      +0.1        0.20 ±  4%  perf-profile.self.cycles-pp.generic_write_check_limits
      0.00            +0.1        0.06 ±  9%  perf-profile.self.cycles-pp.xfs_isilocked
      0.12 ±  3%      +0.1        0.18 ±  6%  perf-profile.self.cycles-pp.syscall_exit_to_user_mode
      0.10 ± 11%      +0.1        0.16 ±  8%  perf-profile.self.cycles-pp.exit_to_user_mode_prepare
      0.00            +0.1        0.06 ± 11%  perf-profile.self.cycles-pp.truncate_cleanup_folio
      0.14 ±  6%      +0.1        0.21 ±  9%  perf-profile.self.cycles-pp.xas_store
      0.00            +0.1        0.07 ± 14%  perf-profile.self.cycles-pp.idle_cpu
      0.15 ±  5%      +0.1        0.21 ±  5%  perf-profile.self.cycles-pp.fault_in_iov_iter_readable
      0.13 ±  5%      +0.1        0.20 ± 10%  perf-profile.self.cycles-pp.inode_to_bdi
      0.00            +0.1        0.07 ± 10%  perf-profile.self.cycles-pp.free_unref_page_list
      0.13 ±  3%      +0.1        0.20 ±  3%  perf-profile.self.cycles-pp.rcu_all_qs
      0.16 ±  2%      +0.1        0.23 ±  4%  perf-profile.self.cycles-pp.xas_start
      0.16 ±  5%      +0.1        0.24 ±  4%  perf-profile.self.cycles-pp.do_syscall_64
      0.14 ±  5%      +0.1        0.22 ±  6%  perf-profile.self.cycles-pp.xfs_iread_extents
      0.16 ±  3%      +0.1        0.23 ±  7%  perf-profile.self.cycles-pp.generic_write_checks
      0.16 ±  7%      +0.1        0.24 ±  7%  perf-profile.self.cycles-pp.xfs_break_layouts
      0.17 ±  6%      +0.1        0.24 ±  7%  perf-profile.self.cycles-pp.__mod_node_page_state
      0.17 ±  4%      +0.1        0.24 ±  6%  perf-profile.self.cycles-pp.syscall_enter_from_user_mode
      0.15 ±  5%      +0.1        0.23 ±  8%  perf-profile.self.cycles-pp.current_time
      0.16 ±  6%      +0.1        0.24 ±  8%  perf-profile.self.cycles-pp.xfs_file_llseek
      0.15 ±  8%      +0.1        0.24 ±  8%  perf-profile.self.cycles-pp.release_pages
      0.03 ±100%      +0.1        0.11 ±  6%  perf-profile.self.cycles-pp.xfs_log_ticket_ungrant
      0.17 ±  4%      +0.1        0.26 ±  5%  perf-profile.self.cycles-pp.__pagevec_lru_add_fn
      0.20 ±  4%      +0.1        0.29 ±  4%  perf-profile.self.cycles-pp.xfs_file_write_checks
      0.19 ± 12%      +0.1        0.29 ± 12%  perf-profile.self.cycles-pp.ksys_write
      0.20 ±  4%      +0.1        0.30 ±  5%  perf-profile.self.cycles-pp.file_update_time
      0.20 ±  3%      +0.1        0.30 ±  6%  perf-profile.self.cycles-pp.xfs_ilock
      0.18 ±  5%      +0.1        0.28 ±  8%  perf-profile.self.cycles-pp._raw_spin_lock_irqsave
      0.24 ±  3%      +0.1        0.34 ±  4%  perf-profile.self.cycles-pp.xfs_errortag_test
      0.21 ±  5%      +0.1        0.32 ±  5%  perf-profile.self.cycles-pp.entry_SYSCALL_64_safe_stack
      0.22 ± 10%      +0.1        0.32 ±  4%  perf-profile.self.cycles-pp.__cond_resched
      0.28 ±  4%      +0.1        0.39 ±  6%  perf-profile.self.cycles-pp.__mod_memcg_lruvec_state
      0.18 ±  7%      +0.1        0.29 ±  8%  perf-profile.self.cycles-pp._raw_spin_lock
      0.24 ±  6%      +0.1        0.36 ±  6%  perf-profile.self.cycles-pp.__list_del_entry_valid
      0.25 ±  6%      +0.1        0.37 ±  4%  perf-profile.self.cycles-pp.xfs_iunlock
      0.17 ±  5%      +0.1        0.29 ±  8%  perf-profile.self.cycles-pp.page_counter_uncharge
      0.24 ±  6%      +0.1        0.37 ±  4%  perf-profile.self.cycles-pp.xfs_bmbt_to_iomap
      0.26 ±  5%      +0.1        0.40 ±  9%  perf-profile.self.cycles-pp.xfs_buffered_write_iomap_end
      0.28 ±  9%      +0.1        0.42 ± 10%  perf-profile.self.cycles-pp.percpu_counter_add_batch
      0.30 ±  5%      +0.1        0.45 ±  3%  perf-profile.self.cycles-pp.folio_unlock
      0.08 ± 32%      +0.1        0.23 ±  9%  perf-profile.self.cycles-pp.xlog_grant_add_space
      0.33 ±  3%      +0.2        0.48 ±  5%  perf-profile.self.cycles-pp.llseek
      0.32 ±  3%      +0.2        0.47 ±  7%  perf-profile.self.cycles-pp.xfs_iext_lookup_extent
      0.32 ±  5%      +0.2        0.48 ±  5%  perf-profile.self.cycles-pp.xfs_break_leased_layouts
      0.32 ±  4%      +0.2        0.48 ±  5%  perf-profile.self.cycles-pp.__might_sleep
      0.30 ±  4%      +0.2        0.46 ±  9%  perf-profile.self.cycles-pp.new_sync_write
      0.36 ±  5%      +0.2        0.54 ±  5%  perf-profile.self.cycles-pp.iomap_write_begin
      0.36 ±  4%      +0.2        0.54 ±  4%  perf-profile.self.cycles-pp.filemap_dirty_folio
      0.06 ±  6%      +0.2        0.26 ± 14%  perf-profile.self.cycles-pp.update_sg_lb_stats
      0.41 ±  7%      +0.2        0.61 ±  5%  perf-profile.self.cycles-pp.balance_dirty_pages_ratelimited
      0.43 ±  4%      +0.2        0.63 ±  6%  perf-profile.self.cycles-pp.disk_rw
      0.44 ±  6%      +0.2        0.64 ±  5%  perf-profile.self.cycles-pp.__fget_light
      0.42 ±  4%      +0.2        0.62 ±  5%  perf-profile.self.cycles-pp.entry_SYSCALL_64_after_hwframe
      0.47 ±  6%      +0.2        0.68 ±  3%  perf-profile.self.cycles-pp.xfs_file_write_iter
      0.45 ±  5%      +0.2        0.66 ±  5%  perf-profile.self.cycles-pp.copy_page_from_iter_atomic
      0.46 ±  4%      +0.2        0.69 ±  6%  perf-profile.self.cycles-pp.xfs_file_buffered_write
      0.46 ±  5%      +0.2        0.69 ±  4%  perf-profile.self.cycles-pp.apparmor_file_permission
      0.50 ±  6%      +0.2        0.74 ±  4%  perf-profile.self.cycles-pp.xas_load
      0.52 ±  6%      +0.3        0.77 ±  6%  perf-profile.self.cycles-pp.iomap_write_iter
      0.62 ±  5%      +0.3        0.88 ±  6%  perf-profile.self.cycles-pp.__entry_text_start
      0.59 ±  4%      +0.3        0.92 ±  5%  perf-profile.self.cycles-pp.up_write
      0.69 ±  4%      +0.3        1.02 ±  5%  perf-profile.self.cycles-pp.iomap_file_buffered_write
      0.66 ±  5%      +0.3        1.00 ±  4%  perf-profile.self.cycles-pp.down_write
      0.73 ±  7%      +0.4        1.10 ±  5%  perf-profile.self.cycles-pp.write
      0.73 ±  3%      +0.4        1.10 ±  4%  perf-profile.self.cycles-pp.fault_in_readable
      0.97 ±  4%      +0.4        1.35 ±  5%  perf-profile.self.cycles-pp.memset_erms
      0.79 ±  5%      +0.4        1.17 ±  4%  perf-profile.self.cycles-pp.xfs_buffered_write_iomap_begin
      1.00 ±  5%      +0.5        1.47 ±  4%  perf-profile.self.cycles-pp.__might_resched
      0.93 ±  3%      +0.5        1.44 ±  6%  perf-profile.self.cycles-pp.vfs_write
      1.13 ±  5%      +0.5        1.65 ±  4%  perf-profile.self.cycles-pp.syscall_return_via_sysret
      1.06 ±  3%      +0.5        1.58 ±  5%  perf-profile.self.cycles-pp.iomap_iter
      1.45 ±  3%      +0.7        2.13 ±  5%  perf-profile.self.cycles-pp.rwsem_spin_on_owner
      1.49 ±  4%      +0.7        2.20 ±  5%  perf-profile.self.cycles-pp.__filemap_get_folio
      1.74 ±  5%      +0.7        2.46 ±  6%  perf-profile.self.cycles-pp.copy_user_enhanced_fast_string
      0.23 ±  6%      +0.8        1.05 ±  7%  perf-profile.self.cycles-pp.native_queued_spin_lock_slowpath
      2.14 ±  3%      +0.9        3.02 ±  4%  perf-profile.self.cycles-pp.__iomap_write_begin
      4.82 ±  4%      +2.1        6.89 ±  5%  perf-profile.self.cycles-pp.iomap_write_end




Disclaimer:
Results have been estimated based on internal Intel analysis and are provided
for informational purposes only. Any difference in system hardware or software
design or configuration may affect actual performance.
kernel test robot May 27, 2022, 9:12 a.m. UTC | #4
(please be noted we reported
"[xfs]  55a3d6bbc5:  aim7.jobs-per-min 19.8% improvement",
but now we noticed a func issue)

Greeting,

FYI, we noticed the following commit (built with gcc-11):

commit: 55a3d6bbc5cc34a8e5aeb7ea5645a72cafddef2b ("[PATCH 1/2] xfs: bound maximum wait time for inodegc work")
url: https://github.com/intel-lab-lkp/linux/commits/Dave-Chinner/xfs-non-blocking-inodegc-pushes/20220524-144000
base: https://git.kernel.org/cgit/fs/xfs/xfs-linux.git for-next
patch link: https://lore.kernel.org/linux-xfs/20220524063802.1938505-2-david@fromorbit.com

in testcase: xfstests
version: xfstests-x86_64-48c5dbb-1_20220523
with following parameters:

	disk: 4HDD
	fs: xfs
	test: xfs-group-43
	ucode: 0x21

test-description: xfstests is a regression test suite for xfs and other files ystems.
test-url: git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git


on test machine: 4 threads 1 sockets Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz with 8G memory

caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):



If you fix the issue, kindly add following tag
Reported-by: kernel test robot <oliver.sang@intel.com>


[  439.394273][   T16] ==================================================================
[  439.394411][   T16] BUG: KASAN: use-after-free in xfs_attr3_node_inactive+0x63c/0x900 [xfs]
[  439.394716][   T16] Read of size 4 at addr ffff88817a448844 by task kworker/0:1/16
[  439.394849][   T16]
[  439.394897][   T16] CPU: 0 PID: 16 Comm: kworker/0:1 Not tainted 5.18.0-rc2-00158-g55a3d6bbc5cc #1
[  439.395052][   T16] Hardware name: Hewlett-Packard p6-1451cx/2ADA, BIOS 8.15 02/05/2013
[  439.395191][   T16] Workqueue: xfs-inodegc/sdb4 xfs_inodegc_worker [xfs]
[  439.395460][   T16] Call Trace:
[  439.395648][   T16]  <TASK>
[  439.395706][   T16]  ? xfs_attr3_node_inactive+0x63c/0x900 [xfs]
[  439.395948][   T16]  dump_stack_lvl+0x34/0x44
[  439.396033][   T16]  print_address_description+0x1f/0x200
[  439.396150][   T16]  ? xfs_attr3_node_inactive+0x63c/0x900 [xfs]
[  439.396387][   T16]  print_report.cold+0x55/0x22c
[  439.396479][   T16]  ? _raw_spin_lock_irqsave+0x87/0x100
[  439.396577][   T16]  kasan_report+0xab/0x140
[  439.396658][   T16]  ? xfs_attr3_node_inactive+0x63c/0x900 [xfs]
[  439.396892][   T16]  xfs_attr3_node_inactive+0x63c/0x900 [xfs]
[  439.397121][   T16]  ? xfs_buf_set_ref+0x6c/0xc0 [xfs]
[  439.397337][   T16]  ? xfs_attr3_leaf_inactive+0x440/0x440 [xfs]
[  439.397568][   T16]  ? common_interrupt+0x17/0xc0
[  439.397658][   T16]  ? asm_common_interrupt+0x1e/0x40
[  439.397751][   T16]  ? xfs_trans_buf_set_type+0x91/0x200 [xfs]
[  439.397985][   T16]  ? xfs_trans_buf_set_type+0xc3/0x200 [xfs]
[  439.398218][   T16]  xfs_attr3_root_inactive+0x1a0/0x500 [xfs]
[  439.398650][   T16]  ? xfs_attr3_node_inactive+0x900/0x900 [xfs]
[  439.398875][   T16]  ? xfs_trans_alloc+0x325/0x780 [xfs]
[  439.399098][   T16]  xfs_attr_inactive+0x479/0x580 [xfs]
[  439.399312][   T16]  ? xfs_attr3_root_inactive+0x500/0x500 [xfs]
[  439.399534][   T16]  ? _raw_spin_lock+0x81/0x100
[  439.399622][   T16]  ? _raw_write_lock_irq+0x100/0x100
[  439.399717][   T16]  xfs_inactive+0x542/0x700 [xfs]
[  439.400037][   T16]  xfs_inodegc_worker+0x176/0x380 [xfs]
[  439.400377][   T16]  process_one_work+0x689/0x1040
[  439.400481][   T16]  worker_thread+0x5b3/0xf00
[  439.400579][   T16]  ? process_one_work+0x1040/0x1040
[  439.400684][   T16]  kthread+0x292/0x340
[  439.400771][   T16]  ? kthread_complete_and_exit+0x40/0x40
[  439.400878][   T16]  ret_from_fork+0x22/0x30
[  439.400962][   T16]  </TASK>
[  439.401020][   T16]
[  439.401065][   T16] Allocated by task 16:
[  439.401141][   T16]  kasan_save_stack+0x1e/0x40
[  439.401226][   T16]  __kasan_slab_alloc+0x66/0x80
[  439.401313][   T16]  kmem_cache_alloc+0x13c/0x300
[  439.401400][   T16]  _xfs_buf_alloc+0x61/0xd80 [xfs]
[  439.401620][   T16]  xfs_buf_get_map+0x12a/0xac0 [xfs]
[  439.401831][   T16]  xfs_buf_read_map+0xb7/0x980 [xfs]
[  439.402042][   T16]  xfs_trans_read_buf_map+0x441/0xb00 [xfs]
[  439.402271][   T16]  xfs_da_read_buf+0x1ce/0x2c0 [xfs]
[  439.402474][   T16]  xfs_da3_node_read+0x23/0x80 [xfs]
[  439.402674][   T16]  xfs_attr3_root_inactive+0xbf/0x500 [xfs]
[  439.402891][   T16]  xfs_attr_inactive+0x479/0x580 [xfs]
[  439.403101][   T16]  xfs_inactive+0x542/0x700 [xfs]
[  439.403309][   T16]  xfs_inodegc_worker+0x176/0x380 [xfs]
[  439.403525][   T16]  process_one_work+0x689/0x1040
[  439.403615][   T16]  worker_thread+0x5b3/0xf00
[  439.403697][   T16]  kthread+0x292/0x340
[  439.403771][   T16]  ret_from_fork+0x22/0x30
[  439.403852][   T16]
[  439.404243][   T16] Freed by task 16:
[  439.404313][   T16]  kasan_save_stack+0x1e/0x40
[  439.404398][   T16]  kasan_set_track+0x21/0x40
[  439.404482][   T16]  kasan_set_free_info+0x20/0x40
[  439.404571][   T16]  __kasan_slab_free+0x108/0x180
[  439.404659][   T16]  kmem_cache_free+0xb5/0x380
[  439.404743][   T16]  xfs_buf_rele+0x5d0/0xa00 [xfs]
[  439.404963][   T16]  xfs_attr3_node_inactive+0x1e2/0x900 [xfs]
[  439.405288][   T16]  xfs_attr3_root_inactive+0x1a0/0x500 [xfs]
[  439.405632][   T16]  xfs_attr_inactive+0x479/0x580 [xfs]
[  439.405925][   T16]  xfs_inactive+0x542/0x700 [xfs]
[  439.406135][   T16]  xfs_inodegc_worker+0x176/0x380 [xfs]
[  439.406350][   T16]  process_one_work+0x689/0x1040
[  439.406440][   T16]  worker_thread+0x5b3/0xf00
[  439.406524][   T16]  kthread+0x292/0x340
[  439.406598][   T16]  ret_from_fork+0x22/0x30
[  439.406679][   T16]
[  439.406724][   T16] Last potentially related work creation:
[  439.406822][   T16]  kasan_save_stack+0x1e/0x40
[  439.406907][   T16]  __kasan_record_aux_stack+0x96/0xc0
[  439.407001][   T16]  insert_work+0x4a/0x340
[  439.407079][   T16]  __queue_work+0x515/0xd40
[  439.407160][   T16]  queue_work_on+0x48/0x80
[  439.407240][   T16]  xfs_buf_bio_end_io+0x272/0x380 [xfs]
[  439.407456][   T16]  blk_update_request+0x2be/0xe80
[  439.407553][   T16]  scsi_end_request+0x71/0x600
[  439.407641][   T16]  scsi_io_completion+0x126/0xb00
[  439.407731][   T16]  blk_complete_reqs+0xaa/0x100
[  439.407824][   T16]  __do_softirq+0x1a2/0x5f7
[  439.407916][   T16]
[  439.407962][   T16] Second to last potentially related work creation:
[  439.408083][   T16]  kasan_save_stack+0x1e/0x40
[  439.408184][   T16]  __kasan_record_aux_stack+0x96/0xc0
[  439.408294][   T16]  insert_work+0x4a/0x340
[  439.408381][   T16]  __queue_work+0x515/0xd40
[  439.408466][   T16]  queue_work_on+0x48/0x80
[  439.408546][   T16]  xfs_buf_bio_end_io+0x272/0x380 [xfs]
[  439.408773][   T16]  blk_update_request+0x2be/0xe80
[  439.408865][   T16]  scsi_end_request+0x71/0x600
[  439.408951][   T16]  scsi_io_completion+0x126/0xb00
[  439.409040][   T16]  blk_complete_reqs+0xaa/0x100
[  439.409127][   T16]  __do_softirq+0x1a2/0x5f7
[  439.409209][   T16]
[  439.409254][   T16] The buggy address belongs to the object at ffff88817a448700
[  439.409254][   T16]  which belongs to the cache xfs_buf of size 360
[  439.409486][   T16] The buggy address is located 324 bytes inside of
[  439.409486][   T16]  360-byte region [ffff88817a448700, ffff88817a448868)
[  439.409708][   T16]
[  439.409754][   T16] The buggy address belongs to the physical page:
[  439.409863][   T16] page:000000009a495195 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x17a448
[  439.410036][   T16] head:000000009a495195 order:1 compound_mapcount:0 compound_pincount:0
[  439.410175][   T16] flags: 0x17ffffc0010200(slab|head|node=0|zone=2|lastcpupid=0x1fffff)
[  439.410318][   T16] raw: 0017ffffc0010200 dead000000000100 dead000000000122 ffff888134c91400
[  439.410466][   T16] raw: 0000000000000000 0000000080120012 00000001ffffffff 0000000000000000
[  439.410609][   T16] page dumped because: kasan: bad access detected
[  439.410718][   T16]
[  439.410763][   T16] Memory state around the buggy address:
[  439.410860][   T16]  ffff88817a448700: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  439.410996][   T16]  ffff88817a448780: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  439.411133][   T16] >ffff88817a448800: fb fb fb fb fb fb fb fb fb fb fb fb fb fc fc fc
[  439.411268][   T16]                                            ^
[  439.411375][   T16]  ffff88817a448880: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
[  439.411515][   T16]  ffff88817a448900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  439.411650][   T16] ==================================================================



To reproduce:

        git clone https://github.com/intel/lkp-tests.git
        cd lkp-tests
        sudo bin/lkp install job.yaml           # job file is attached in this email
        bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
        sudo bin/lkp run generated-yaml-file

        # if come across any failure that blocks the test,
        # please remove ~/.lkp and /lkp dir to run from a clean state.
diff mbox series

Patch

diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 5269354b1b69..786702273621 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -440,7 +440,7 @@  xfs_inodegc_queue_all(
 	for_each_online_cpu(cpu) {
 		gc = per_cpu_ptr(mp->m_inodegc, cpu);
 		if (!llist_empty(&gc->list))
-			queue_work_on(cpu, mp->m_inodegc_wq, &gc->work);
+			mod_delayed_work_on(cpu, mp->m_inodegc_wq, &gc->work, 0);
 	}
 }
 
@@ -1841,8 +1841,8 @@  void
 xfs_inodegc_worker(
 	struct work_struct	*work)
 {
-	struct xfs_inodegc	*gc = container_of(work, struct xfs_inodegc,
-							work);
+	struct xfs_inodegc	*gc = container_of(to_delayed_work(work),
+						struct xfs_inodegc, work);
 	struct llist_node	*node = llist_del_all(&gc->list);
 	struct xfs_inode	*ip, *n;
 
@@ -2014,6 +2014,7 @@  xfs_inodegc_queue(
 	struct xfs_inodegc	*gc;
 	int			items;
 	unsigned int		shrinker_hits;
+	unsigned long		queue_delay = 1;
 
 	trace_xfs_inode_set_need_inactive(ip);
 	spin_lock(&ip->i_flags_lock);
@@ -2025,19 +2026,26 @@  xfs_inodegc_queue(
 	items = READ_ONCE(gc->items);
 	WRITE_ONCE(gc->items, items + 1);
 	shrinker_hits = READ_ONCE(gc->shrinker_hits);
-	put_cpu_ptr(gc);
 
-	if (!xfs_is_inodegc_enabled(mp))
+	/*
+	 * We queue the work while holding the current CPU so that the work
+	 * is scheduled to run on this CPU.
+	 */
+	if (!xfs_is_inodegc_enabled(mp)) {
+		put_cpu_ptr(gc);
 		return;
-
-	if (xfs_inodegc_want_queue_work(ip, items)) {
-		trace_xfs_inodegc_queue(mp, __return_address);
-		queue_work(mp->m_inodegc_wq, &gc->work);
 	}
 
+	if (xfs_inodegc_want_queue_work(ip, items))
+		queue_delay = 0;
+
+	trace_xfs_inodegc_queue(mp, __return_address);
+	mod_delayed_work(mp->m_inodegc_wq, &gc->work, queue_delay);
+	put_cpu_ptr(gc);
+
 	if (xfs_inodegc_want_flush_work(ip, items, shrinker_hits)) {
 		trace_xfs_inodegc_throttle(mp, __return_address);
-		flush_work(&gc->work);
+		flush_delayed_work(&gc->work);
 	}
 }
 
@@ -2054,7 +2062,7 @@  xfs_inodegc_cpu_dead(
 	unsigned int		count = 0;
 
 	dead_gc = per_cpu_ptr(mp->m_inodegc, dead_cpu);
-	cancel_work_sync(&dead_gc->work);
+	cancel_delayed_work_sync(&dead_gc->work);
 
 	if (llist_empty(&dead_gc->list))
 		return;
@@ -2073,12 +2081,12 @@  xfs_inodegc_cpu_dead(
 	llist_add_batch(first, last, &gc->list);
 	count += READ_ONCE(gc->items);
 	WRITE_ONCE(gc->items, count);
-	put_cpu_ptr(gc);
 
 	if (xfs_is_inodegc_enabled(mp)) {
 		trace_xfs_inodegc_queue(mp, __return_address);
-		queue_work(mp->m_inodegc_wq, &gc->work);
+		mod_delayed_work(mp->m_inodegc_wq, &gc->work, 0);
 	}
+	put_cpu_ptr(gc);
 }
 
 /*
@@ -2173,7 +2181,7 @@  xfs_inodegc_shrinker_scan(
 			unsigned int	h = READ_ONCE(gc->shrinker_hits);
 
 			WRITE_ONCE(gc->shrinker_hits, h + 1);
-			queue_work_on(cpu, mp->m_inodegc_wq, &gc->work);
+			mod_delayed_work_on(cpu, mp->m_inodegc_wq, &gc->work, 0);
 			no_items = false;
 		}
 	}
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 8c42786e4942..377c5e59f6a0 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -61,7 +61,7 @@  struct xfs_error_cfg {
  */
 struct xfs_inodegc {
 	struct llist_head	list;
-	struct work_struct	work;
+	struct delayed_work	work;
 
 	/* approximate count of inodes in the list */
 	unsigned int		items;
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 51ce127a0cc6..62f6b97355a2 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1073,7 +1073,7 @@  xfs_inodegc_init_percpu(
 		gc = per_cpu_ptr(mp->m_inodegc, cpu);
 		init_llist_head(&gc->list);
 		gc->items = 0;
-		INIT_WORK(&gc->work, xfs_inodegc_worker);
+		INIT_DELAYED_WORK(&gc->work, xfs_inodegc_worker);
 	}
 	return 0;
 }