Testing: On a VM with 100GB RAM, I run a script that fills up memory by reading a large file, and a dtrace script that observes ARC activity, specifically calls to kmem_depot_ws_reap(), arc_shrink(), and the size of the ARC and amount of free memory in the system. I also configured the abd chunk size to be 1KB. After memory fills up (enough that the ARC wants to increase the amount of free memory), the ARC will both reap the caches (kmem_depot_ws_reap()) and reduce the arc size (arc_shrink()). Since there are multiple abd chunks per slab, the ARC size must reduce significantly before there is sufficient free memory. Although reaping the abd cache takes several seconds, the ARC is able to reduce in size sufficiently to allow arc_get_data_buf_impl() to not block.
-- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/openzfs/openzfs/pull/590#issuecomment-374426372 ------------------------------------------ openzfs: openzfs-developer Permalink: https://openzfs.topicbox.com/groups/developer/discussions/T9a4d185b31cf8b80-M07ef67ba920d57913f5fe635 Delivery options: https://openzfs.topicbox.com/groups