Message ID | 20220524063802.1938505-2-david@fromorbit.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs: non-blocking inodegc pushes | expand |
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 >
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.
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.
(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 --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; }