mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Improve caching for dbuf prefetches
To avoid read errors with transaction open dmu_tx_check_ioerr() is used to read everything required in advance. But there seems to be a chance for the buffer to evicted from dbuf cache in between, which result in immediate eviction from ARC, which may require additional disk read later in a place where error handling is problematic. To partially workaround this introduce a new flag DMU_IS_PREFETCH, relayed to ARC as ARC_FLAG_PREFETCH | ARC_FLAG_PRESCIENT_PREFETCH, making ARC delay eviction by at least several seconds, or till the actual read inside the transaction, that will promote it to demand access. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Alexander Motin <alexander.motin@TrueNAS.com> Closes #18160
This commit is contained in:
committed by
Tony Hutter
parent
11647c669e
commit
25327ed7ce
@@ -573,6 +573,7 @@ typedef enum dmu_flags {
|
||||
DMU_PARTIAL_FIRST = 1 << 7, /* First partial access. */
|
||||
DMU_PARTIAL_MORE = 1 << 8, /* Following partial access. */
|
||||
DMU_KEEP_CACHING = 1 << 9, /* Don't affect caching. */
|
||||
DMU_IS_PREFETCH = 1 << 10, /* This read is a prefetch. */
|
||||
} dmu_flags_t;
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user