root / plugins / zfs / zfs_cache_efficiency @ db27ad45
Historique | Voir | Annoter | Télécharger (7,25 ko)
| 1 | 208aeb0c | Wiktor Niesiobedzki | #!/bin/sh |
|---|---|---|---|
| 2 | # ZFS ARC statistics for FreeBSD |
||
| 3 | # Author alex@trull.org: |
||
| 4 | # |
||
| 5 | #%# family=auto |
||
| 6 | #%# capabilities=autoconf |
||
| 7 | |||
| 8 | sysctl='/sbin/sysctl' |
||
| 9 | 1bf10909 | Tuxis Internet Engineering | ostype=`uname -s` |
| 10 | procfile='/proc/spl/kstat/zfs/arcstats' |
||
| 11 | 208aeb0c | Wiktor Niesiobedzki | |
| 12 | case $1 in |
||
| 13 | config) |
||
| 14 | 1bf10909 | Tuxis Internet Engineering | cat <<EOF |
| 15 | 208aeb0c | Wiktor Niesiobedzki | graph_title ZFS ARC efficiency |
| 16 | graph_vlabel % |
||
| 17 | graph_scale no |
||
| 18 | 65652aa0 | dipohl | graph_category fs |
| 19 | 17f78427 | Lars Kruse | graph_args -l 0 |
| 20 | 208aeb0c | Wiktor Niesiobedzki | graph_info FreeBSD ZFS ARC Utilisation - Counters |
| 21 | graph_period minute |
||
| 22 | graph_order hits misses l2_hits l2_misses mfu_hits mru_hits arc_access_total mfu_hits_perc mru_hits_perc arc_misses_perc l2_efficency_tot |
||
| 23 | deleted.graph no |
||
| 24 | deleted.min 0 |
||
| 25 | deleted.type DERIVE |
||
| 26 | deleted.label Deleted? |
||
| 27 | demand_data_hits.graph no |
||
| 28 | demand_data_hits.min 0 |
||
| 29 | demand_data_hits.type DERIVE |
||
| 30 | demand_data_hits.label Cache hits - demand data |
||
| 31 | demand_data_misses.graph no |
||
| 32 | demand_data_misses.min 0 |
||
| 33 | demand_data_misses.type DERIVE |
||
| 34 | demand_data_misses.label Cache miss - demand data |
||
| 35 | demand_metadata_hits.graph no |
||
| 36 | demand_metadata_hits.min 0 |
||
| 37 | demand_metadata_hits.type DERIVE |
||
| 38 | demand_metadata_hits.label Cache hits - metadata |
||
| 39 | demand_metadata_misses.graph no |
||
| 40 | demand_metadata_misses.min 0 |
||
| 41 | demand_metadata_misses.type DERIVE |
||
| 42 | demand_metadata_misses.label Cache miss - metadata |
||
| 43 | evict_skip.graph no |
||
| 44 | evict_skip.min 0 |
||
| 45 | evict_skip.type DERIVE |
||
| 46 | evict_skip.label evict_skip? |
||
| 47 | hash_chain_max.graph no |
||
| 48 | hash_chain_max.min 0 |
||
| 49 | hash_chain_max.type DERIVE |
||
| 50 | hash_chain_max.label hash_chain_max? |
||
| 51 | hash_chains.graph no |
||
| 52 | hash_chains.min 0 |
||
| 53 | hash_chains.type DERIVE |
||
| 54 | hash_chains.label hash_chains? |
||
| 55 | hash_collisions.graph no |
||
| 56 | hash_collisions.min 0 |
||
| 57 | hash_collisions.type DERIVE |
||
| 58 | hash_collisions.label hash_collisions? |
||
| 59 | hash_elements.graph no |
||
| 60 | hash_elements.min 0 |
||
| 61 | hash_elements.type DERIVE |
||
| 62 | hash_elements.label hash_elements |
||
| 63 | hash_elements_max.graph no |
||
| 64 | hash_elements_max.min 0 |
||
| 65 | hash_elements_max.type DERIVE |
||
| 66 | hash_elements_max.label hash_elements_max? |
||
| 67 | hits.graph no |
||
| 68 | hits.min 0 |
||
| 69 | hits.type DERIVE |
||
| 70 | hits.label Cache hits |
||
| 71 | l2_abort_lowmem.graph no |
||
| 72 | l2_abort_lowmem.min 0 |
||
| 73 | l2_abort_lowmem.type GAUGE |
||
| 74 | l2_cksum_bad.graph no |
||
| 75 | l2_cksum_bad.min 0 |
||
| 76 | l2_cksum_bad.type DERIVE |
||
| 77 | l2_cksum_bad.label ARCL2 Bad checksum errors |
||
| 78 | l2_evict_lock_retry.graph no |
||
| 79 | l2_evict_lock_retry.min 0 |
||
| 80 | l2_evict_lock_retry.type DERIVE |
||
| 81 | l2_evict_reading.graph no |
||
| 82 | l2_evict_reading.min 0 |
||
| 83 | l2_evict_reading.type DERIVE |
||
| 84 | l2_feeds.graph no |
||
| 85 | l2_feeds.min 0 |
||
| 86 | l2_feeds.type DERIVE |
||
| 87 | l2_free_on_write.graph no |
||
| 88 | l2_free_on_write.min 0 |
||
| 89 | l2_free_on_write.type DERIVE |
||
| 90 | l2_hits.graph no |
||
| 91 | l2_hits.min 0 |
||
| 92 | l2_hits.type DERIVE |
||
| 93 | l2_hits.label L2ARC hits |
||
| 94 | l2_io_error.graph no |
||
| 95 | l2_io_error.min 0 |
||
| 96 | l2_io_error.type DERIVE |
||
| 97 | l2_io_error.label L2AC I/O errors |
||
| 98 | l2_misses.graph no |
||
| 99 | l2_misses.min 0 |
||
| 100 | l2_misses.type DERIVE |
||
| 101 | l2_misses.label L2ARC cache misses |
||
| 102 | l2_rw_clash.graph no |
||
| 103 | l2_rw_clash.min 0 |
||
| 104 | l2_rw_clash.type DERIVE |
||
| 105 | l2_writes_done.graph no |
||
| 106 | l2_writes_done.min 0 |
||
| 107 | l2_writes_done.type DERIVE |
||
| 108 | l2_writes_error.graph no |
||
| 109 | l2_writes_error.min 0 |
||
| 110 | l2_writes_error.type DERIVE |
||
| 111 | l2_writes_hdr_miss.graph no |
||
| 112 | l2_writes_hdr_miss.min 0 |
||
| 113 | l2_writes_hdr_miss.type DERIVE |
||
| 114 | l2_writes_hdr_miss.label L2ARC Header misses |
||
| 115 | l2_writes_sent.graph no |
||
| 116 | l2_writes_sent.min 0 |
||
| 117 | l2_writes_sent.type DERIVE |
||
| 118 | l2_writes_sent.label L2ARC writes sent |
||
| 119 | memory_throttle_count.graph no |
||
| 120 | memory_throttle_count.min 0 |
||
| 121 | memory_throttle_count.label memory_throttle_count? |
||
| 122 | mfu_ghost_hits.graph no |
||
| 123 | mfu_ghost_hits.min 0 |
||
| 124 | mfu_ghost_hits.type DERIVE |
||
| 125 | mfu_ghost_hits.label Most frequently used ghost hits |
||
| 126 | mfu_hits.graph no |
||
| 127 | mfu_hits.min 0 |
||
| 128 | mfu_hits.type DERIVE |
||
| 129 | mfu_hits.label Most frequently used hits |
||
| 130 | misses.graph no |
||
| 131 | misses.min 0 |
||
| 132 | misses.type DERIVE |
||
| 133 | misses.label Cache misses |
||
| 134 | mru_ghost_hits.graph no |
||
| 135 | mru_ghost_hits.min 0 |
||
| 136 | mru_ghost_hits.type DERIVE |
||
| 137 | mru_ghost_hits.label Most recently used ghost hits |
||
| 138 | mru_hits.graph no |
||
| 139 | mru_hits.min 0 |
||
| 140 | mru_hits.type DERIVE |
||
| 141 | mru_hits.label Most recently used hits |
||
| 142 | mutex_miss.graph no |
||
| 143 | mutex_miss.min 0 |
||
| 144 | mutex_miss.type DERIVE |
||
| 145 | prefetch_data_hits.graph no |
||
| 146 | prefetch_data_hits.min 0 |
||
| 147 | prefetch_data_hits.type DERIVE |
||
| 148 | prefetch_data_hits.label Prefetch Data hits |
||
| 149 | prefetch_data_misses.graph no |
||
| 150 | prefetch_data_misses.min 0 |
||
| 151 | prefetch_data_misses.type DERIVE |
||
| 152 | prefetch_data_misses.label Prefetch data misses |
||
| 153 | prefetch_metadata_hits.graph no |
||
| 154 | prefetch_metadata_hits.min 0 |
||
| 155 | prefetch_metadata_hits.type DERIVE |
||
| 156 | prefetch_metadata_hits.label Prefetch metadata hits |
||
| 157 | prefetch_metadata_misses.graph no |
||
| 158 | prefetch_metadata_misses.min 0 |
||
| 159 | prefetch_metadata_misses.type DERIVE |
||
| 160 | prefetch_metadata_misses.label Prefetch metadata misses |
||
| 161 | recycle_miss.graph no |
||
| 162 | recycle_miss.min 0 |
||
| 163 | recycle_miss.type DERIVE |
||
| 164 | recycle_miss.label Recycle misses |
||
| 165 | arc_access_total.graph no |
||
| 166 | arc_access_total.cdef hits,misses,ADDNAN |
||
| 167 | arc_access_total.label ARC access total number |
||
| 168 | arc_hits_perc.cdef hits,100,*,arc_access_total,/ |
||
| 169 | arc_hits_perc.label ARC hits |
||
| 170 | arc_hits_perc.graph no |
||
| 171 | real_hits.cdef mfu_hits,mru_hits,ADDNAN,100,*,hits,/ |
||
| 172 | real_hits.label ARC real (MRU + MFU) hits (no ghost & anon) |
||
| 173 | real_hits.graph no |
||
| 174 | mfu_hits_perc.cdef mfu_hits,100,*,arc_access_total,/ |
||
| 175 | mfu_hits_perc.label Most frequently used hits |
||
| 176 | mfu_hits_perc.graph yes |
||
| 177 | mfu_hits_perc.draw AREA |
||
| 178 | mru_hits_perc.cdef mru_hits,100,*,arc_access_total,/ |
||
| 179 | mru_hits_perc.label Most recently used hits |
||
| 180 | mru_hits_perc.graph yes |
||
| 181 | mru_hits_perc.draw STACK |
||
| 182 | arc_misses_perc.graph yes |
||
| 183 | arc_misses_perc.cdef misses,100,*,arc_access_total,/ |
||
| 184 | arc_misses_perc.label ARC misses |
||
| 185 | arc_misses_perc.draw STACK |
||
| 186 | l2_efficency_tot.graph yes |
||
| 187 | l2_efficency_tot.cdef l2_hits,100,*,l2_hits,l2_misses,hits,misses,ADDNAN,ADDNAN,ADDNAN,/ |
||
| 188 | l2_efficency_tot.label L2ARC hit ratio of L1&L2 accesses |
||
| 189 | EOF |
||
| 190 | # demand_data_hits_perc.cdef demand_data_hits,100,*,hits,/ |
||
| 191 | # demand_data_hits_perc.label Cache hits of demand data type |
||
| 192 | # demand_data_hits_perc.graph no |
||
| 193 | # demand_metadata_hits_perc.cdef demand_metadata_hits,100,*,hits,/ |
||
| 194 | # demand_metadata_hits_perc.label Cache hits of Demand metadata type |
||
| 195 | # demand_metadata_hits_perc.graph no |
||
| 196 | # prefetch_data_hits_perc.cdef prefetch_data_hits,100,*,hits,/ |
||
| 197 | # prefetch_data_hits_perc.label Prefetch data hits factor of all hits |
||
| 198 | # prefetch_data_hits_perc.graph no |
||
| 199 | # prefetch_metadata_hits_perc.cdef prefetch_metadata_hits,100,*,hits,/ |
||
| 200 | # prefetch_metadata_hits_perc.label Prefetch metadata hits factor off hits |
||
| 201 | # prefetch_metadata_hits_perc.graph no |
||
| 202 | # demand_data_efficency.cdef demand_data_hits,100,*,demand_data_hits,demand_data_misses,ADDNAN,/ |
||
| 203 | fba800ae | Veres Lajos | # demand_data_efficency.label Data demand efficiency |
| 204 | 208aeb0c | Wiktor Niesiobedzki | # demand_data_efficency.graph no |
| 205 | # anon_hits.graph no |
||
| 206 | # anon_hits.cdef hits,mfu_hits,mru_hits,mfu_ghost_hits,mru_ghost_hits,ADDNAN,ADDNAN,ADDNAN,-,100,*,hits,/ |
||
| 207 | # anon_hits.label ARC Anon hits |
||
| 208 | # mfu_ghost_hits_perc.cdef mfu_ghost_hits,100,*,hits,/ |
||
| 209 | # mfu_ghost_hits_perc.label Most frequently used ghost hits |
||
| 210 | # mfu_ghost_hits_perc.graph no |
||
| 211 | # mru_ghost_hits_perc.cdef mru_ghost_hits,100,*,hits,/ |
||
| 212 | # mru_ghost_hits_perc.label Most recently used ghost hits |
||
| 213 | # mru_ghost_hits_perc.graph no |
||
| 214 | 1bf10909 | Tuxis Internet Engineering | exit 0 |
| 215 | ;; |
||
| 216 | 208aeb0c | Wiktor Niesiobedzki | autoconf) |
| 217 | 1bf10909 | Tuxis Internet Engineering | if [ ! -x ${sysctl} ]; then
|
| 218 | echo "no (${sysctl} is not executable)"
|
||
| 219 | 9cef55a3 | Lars Kruse | elif [ "${ostype}" = "FreeBSD" ]; then
|
| 220 | 1bf10909 | Tuxis Internet Engineering | echo "yes" |
| 221 | 9cef55a3 | Lars Kruse | elif [ "${ostype}" = "Linux" ]; then
|
| 222 | 1bf10909 | Tuxis Internet Engineering | if [ -f ${procfile} ]; then
|
| 223 | echo "yes" |
||
| 224 | 9cef55a3 | Lars Kruse | else |
| 225 | echo "no (The statsfile does not exist: ${procfile})"
|
||
| 226 | 1bf10909 | Tuxis Internet Engineering | fi |
| 227 | 9cef55a3 | Lars Kruse | else |
| 228 | echo "no (Your OS is not supported by this plugin)" |
||
| 229 | 1bf10909 | Tuxis Internet Engineering | fi |
| 230 | 9cef55a3 | Lars Kruse | exit 0 |
| 231 | 1bf10909 | Tuxis Internet Engineering | ;; |
| 232 | 208aeb0c | Wiktor Niesiobedzki | suggest) |
| 233 | 1bf10909 | Tuxis Internet Engineering | exit 0 |
| 234 | ;; |
||
| 235 | esac |
||
| 236 | case ${ostype} in
|
||
| 237 | "FreeBSD") |
||
| 238 | $sysctl kstat.zfs.misc.arcstats | sed -e 's/^kstat.zfs.misc.arcstats.//' -e 's/:/.value/' |
||
| 239 | ;; |
||
| 240 | "Linux") |
||
| 241 | cat ${procfile} | tail -n +3 | sed -e 's/ \+/ /g' | cut -f 1,3 -d ' ' | sed -e 's/ /.value /'
|
||
| 242 | ;; |
||
| 243 | 208aeb0c | Wiktor Niesiobedzki | esac |
