mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
OpenZFS restructuring - arc_stats
Make arc_stats visible to platform code. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Igor Kozhukhov <igor@dilos.org> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Closes #9386
This commit is contained in:
parent
7111c86ca3
commit
13a4027a7c
@ -278,6 +278,282 @@ struct arc_buf_hdr {
|
||||
*/
|
||||
arc_buf_hdr_crypt_t b_crypt_hdr;
|
||||
};
|
||||
|
||||
typedef struct arc_stats {
|
||||
kstat_named_t arcstat_hits;
|
||||
kstat_named_t arcstat_misses;
|
||||
kstat_named_t arcstat_demand_data_hits;
|
||||
kstat_named_t arcstat_demand_data_misses;
|
||||
kstat_named_t arcstat_demand_metadata_hits;
|
||||
kstat_named_t arcstat_demand_metadata_misses;
|
||||
kstat_named_t arcstat_prefetch_data_hits;
|
||||
kstat_named_t arcstat_prefetch_data_misses;
|
||||
kstat_named_t arcstat_prefetch_metadata_hits;
|
||||
kstat_named_t arcstat_prefetch_metadata_misses;
|
||||
kstat_named_t arcstat_mru_hits;
|
||||
kstat_named_t arcstat_mru_ghost_hits;
|
||||
kstat_named_t arcstat_mfu_hits;
|
||||
kstat_named_t arcstat_mfu_ghost_hits;
|
||||
kstat_named_t arcstat_deleted;
|
||||
/*
|
||||
* Number of buffers that could not be evicted because the hash lock
|
||||
* was held by another thread. The lock may not necessarily be held
|
||||
* by something using the same buffer, since hash locks are shared
|
||||
* by multiple buffers.
|
||||
*/
|
||||
kstat_named_t arcstat_mutex_miss;
|
||||
/*
|
||||
* Number of buffers skipped when updating the access state due to the
|
||||
* header having already been released after acquiring the hash lock.
|
||||
*/
|
||||
kstat_named_t arcstat_access_skip;
|
||||
/*
|
||||
* Number of buffers skipped because they have I/O in progress, are
|
||||
* indirect prefetch buffers that have not lived long enough, or are
|
||||
* not from the spa we're trying to evict from.
|
||||
*/
|
||||
kstat_named_t arcstat_evict_skip;
|
||||
/*
|
||||
* Number of times arc_evict_state() was unable to evict enough
|
||||
* buffers to reach its target amount.
|
||||
*/
|
||||
kstat_named_t arcstat_evict_not_enough;
|
||||
kstat_named_t arcstat_evict_l2_cached;
|
||||
kstat_named_t arcstat_evict_l2_eligible;
|
||||
kstat_named_t arcstat_evict_l2_ineligible;
|
||||
kstat_named_t arcstat_evict_l2_skip;
|
||||
kstat_named_t arcstat_hash_elements;
|
||||
kstat_named_t arcstat_hash_elements_max;
|
||||
kstat_named_t arcstat_hash_collisions;
|
||||
kstat_named_t arcstat_hash_chains;
|
||||
kstat_named_t arcstat_hash_chain_max;
|
||||
kstat_named_t arcstat_p;
|
||||
kstat_named_t arcstat_c;
|
||||
kstat_named_t arcstat_c_min;
|
||||
kstat_named_t arcstat_c_max;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_size;
|
||||
/*
|
||||
* Number of compressed bytes stored in the arc_buf_hdr_t's b_pabd.
|
||||
* Note that the compressed bytes may match the uncompressed bytes
|
||||
* if the block is either not compressed or compressed arc is disabled.
|
||||
*/
|
||||
kstat_named_t arcstat_compressed_size;
|
||||
/*
|
||||
* Uncompressed size of the data stored in b_pabd. If compressed
|
||||
* arc is disabled then this value will be identical to the stat
|
||||
* above.
|
||||
*/
|
||||
kstat_named_t arcstat_uncompressed_size;
|
||||
/*
|
||||
* Number of bytes stored in all the arc_buf_t's. This is classified
|
||||
* as "overhead" since this data is typically short-lived and will
|
||||
* be evicted from the arc when it becomes unreferenced unless the
|
||||
* zfs_keep_uncompressed_metadata or zfs_keep_uncompressed_level
|
||||
* values have been set (see comment in dbuf.c for more information).
|
||||
*/
|
||||
kstat_named_t arcstat_overhead_size;
|
||||
/*
|
||||
* Number of bytes consumed by internal ARC structures necessary
|
||||
* for tracking purposes; these structures are not actually
|
||||
* backed by ARC buffers. This includes arc_buf_hdr_t structures
|
||||
* (allocated via arc_buf_hdr_t_full and arc_buf_hdr_t_l2only
|
||||
* caches), and arc_buf_t structures (allocated via arc_buf_t
|
||||
* cache).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_hdr_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers of type equal to
|
||||
* ARC_BUFC_DATA. This is generally consumed by buffers backing
|
||||
* on disk user data (e.g. plain file contents).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_data_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers of type equal to
|
||||
* ARC_BUFC_METADATA. This is generally consumed by buffers
|
||||
* backing on disk data that is used for internal ZFS
|
||||
* structures (e.g. ZAP, dnode, indirect blocks, etc).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_metadata_size;
|
||||
/*
|
||||
* Number of bytes consumed by dmu_buf_impl_t objects.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_dbuf_size;
|
||||
/*
|
||||
* Number of bytes consumed by dnode_t objects.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_dnode_size;
|
||||
/*
|
||||
* Number of bytes consumed by bonus buffers.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_bonus_size;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_anon state. This includes *all* buffers in the arc_anon
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_DATA,
|
||||
* residing in the arc_anon state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_METADATA,
|
||||
* residing in the arc_anon state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_mru state. This includes *all* buffers in the arc_mru
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_DATA,
|
||||
* residing in the arc_mru state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_METADATA,
|
||||
* residing in the arc_mru state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes that *would have been* consumed by ARC
|
||||
* buffers in the arc_mru_ghost state. The key thing to note
|
||||
* here, is the fact that this size doesn't actually indicate
|
||||
* RAM consumption. The ghost lists only consist of headers and
|
||||
* don't actually have ARC buffers linked off of these headers.
|
||||
* Thus, *if* the headers had associated ARC buffers, these
|
||||
* buffers *would have* consumed this number of bytes.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_size;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_DATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_evictable_data;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_mfu state. This includes *all* buffers in the arc_mfu
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that are eligible for
|
||||
* eviction, of type ARC_BUFC_DATA, and reside in the arc_mfu
|
||||
* state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that are eligible for
|
||||
* eviction, of type ARC_BUFC_METADATA, and reside in the
|
||||
* arc_mfu state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes that *would have been* consumed by ARC
|
||||
* buffers in the arc_mfu_ghost state. See the comment above
|
||||
* arcstat_mru_ghost_size for more details.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_size;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_DATA, and linked off the arc_mfu_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_evictable_data;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_evictable_metadata;
|
||||
kstat_named_t arcstat_l2_hits;
|
||||
kstat_named_t arcstat_l2_misses;
|
||||
kstat_named_t arcstat_l2_feeds;
|
||||
kstat_named_t arcstat_l2_rw_clash;
|
||||
kstat_named_t arcstat_l2_read_bytes;
|
||||
kstat_named_t arcstat_l2_write_bytes;
|
||||
kstat_named_t arcstat_l2_writes_sent;
|
||||
kstat_named_t arcstat_l2_writes_done;
|
||||
kstat_named_t arcstat_l2_writes_error;
|
||||
kstat_named_t arcstat_l2_writes_lock_retry;
|
||||
kstat_named_t arcstat_l2_evict_lock_retry;
|
||||
kstat_named_t arcstat_l2_evict_reading;
|
||||
kstat_named_t arcstat_l2_evict_l1cached;
|
||||
kstat_named_t arcstat_l2_free_on_write;
|
||||
kstat_named_t arcstat_l2_abort_lowmem;
|
||||
kstat_named_t arcstat_l2_cksum_bad;
|
||||
kstat_named_t arcstat_l2_io_error;
|
||||
kstat_named_t arcstat_l2_lsize;
|
||||
kstat_named_t arcstat_l2_psize;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_l2_hdr_size;
|
||||
kstat_named_t arcstat_memory_throttle_count;
|
||||
kstat_named_t arcstat_memory_direct_count;
|
||||
kstat_named_t arcstat_memory_indirect_count;
|
||||
kstat_named_t arcstat_memory_all_bytes;
|
||||
kstat_named_t arcstat_memory_free_bytes;
|
||||
kstat_named_t arcstat_memory_available_bytes;
|
||||
kstat_named_t arcstat_no_grow;
|
||||
kstat_named_t arcstat_tempreserve;
|
||||
kstat_named_t arcstat_loaned_bytes;
|
||||
kstat_named_t arcstat_prune;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_meta_used;
|
||||
kstat_named_t arcstat_meta_limit;
|
||||
kstat_named_t arcstat_dnode_limit;
|
||||
kstat_named_t arcstat_meta_max;
|
||||
kstat_named_t arcstat_meta_min;
|
||||
kstat_named_t arcstat_async_upgrade_sync;
|
||||
kstat_named_t arcstat_demand_hit_predictive_prefetch;
|
||||
kstat_named_t arcstat_demand_hit_prescient_prefetch;
|
||||
kstat_named_t arcstat_need_free;
|
||||
kstat_named_t arcstat_sys_free;
|
||||
kstat_named_t arcstat_raw_size;
|
||||
} arc_stats_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
287
module/zfs/arc.c
287
module/zfs/arc.c
@ -448,287 +448,12 @@ int zfs_arc_meta_adjust_restarts = 4096;
|
||||
int zfs_arc_lotsfree_percent = 10;
|
||||
|
||||
/* The 6 states: */
|
||||
static arc_state_t ARC_anon;
|
||||
static arc_state_t ARC_mru;
|
||||
static arc_state_t ARC_mru_ghost;
|
||||
static arc_state_t ARC_mfu;
|
||||
static arc_state_t ARC_mfu_ghost;
|
||||
static arc_state_t ARC_l2c_only;
|
||||
|
||||
typedef struct arc_stats {
|
||||
kstat_named_t arcstat_hits;
|
||||
kstat_named_t arcstat_misses;
|
||||
kstat_named_t arcstat_demand_data_hits;
|
||||
kstat_named_t arcstat_demand_data_misses;
|
||||
kstat_named_t arcstat_demand_metadata_hits;
|
||||
kstat_named_t arcstat_demand_metadata_misses;
|
||||
kstat_named_t arcstat_prefetch_data_hits;
|
||||
kstat_named_t arcstat_prefetch_data_misses;
|
||||
kstat_named_t arcstat_prefetch_metadata_hits;
|
||||
kstat_named_t arcstat_prefetch_metadata_misses;
|
||||
kstat_named_t arcstat_mru_hits;
|
||||
kstat_named_t arcstat_mru_ghost_hits;
|
||||
kstat_named_t arcstat_mfu_hits;
|
||||
kstat_named_t arcstat_mfu_ghost_hits;
|
||||
kstat_named_t arcstat_deleted;
|
||||
/*
|
||||
* Number of buffers that could not be evicted because the hash lock
|
||||
* was held by another thread. The lock may not necessarily be held
|
||||
* by something using the same buffer, since hash locks are shared
|
||||
* by multiple buffers.
|
||||
*/
|
||||
kstat_named_t arcstat_mutex_miss;
|
||||
/*
|
||||
* Number of buffers skipped when updating the access state due to the
|
||||
* header having already been released after acquiring the hash lock.
|
||||
*/
|
||||
kstat_named_t arcstat_access_skip;
|
||||
/*
|
||||
* Number of buffers skipped because they have I/O in progress, are
|
||||
* indirect prefetch buffers that have not lived long enough, or are
|
||||
* not from the spa we're trying to evict from.
|
||||
*/
|
||||
kstat_named_t arcstat_evict_skip;
|
||||
/*
|
||||
* Number of times arc_evict_state() was unable to evict enough
|
||||
* buffers to reach its target amount.
|
||||
*/
|
||||
kstat_named_t arcstat_evict_not_enough;
|
||||
kstat_named_t arcstat_evict_l2_cached;
|
||||
kstat_named_t arcstat_evict_l2_eligible;
|
||||
kstat_named_t arcstat_evict_l2_ineligible;
|
||||
kstat_named_t arcstat_evict_l2_skip;
|
||||
kstat_named_t arcstat_hash_elements;
|
||||
kstat_named_t arcstat_hash_elements_max;
|
||||
kstat_named_t arcstat_hash_collisions;
|
||||
kstat_named_t arcstat_hash_chains;
|
||||
kstat_named_t arcstat_hash_chain_max;
|
||||
kstat_named_t arcstat_p;
|
||||
kstat_named_t arcstat_c;
|
||||
kstat_named_t arcstat_c_min;
|
||||
kstat_named_t arcstat_c_max;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_size;
|
||||
/*
|
||||
* Number of compressed bytes stored in the arc_buf_hdr_t's b_pabd.
|
||||
* Note that the compressed bytes may match the uncompressed bytes
|
||||
* if the block is either not compressed or compressed arc is disabled.
|
||||
*/
|
||||
kstat_named_t arcstat_compressed_size;
|
||||
/*
|
||||
* Uncompressed size of the data stored in b_pabd. If compressed
|
||||
* arc is disabled then this value will be identical to the stat
|
||||
* above.
|
||||
*/
|
||||
kstat_named_t arcstat_uncompressed_size;
|
||||
/*
|
||||
* Number of bytes stored in all the arc_buf_t's. This is classified
|
||||
* as "overhead" since this data is typically short-lived and will
|
||||
* be evicted from the arc when it becomes unreferenced unless the
|
||||
* zfs_keep_uncompressed_metadata or zfs_keep_uncompressed_level
|
||||
* values have been set (see comment in dbuf.c for more information).
|
||||
*/
|
||||
kstat_named_t arcstat_overhead_size;
|
||||
/*
|
||||
* Number of bytes consumed by internal ARC structures necessary
|
||||
* for tracking purposes; these structures are not actually
|
||||
* backed by ARC buffers. This includes arc_buf_hdr_t structures
|
||||
* (allocated via arc_buf_hdr_t_full and arc_buf_hdr_t_l2only
|
||||
* caches), and arc_buf_t structures (allocated via arc_buf_t
|
||||
* cache).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_hdr_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers of type equal to
|
||||
* ARC_BUFC_DATA. This is generally consumed by buffers backing
|
||||
* on disk user data (e.g. plain file contents).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_data_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers of type equal to
|
||||
* ARC_BUFC_METADATA. This is generally consumed by buffers
|
||||
* backing on disk data that is used for internal ZFS
|
||||
* structures (e.g. ZAP, dnode, indirect blocks, etc).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_metadata_size;
|
||||
/*
|
||||
* Number of bytes consumed by dmu_buf_impl_t objects.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_dbuf_size;
|
||||
/*
|
||||
* Number of bytes consumed by dnode_t objects.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_dnode_size;
|
||||
/*
|
||||
* Number of bytes consumed by bonus buffers.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_bonus_size;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_anon state. This includes *all* buffers in the arc_anon
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_DATA,
|
||||
* residing in the arc_anon state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_METADATA,
|
||||
* residing in the arc_anon state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_anon_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_mru state. This includes *all* buffers in the arc_mru
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_DATA,
|
||||
* residing in the arc_mru state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that meet the
|
||||
* following criteria: backing buffers of type ARC_BUFC_METADATA,
|
||||
* residing in the arc_mru state, and are eligible for eviction
|
||||
* (e.g. have no outstanding holds on the buffer).
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes that *would have been* consumed by ARC
|
||||
* buffers in the arc_mru_ghost state. The key thing to note
|
||||
* here, is the fact that this size doesn't actually indicate
|
||||
* RAM consumption. The ghost lists only consist of headers and
|
||||
* don't actually have ARC buffers linked off of these headers.
|
||||
* Thus, *if* the headers had associated ARC buffers, these
|
||||
* buffers *would have* consumed this number of bytes.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_size;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_DATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_evictable_data;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mru_ghost_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes consumed by ARC buffers residing in the
|
||||
* arc_mfu state. This includes *all* buffers in the arc_mfu
|
||||
* state; e.g. data, metadata, evictable, and unevictable buffers
|
||||
* are all included in this value.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_size;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that are eligible for
|
||||
* eviction, of type ARC_BUFC_DATA, and reside in the arc_mfu
|
||||
* state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_evictable_data;
|
||||
/*
|
||||
* Number of bytes consumed by ARC buffers that are eligible for
|
||||
* eviction, of type ARC_BUFC_METADATA, and reside in the
|
||||
* arc_mfu state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_evictable_metadata;
|
||||
/*
|
||||
* Total number of bytes that *would have been* consumed by ARC
|
||||
* buffers in the arc_mfu_ghost state. See the comment above
|
||||
* arcstat_mru_ghost_size for more details.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_size;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_DATA, and linked off the arc_mfu_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_evictable_data;
|
||||
/*
|
||||
* Number of bytes that *would have been* consumed by ARC
|
||||
* buffers that are eligible for eviction, of type
|
||||
* ARC_BUFC_METADATA, and linked off the arc_mru_ghost state.
|
||||
* Not updated directly; only synced in arc_kstat_update.
|
||||
*/
|
||||
kstat_named_t arcstat_mfu_ghost_evictable_metadata;
|
||||
kstat_named_t arcstat_l2_hits;
|
||||
kstat_named_t arcstat_l2_misses;
|
||||
kstat_named_t arcstat_l2_feeds;
|
||||
kstat_named_t arcstat_l2_rw_clash;
|
||||
kstat_named_t arcstat_l2_read_bytes;
|
||||
kstat_named_t arcstat_l2_write_bytes;
|
||||
kstat_named_t arcstat_l2_writes_sent;
|
||||
kstat_named_t arcstat_l2_writes_done;
|
||||
kstat_named_t arcstat_l2_writes_error;
|
||||
kstat_named_t arcstat_l2_writes_lock_retry;
|
||||
kstat_named_t arcstat_l2_evict_lock_retry;
|
||||
kstat_named_t arcstat_l2_evict_reading;
|
||||
kstat_named_t arcstat_l2_evict_l1cached;
|
||||
kstat_named_t arcstat_l2_free_on_write;
|
||||
kstat_named_t arcstat_l2_abort_lowmem;
|
||||
kstat_named_t arcstat_l2_cksum_bad;
|
||||
kstat_named_t arcstat_l2_io_error;
|
||||
kstat_named_t arcstat_l2_lsize;
|
||||
kstat_named_t arcstat_l2_psize;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_l2_hdr_size;
|
||||
kstat_named_t arcstat_memory_throttle_count;
|
||||
kstat_named_t arcstat_memory_direct_count;
|
||||
kstat_named_t arcstat_memory_indirect_count;
|
||||
kstat_named_t arcstat_memory_all_bytes;
|
||||
kstat_named_t arcstat_memory_free_bytes;
|
||||
kstat_named_t arcstat_memory_available_bytes;
|
||||
kstat_named_t arcstat_no_grow;
|
||||
kstat_named_t arcstat_tempreserve;
|
||||
kstat_named_t arcstat_loaned_bytes;
|
||||
kstat_named_t arcstat_prune;
|
||||
/* Not updated directly; only synced in arc_kstat_update. */
|
||||
kstat_named_t arcstat_meta_used;
|
||||
kstat_named_t arcstat_meta_limit;
|
||||
kstat_named_t arcstat_dnode_limit;
|
||||
kstat_named_t arcstat_meta_max;
|
||||
kstat_named_t arcstat_meta_min;
|
||||
kstat_named_t arcstat_async_upgrade_sync;
|
||||
kstat_named_t arcstat_demand_hit_predictive_prefetch;
|
||||
kstat_named_t arcstat_demand_hit_prescient_prefetch;
|
||||
kstat_named_t arcstat_need_free;
|
||||
kstat_named_t arcstat_sys_free;
|
||||
kstat_named_t arcstat_raw_size;
|
||||
} arc_stats_t;
|
||||
arc_state_t ARC_anon;
|
||||
arc_state_t ARC_mru;
|
||||
arc_state_t ARC_mru_ghost;
|
||||
arc_state_t ARC_mfu;
|
||||
arc_state_t ARC_mfu_ghost;
|
||||
arc_state_t ARC_l2c_only;
|
||||
|
||||
static arc_stats_t arc_stats = {
|
||||
{ "hits", KSTAT_DATA_UINT64 },
|
||||
|
Loading…
Reference in New Issue
Block a user