Browse Source

add proc zfs charts info (#11630)

Ilya Mashchenko 3 years ago
parent
commit
d1126fae7d
1 changed files with 141 additions and 4 deletions
  1. 141 4
      web/gui/dashboard_info.js

+ 141 - 4
web/gui/dashboard_info.js

@@ -205,9 +205,13 @@ netdataDashboard.menu = {
     },
 
     'zfs': {
-        title: 'ZFS filesystem',
+        title: 'ZFS Cache',
         icon: '<i class="fas fa-folder-open"></i>',
-        info: 'Performance metrics of the ZFS filesystem. The following charts visualize all metrics reported by <a href="https://github.com/zfsonlinux/zfs/blob/master/cmd/arcstat/arcstat" target="_blank">arcstat.py</a> and <a href="https://github.com/zfsonlinux/zfs/blob/master/cmd/arc_summary/arc_summary3" target="_blank">arc_summary.py</a>.'
+        info: 'Performance metrics of the '+
+        '<a href="https://en.wikipedia.org/wiki/ZFS#Caching_mechanisms" target="_blank">ZFS ARC and L2ARC</a>. '+
+        'The following charts visualize all metrics reported by '+
+        '<a href="https://github.com/openzfs/zfs/blob/master/cmd/arcstat/arcstat.in" target="_blank">arcstat.py</a> and '+
+        '<a href="https://github.com/openzfs/zfs/blob/master/cmd/arc_summary/arc_summary3" target="_blank">arc_summary.py</a>.'
     },
 
     'zfspool': {
@@ -3000,11 +3004,144 @@ netdataDashboard.context = {
         '<a href="https://datatracker.ietf.org/doc/html/rfc8881#section-18" target="_blank">RFC8881</a>.'
     },
 
+    // ------------------------------------------------------------------------
+    // ZFS
+
+    'zfs.arc_size': {
+        info: '<p>The size of the ARC.</p>'+
+        '<p><b>Arcsz</b> - actual size. '+
+        '<b>Target</b> - target size that the ARC is attempting to maintain (adaptive). '+
+        '<b>Min</b> - minimum size limit. When the ARC is asked to shrink, it will stop shrinking at this value. '+
+        '<b>Min</b> - maximum size limit.</p>'
+    },
+
+    'zfs.l2_size': {
+        info: '<p>The size of the L2ARC.</p>'+
+        '<p><b>Actual</b> - size of compressed data. '+
+        '<b>Size</b> - size of uncompressed data.</p>'
+    },
+
+    'zfs.reads': {
+        info: '<p>The number of read requests.</p>'+
+        '<p><b>ARC</b> - all prefetch and demand requests. '+
+        '<b>Demand</b> - triggered by an application request. '+
+        '<b>Prefetch</b> - triggered by the prefetch mechanism, not directly from an application request. '+
+        '<b>Metadata</b> - metadata read requests. '+
+        '<b>L2</b> - L2ARC read requests.</p>'
+    },
+
+    'zfs.bytes': {
+        info: 'The amount of data transferred to and from the L2ARC cache devices.'
+    },
+
+    'zfs.hits': {
+        info: '<p>Hit rate of the ARC read requests.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.dhits': {
+        info: '<p>Hit rate of the ARC data and metadata demand read requests. '+
+        'Demand requests are triggered by an application request.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.phits': {
+        info: '<p>Hit rate of the ARC data and metadata prefetch read requests. '+
+        'Prefetch requests are triggered by the prefetch mechanism, not directly from an application request.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.mhits': {
+        info: '<p>Hit rate of the ARC metadata read requests.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.l2its': {
+        info: '<p>Hit rate of the L2ARC lookups.</p>'+
+        '</p><b>Hits</b> - a data block was in the L2ARC cache and returned. '+
+        '<b>Misses</b> - a data block was not in the L2ARC cache. '+
+        'It will be read from the pool disks.</p>'
+    },
+
+    'zfs.demand_data_hits': {
+        info: '<p>Hit rate of the ARC data demand read requests. '+
+        'Demand requests are triggered by an application request.</p>'+
+        '<b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.prefetch_data_hits': {
+        info: '<p>Hit rate of the ARC data prefetch read requests. '+
+        'Prefetch requests are triggered by the prefetch mechanism, not directly from an application request.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.list_hits': {
+        info: 'MRU (most recently used) and MFU (most frequently used) cache list hits. '+
+        'MRU and MFU lists contain metadata for requested blocks which are cached. '+
+        'Ghost lists contain metadata of the evicted pages on disk.'
+    },
+
+    'zfs.arc_size_breakdown': {
+        info: 'The size of MRU (most recently used) and MFU (most frequently used) cache.'
+    },
+
+    'zfs.memory_ops': {
+        info: '<p>Memory operation statistics.</p>'+
+        '<p><b>Direct</b> - synchronous memory reclaim. Data is evicted from the ARC and free slabs reaped. '+
+        '<b>Throttled</b> - number of times that ZFS had to limit the ARC growth. '+
+        'A constant increasing of the this value can indicate excessive pressure to evict data from the ARC. '+
+        '<b>Indirect</b> - asynchronous memory reclaim. It reaps free slabs from the ARC cache.</p>'
+    },
+
+    'zfs.important_ops': {
+        info: '<p>Eviction and insertion operation statistics.</p>'+
+        '<p><b>EvictSkip</b> - skipped data eviction operations. '+
+        '<b>Deleted</b> - old data is evicted (deleted) from the cache. '+
+        '<b>MutexMiss</b> - an attempt to get hash or data block mutex when it is locked during eviction. '+
+        '<b>HashCollisions</b> - occurs when two distinct data block numbers have the same hash value.</p>'
+    },
+
+    'zfs.actual_hits': {
+        info: '<p>MRU and MFU cache hit rate.</p>'+
+        '<p><b>Hits</b> - a data block was in the ARC DRAM cache and returned. '+
+        '<b>Misses</b> - a data block was not in the ARC DRAM cache. '+
+        'It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.</p>'
+    },
+
+    'zfs.hash_elements': {
+        info: '<p>Data Virtual Address (DVA) hash table element statistics.</p>'+
+        '<p><b>Current</b> - current number of elements. '+
+        '<b>Max</b> - maximum number of elements seen.</p>'
+    },
+
+    'zfs.hash_chains': {
+        info: '<p>Data Virtual Address (DVA) hash table chain statistics. '+
+        'A chain is formed when two or more distinct data block numbers have the same hash value.</p>'+
+        '<p><b>Current</b> - current number of chains. '+
+        '<b>Max</b> - longest length seen for a chain. '+
+        'If the value is high, performance may degrade as the hash locks are held longer while the chains are walked.</p>'
+    },
+
     // ------------------------------------------------------------------------
     // ZFS pools
     'zfspool.state': {
-        info: 'ZFS pool state. The overall health of a pool, as reported by <code>zpool status</code>, is determined by the aggregate state of all devices within the pool. ' +
-            'For details, see <a href="https://openzfs.github.io/openzfs-docs/man/8/zpoolconcepts.8.html?#Device_Failure_and_Recovery" target="_blank"> ZFS documentation</a>.'
+        info: 'ZFS pool state. '+
+        'The overall health of a pool, as reported by <code>zpool status</code>, '+
+        'is determined by the aggregate state of all devices within the pool. ' +
+        'For states description, '+
+        'see <a href="https://openzfs.github.io/openzfs-docs/man/7/zpoolconcepts.7.html#Device_Failure_and_Recovery" target="_blank"> ZFS documentation</a>.'
     },
 
     // ------------------------------------------------------------------------