]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/sys/arc_impl.h
arc_read()/arc_access() refactoring and cleanup
[mirror_zfs.git] / include / sys / arc_impl.h
index 03eebafa995273eb5f76f507c713cb6e9f532961..9c77284ffe759d8fe584fa8602d8ea9bdbf11923 100644 (file)
@@ -101,9 +101,14 @@ struct arc_callback {
        boolean_t               acb_compressed;
        boolean_t               acb_noauth;
        boolean_t               acb_nobuf;
+       boolean_t               acb_wait;
+       int                     acb_wait_error;
+       kmutex_t                acb_wait_lock;
+       kcondvar_t              acb_wait_cv;
        zbookmark_phys_t        acb_zb;
        zio_t                   *acb_zio_dummy;
        zio_t                   *acb_zio_head;
+       arc_callback_t          *acb_prev;
        arc_callback_t          *acb_next;
 };
 
@@ -511,15 +516,27 @@ struct arc_buf_hdr {
 };
 
 typedef struct arc_stats {
+       /* Number of requests that were satisfied without I/O. */
        kstat_named_t arcstat_hits;
+       /* Number of requests for which I/O was already running. */
+       kstat_named_t arcstat_iohits;
+       /* Number of requests for which I/O has to be issued. */
        kstat_named_t arcstat_misses;
+       /* Same three, but specifically for demand data. */
        kstat_named_t arcstat_demand_data_hits;
+       kstat_named_t arcstat_demand_data_iohits;
        kstat_named_t arcstat_demand_data_misses;
+       /* Same three, but specifically for demand metadata. */
        kstat_named_t arcstat_demand_metadata_hits;
+       kstat_named_t arcstat_demand_metadata_iohits;
        kstat_named_t arcstat_demand_metadata_misses;
+       /* Same three, but specifically for prefetch data. */
        kstat_named_t arcstat_prefetch_data_hits;
+       kstat_named_t arcstat_prefetch_data_iohits;
        kstat_named_t arcstat_prefetch_data_misses;
+       /* Same three, but specifically for prefetch metadata. */
        kstat_named_t arcstat_prefetch_metadata_hits;
+       kstat_named_t arcstat_prefetch_metadata_iohits;
        kstat_named_t arcstat_prefetch_metadata_misses;
        kstat_named_t arcstat_mru_hits;
        kstat_named_t arcstat_mru_ghost_hits;
@@ -844,8 +861,18 @@ typedef struct arc_stats {
        kstat_named_t arcstat_meta_max;
        kstat_named_t arcstat_meta_min;
        kstat_named_t arcstat_async_upgrade_sync;
+       /* Number of predictive prefetch requests. */
+       kstat_named_t arcstat_predictive_prefetch;
+       /* Number of requests for which predictive prefetch has completed. */
        kstat_named_t arcstat_demand_hit_predictive_prefetch;
+       /* Number of requests for which predictive prefetch was running. */
+       kstat_named_t arcstat_demand_iohit_predictive_prefetch;
+       /* Number of prescient prefetch requests. */
+       kstat_named_t arcstat_prescient_prefetch;
+       /* Number of requests for which prescient prefetch has completed. */
        kstat_named_t arcstat_demand_hit_prescient_prefetch;
+       /* Number of requests for which prescient prefetch was running. */
+       kstat_named_t arcstat_demand_iohit_prescient_prefetch;
        kstat_named_t arcstat_need_free;
        kstat_named_t arcstat_sys_free;
        kstat_named_t arcstat_raw_size;
@@ -855,14 +882,19 @@ typedef struct arc_stats {
 
 typedef struct arc_sums {
        wmsum_t arcstat_hits;
+       wmsum_t arcstat_iohits;
        wmsum_t arcstat_misses;
        wmsum_t arcstat_demand_data_hits;
+       wmsum_t arcstat_demand_data_iohits;
        wmsum_t arcstat_demand_data_misses;
        wmsum_t arcstat_demand_metadata_hits;
+       wmsum_t arcstat_demand_metadata_iohits;
        wmsum_t arcstat_demand_metadata_misses;
        wmsum_t arcstat_prefetch_data_hits;
+       wmsum_t arcstat_prefetch_data_iohits;
        wmsum_t arcstat_prefetch_data_misses;
        wmsum_t arcstat_prefetch_metadata_hits;
+       wmsum_t arcstat_prefetch_metadata_iohits;
        wmsum_t arcstat_prefetch_metadata_misses;
        wmsum_t arcstat_mru_hits;
        wmsum_t arcstat_mru_ghost_hits;
@@ -936,8 +968,12 @@ typedef struct arc_sums {
        wmsum_t arcstat_prune;
        aggsum_t arcstat_meta_used;
        wmsum_t arcstat_async_upgrade_sync;
+       wmsum_t arcstat_predictive_prefetch;
        wmsum_t arcstat_demand_hit_predictive_prefetch;
+       wmsum_t arcstat_demand_iohit_predictive_prefetch;
+       wmsum_t arcstat_prescient_prefetch;
        wmsum_t arcstat_demand_hit_prescient_prefetch;
+       wmsum_t arcstat_demand_iohit_prescient_prefetch;
        wmsum_t arcstat_raw_size;
        wmsum_t arcstat_cached_only_in_progress;
        wmsum_t arcstat_abd_chunk_waste_size;