openzfs / zfs

OpenZFS on Linux and FreeBSD
https://openzfs.github.io/openzfs-docs
Other
10.69k stars 1.76k forks source link

Update ABD stats for linear page Linux #16729

Closed bwatkinson closed 3 weeks ago

bwatkinson commented 3 weeks ago

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: