a10e552 updated abd_free_linear_page() to no longer call abd_update_scatter_stat(). This meant that linear pages that were not attached to Direct I/O requests were not doing waste accounting for the ARC. This led to performance issues due to incorrect ARC accounting that resulted in 100% of CPU time being spent in arc_evict() during prolonged I/O workloads with the ARC.
The call to abd_update_scatter_stats() is now conditionally called in abd_free_linear_page() when the ABD is not from a Direct I/O request.
Properly handling ARC waste accounting for linear page ABD's in Linux.
Motivation and Context
Without this change, ARC performance can degrade with 100% of the CPU time being spent in arc_evict() during prolonged I/O loads.
This issue was observed in #16728.
Description
Added abd_update_scatter_stat() back to abd_free_linear_page() so it is called in the event that the ABD is not from a Direct I/O request.
How Has This Been Tested?
Types of changes
[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Performance enhancement (non-breaking change which improves efficiency)
[ ] Code cleanup (non-breaking change which makes code smaller or more readable)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Library ABI change (libzfs, libzfs_core, libnvpair, libuutil and libzfsbootenv)
[ ] Documentation (a change to man pages or other documentation)
a10e552 updated abd_free_linear_page() to no longer call abd_update_scatter_stat(). This meant that linear pages that were not attached to Direct I/O requests were not doing waste accounting for the ARC. This led to performance issues due to incorrect ARC accounting that resulted in 100% of CPU time being spent in arc_evict() during prolonged I/O workloads with the ARC.
The call to abd_update_scatter_stats() is now conditionally called in abd_free_linear_page() when the ABD is not from a Direct I/O request.
Properly handling ARC waste accounting for linear page ABD's in Linux.
Motivation and Context
Without this change, ARC performance can degrade with 100% of the CPU time being spent in arc_evict() during prolonged I/O loads.
This issue was observed in #16728.
Description
Added abd_update_scatter_stat() back to abd_free_linear_page() so it is called in the event that the ABD is not from a Direct I/O request.
How Has This Been Tested?
Types of changes
Checklist:
Signed-off-by
.