Under a prolonged IO load the arc appears to deteriorate in performance. Telltale signs include
the arc size remaining "large", but the size of the MRU and MFU shrink until the arc is spending
100% CPU time in arc_evict(). The available system memory size also appears out-of-wack wrt
the arc size.
The issue is that the recent changes in the os-specific abd code related to DirectIO removed
the call to abd_update_scatter_stats() in abd_free_linear_page() to decrement the stats
counters (and the waste), so we continue to consume waste overhead without ever returning
the space back to the arc.
Describe how to reproduce the problem
This is probably easiest to reproduce by running with a small arc size to begin with, as the
size change will occur more quickly.
Include any warning/errors/backtraces from the system logs
For example, arc stats might look like this on a 256GB system:
System information
Describe the problem you're observing
Under a prolonged IO load the arc appears to deteriorate in performance. Telltale signs include the arc size remaining "large", but the size of the MRU and MFU shrink until the arc is spending 100% CPU time in arc_evict(). The available system memory size also appears out-of-wack wrt the arc size.
The issue is that the recent changes in the os-specific abd code related to DirectIO removed the call to
abd_update_scatter_stats()
inabd_free_linear_page()
to decrement the stats counters (and thewaste
), so we continue to consume waste overhead without ever returning the space back to the arc.Describe how to reproduce the problem
This is probably easiest to reproduce by running with a small arc size to begin with, as the size change will occur more quickly.
Include any warning/errors/backtraces from the system logs
For example, arc stats might look like this on a 256GB system: