+ /* Issue indicators */
+ za_read_derive(ksp, "mutex_miss", "mutex_operations", "miss");
+ za_read_derive(ksp, "hash_collisions", "hash_collisions", "");
+ za_read_derive(ksp, "memory_throttle_count", "memory_throttle_count", "");
+
+ /* Evictions */
+ za_read_derive(ksp, "evict_l2_cached", "cache_eviction", "cached");
+ za_read_derive(ksp, "evict_l2_eligible", "cache_eviction", "eligible");
+ za_read_derive(ksp, "evict_l2_ineligible", "cache_eviction", "ineligible");
+
+ /* Hits / misses */
+ za_read_derive(ksp, "demand_data_hits", "cache_result", "demand_data-hit");
+ za_read_derive(ksp, "demand_metadata_hits", "cache_result",
+ "demand_metadata-hit");
+ za_read_derive(ksp, "prefetch_data_hits", "cache_result",
+ "prefetch_data-hit");
+ za_read_derive(ksp, "prefetch_metadata_hits", "cache_result",
+ "prefetch_metadata-hit");
+ za_read_derive(ksp, "demand_data_misses", "cache_result", "demand_data-miss");
+ za_read_derive(ksp, "demand_metadata_misses", "cache_result",
+ "demand_metadata-miss");
+ za_read_derive(ksp, "prefetch_data_misses", "cache_result",
+ "prefetch_data-miss");
+ za_read_derive(ksp, "prefetch_metadata_misses", "cache_result",
+ "prefetch_metadata-miss");
+ za_read_derive(ksp, "mfu_hits", "cache_result", "mfu-hit");
+ za_read_derive(ksp, "mfu_ghost_hits", "cache_result", "mfu_ghost-hit");
+ za_read_derive(ksp, "mru_hits", "cache_result", "mru-hit");
+ za_read_derive(ksp, "mru_ghost_hits", "cache_result", "mru_ghost-hit");
+
+ cdtime_t now = cdtime();
+
+ /* Ratios */
+ if ((value_to_rate(&arc_hits, (value_t){.derive = get_zfs_value(ksp, "hits")},
+ DS_TYPE_DERIVE, now, &arc_hits_state) == 0) &&
+ (value_to_rate(&arc_misses,
+ (value_t){.derive = get_zfs_value(ksp, "misses")},
+ DS_TYPE_DERIVE, now, &arc_misses_state) == 0)) {
+ za_submit_ratio("arc", arc_hits, arc_misses);
+ }