diff options
-rw-r--r-- | sysutils/zfs-stats/Makefile | 1 | ||||
-rw-r--r-- | sysutils/zfs-stats/files/patch-zfs-stats | 193 |
2 files changed, 194 insertions, 0 deletions
diff --git a/sysutils/zfs-stats/Makefile b/sysutils/zfs-stats/Makefile index 7c4431d5c2a8..845e78a60d4b 100644 --- a/sysutils/zfs-stats/Makefile +++ b/sysutils/zfs-stats/Makefile @@ -3,6 +3,7 @@ PORTNAME= zfs-stats PORTVERSION= 1.3.0 +PORTREVISION= 1 CATEGORIES= sysutils MASTER_SITES= GH diff --git a/sysutils/zfs-stats/files/patch-zfs-stats b/sysutils/zfs-stats/files/patch-zfs-stats new file mode 100644 index 000000000000..745f267c0abe --- /dev/null +++ b/sysutils/zfs-stats/files/patch-zfs-stats @@ -0,0 +1,193 @@ +--- zfs-stats.orig 2020-10-07 13:06:33 UTC ++++ zfs-stats +@@ -1,4 +1,4 @@ +-#!/usr/local/bin/perl ++#!/usr/bin/env -iS perl + # + # $Id$ + # +@@ -46,7 +46,7 @@ use warnings; + use Getopt::Long; + Getopt::Long::Configure ("bundling"); + +-my $version = '1.3.0'; ++my $version = '1.3.0_1'; + + my $usetunable = 1; # Change to 0 to disable sysctl MIB spill. + my $show_sysctl_descriptions = 0; # Change to 1 (or use the -d flag) to show sysctl descriptions. +@@ -201,6 +201,14 @@ sub fPerc { + } else { return sprintf('%0.' . $Decimal . 'f', 100) . "%"; } + } + ++sub fRatio { ++ my $lVal = $_[0] // 0; ++ my $rVal = $_[1] // 1; ++ my $Decimal = $_[2] // 2; ++ ++ return sprintf('%0.' . $Decimal . 'f', ($lVal / $rVal)); ++} ++ + my @Kstats = qw( + hw.machine + hw.machine_arch +@@ -215,12 +223,28 @@ my @Kstats = qw( + vm.kmem_size_min + vm.kmem_size_scale + vm.stats +- kstat.zfs ++ kstat.zfs.misc.abdstats ++ kstat.zfs.misc.arcstats ++ kstat.zfs.misc.dbufstats ++ kstat.zfs.misc.dmu_tx ++ kstat.zfs.misc.dnodestats ++ kstat.zfs.misc.fletcher_4_bench ++ kstat.zfs.misc.fm ++ kstat.zfs.misc.vdev_cache_stats ++ kstat.zfs.misc.vdev_mirror_stats ++ kstat.zfs.misc.vdev_raidz_bench ++ kstat.zfs.misc.xuio_stats ++ kstat.zfs.misc.zfetchstats ++ kstat.zfs.misc.zil ++ kstat.zfs.misc.zstd + vfs.zfs + ); + ++my $IsOpenZFS = 1; ++ + sub _start { + my $daydate = localtime; chomp $daydate; ++ $IsOpenZFS = defined($Kstat->{"vfs.zfs.vdev.cache_size"}); + div1; + printf("ZFS Subsystem Report\t\t\t\t%s", $daydate); + div2; +@@ -330,17 +354,16 @@ sub _arc_summary { + my $deleted = $Kstat->{"kstat.zfs.misc.arcstats.deleted"}; + my $evict_skip = $Kstat->{"kstat.zfs.misc.arcstats.evict_skip"}; + my $mutex_miss = $Kstat->{"kstat.zfs.misc.arcstats.mutex_miss"}; +- my $recycle_miss = $Kstat->{"kstat.zfs.misc.arcstats.recycle_miss"}; + + print "ARC Misc:\n"; + printf("\tDeleted:\t\t\t\t%s\n", fHits($deleted)); +- printf("\tRecycle Misses:\t\t\t\t%s\n", fHits($recycle_miss)); + printf("\tMutex Misses:\t\t\t\t%s\n", fHits($mutex_miss)); + printf("\tEvict Skips:\t\t\t\t%s\n", fHits($evict_skip)); + print "\n"; + + ### ARC Sizing ### + my $arc_size = $Kstat->{"kstat.zfs.misc.arcstats.size"}; ++ my $arc_uncompressed_size = $Kstat->{"kstat.zfs.misc.arcstats.uncompressed_size"}; + my $mru_size = $Kstat->{"kstat.zfs.misc.arcstats.p"}; + my $target_max_size = $Kstat->{"kstat.zfs.misc.arcstats.c_max"}; + my $target_min_size = $Kstat->{"kstat.zfs.misc.arcstats.c_min"}; +@@ -356,7 +379,12 @@ sub _arc_summary { + fPerc($target_min_size, $target_max_size), fBytes($target_min_size)); + printf("\tMax Size (High Water):\t\t%d:1\t%s\n", + $target_size_ratio, fBytes($target_max_size)); ++ printf("\tDecompressed Data Size:\t\t\t%s\n", ++ fBytes($arc_uncompressed_size)); ++ printf("\tCompression Factor:\t\t\t%s\n", ++ fRatio($arc_uncompressed_size, $arc_size)); + ++ + print "\nARC Size Breakdown:\n"; + if ($arc_size > $target_size) { + my $mfu_size = ($arc_size - $mru_size); +@@ -424,7 +452,7 @@ sub _arc_efficiency { + printf("\tData Demand Efficiency:\t\t%s\t%s\n", + fPerc($demand_data_hits, $demand_data_total), fHits($demand_data_total)); + +- if ($prefetch_data_total > 0){ ++ if ($prefetch_data_total > 0){ + printf("\tData Prefetch Efficiency:\t%s\t%s\n", + fPerc($prefetch_data_hits, $prefetch_data_total), fHits($prefetch_data_total)); + } +@@ -474,6 +502,7 @@ sub _l2arc_summary { + return; + } + ++ my $l2_asize = $Kstat->{"kstat.zfs.misc.arcstats.l2_asize"}; + my $l2_abort_lowmem = $Kstat->{"kstat.zfs.misc.arcstats.l2_abort_lowmem"}; + my $l2_cksum_bad = $Kstat->{"kstat.zfs.misc.arcstats.l2_cksum_bad"}; + my $l2_evict_lock_retry = $Kstat->{"kstat.zfs.misc.arcstats.l2_evict_lock_retry"}; +@@ -493,14 +522,13 @@ sub _l2arc_summary { + my $l2_write_full = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_full"}; + my $l2_write_in_l2 = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_in_l2"}; + my $l2_write_io_in_progress = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_io_in_progress"}; +- my $l2_write_not_cacheable = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_not_cacheable"}; ++ #my $l2_write_not_cacheable = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_not_cacheable"}; + my $l2_write_passed_headroom = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_passed_headroom"}; +- my $l2_write_pios = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_pios"}; ++ #my $l2_write_pios = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_pios"}; + my $l2_write_spa_mismatch = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_spa_mismatch"}; + my $l2_write_trylock_fail = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_trylock_fail"}; + my $l2_writes_done = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_done"}; + my $l2_writes_error = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_error"}; +- my $l2_writes_hdr_miss = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_hdr_miss"}; + my $l2_writes_sent = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_sent"}; + + my $l2_access_total = ($l2_hits + $l2_misses); +@@ -510,19 +538,28 @@ sub _l2arc_summary { + if ($l2_health_count > 0) { + print "(DEGRADED)\n"; + } else { print "(HEALTHY)\n"; } +- printf("\tPassed Headroom:\t\t\t%s\n", fHits($l2_write_passed_headroom)); +- printf("\tTried Lock Failures:\t\t\t%s\n", fHits($l2_write_trylock_fail)); +- printf("\tIO In Progress:\t\t\t\t%s\n", fHits($l2_write_io_in_progress)); ++ ++ if (not $IsOpenZFS) { ++ printf("\tPassed Headroom:\t\t\t%s\n", fHits($l2_write_passed_headroom)); ++ printf("\tTried Lock Failures:\t\t\t%s\n", fHits($l2_write_trylock_fail)); ++ printf("\tIO In Progress:\t\t\t\t%s\n", fHits($l2_write_io_in_progress)); ++ } + printf("\tLow Memory Aborts:\t\t\t%s\n", fHits($l2_abort_lowmem)); + printf("\tFree on Write:\t\t\t\t%s\n", fHits($l2_free_on_write)); +- printf("\tWrites While Full:\t\t\t%s\n", fHits($l2_write_full)); ++ if (not $IsOpenZFS) { ++ printf("\tWrites While Full:\t\t\t%s\n", fHits($l2_write_full)); ++ } + printf("\tR/W Clashes:\t\t\t\t%s\n", fHits($l2_rw_clash)); + printf("\tBad Checksums:\t\t\t\t%s\n", fHits($l2_cksum_bad)); + printf("\tIO Errors:\t\t\t\t%s\n", fHits($l2_io_error)); +- printf("\tSPA Mismatch:\t\t\t\t%s\n", fHits($l2_write_spa_mismatch)); ++ if (not $IsOpenZFS) { ++ printf("\tSPA Mismatch:\t\t\t\t%s\n", fHits($l2_write_spa_mismatch)); ++ } + print "\n"; + +- printf("L2 ARC Size: (Adaptive)\t\t\t\t%s\n", fBytes($l2_size)); ++ printf("L2 ARC Size: (Adaptive)\t\t\t\t%s\n", fBytes($l2_asize)); ++ printf("\tDecompressed Data Size:\t\t\t%s\n", fBytes($l2_size)); ++ printf("\tCompression Factor:\t\t\t%s\n", fRatio($l2_size, $l2_asize)); + printf("\tHeader Size:\t\t\t%s\t%s\n", + fPerc($l2_hdr_size, $l2_size), fBytes($l2_hdr_size)); + print "\n"; +@@ -541,12 +578,14 @@ sub _l2arc_summary { + printf("\tFeeds:\t\t\t\t\t%s\n", fHits($l2_feeds)); + print "\n"; + +- print "L2 ARC Buffer:\n"; +- printf("\tBytes Scanned:\t\t\t\t%s\n", fBytes($l2_write_buffer_bytes_scanned)); +- printf("\tBuffer Iterations:\t\t\t%s\n", fHits($l2_write_buffer_iter)); +- printf("\tList Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_iter)); +- printf("\tNULL List Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_null_iter)); +- print "\n"; ++ if (not $IsOpenZFS) { ++ print "L2 ARC Buffer:\n"; ++ printf("\tBytes Scanned:\t\t\t\t%s\n", fBytes($l2_write_buffer_bytes_scanned)); ++ printf("\tBuffer Iterations:\t\t\t%s\n", fHits($l2_write_buffer_iter)); ++ printf("\tList Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_iter)); ++ printf("\tNULL List Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_null_iter)); ++ print "\n"; ++ } + + print "L2 ARC Writes:\n"; + if ($l2_writes_done != $l2_writes_sent) { +@@ -582,7 +621,7 @@ sub _vdev_summary { + my $vdev_cache_hits = $Kstat->{"kstat.zfs.misc.vdev_cache_stats.hits"}; + my $vdev_cache_total = ($vdev_cache_misses + $vdev_cache_hits + $vdev_cache_delegations); + +- if ($Kstat->{"vfs.zfs.vdev.cache.size"} == 0) { ++ if (($IsOpenZFS ? $Kstat->{"vfs.zfs.vdev.cache_size"} : $Kstat->{"vfs.zfs.vdev.cache.size"}) == 0) { + printf "VDEV cache is disabled\n"; + } elsif ($vdev_cache_total > 0) { + printf("VDEV Cache Summary:\t\t\t\t%s\n", fHits($vdev_cache_total)); |