mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
L2ARC: Implement persistent markers with consistent tail scanning
This commit introduces per-sublist persistent markers that eliminate redundant tail scanning between L2ARC iterations, providing significant CPU efficiency improvements. Markers are pre-allocated during device initialization and properly cleaned up during device removal. The implementation uses conditional behavior based on device capacity: small devices (capacity < arc_c) retain original HEAD/TAIL scanning based on ARC warmup state, while large devices (capacity >= arc_c) use the persistent marker approach for optimal CPU efficiency. Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ameer Hamza <ahamza@ixsystems.com> Closes #18093
This commit is contained in:
committed by
Brian Behlendorf
parent
3523b5f3f9
commit
2f41b9d865
@@ -41,6 +41,16 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* L2ARC state and statistics for persistent marker management.
|
||||
*/
|
||||
typedef struct l2arc_info {
|
||||
arc_buf_hdr_t ***l2arc_markers; /* persistent markers */
|
||||
uint64_t l2arc_total_writes; /* total writes for reset */
|
||||
uint64_t l2arc_total_capacity; /* total L2ARC capacity */
|
||||
uint64_t l2arc_smallest_capacity; /* smallest device capacity */
|
||||
} l2arc_info_t;
|
||||
|
||||
/*
|
||||
* Note that buffers can be in one of 6 states:
|
||||
* ARC_anon - anonymous (discussed below)
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include <sys/dsl_crypt.h>
|
||||
#include <sys/zfeature.h>
|
||||
#include <sys/zthr.h>
|
||||
#include <sys/arc_impl.h>
|
||||
#include <sys/dsl_deadlist.h>
|
||||
#include <zfeature_common.h>
|
||||
|
||||
@@ -283,6 +284,7 @@ struct spa {
|
||||
spa_aux_vdev_t spa_spares; /* hot spares */
|
||||
spa_aux_vdev_t spa_l2cache; /* L2ARC cache devices */
|
||||
boolean_t spa_aux_sync_uber; /* need to sync aux uber */
|
||||
l2arc_info_t spa_l2arc_info; /* L2ARC state and stats */
|
||||
nvlist_t *spa_label_features; /* Features for reading MOS */
|
||||
uint64_t spa_config_object; /* MOS object for pool config */
|
||||
uint64_t spa_config_generation; /* config generation number */
|
||||
|
||||
Reference in New Issue
Block a user