ZFS Tuning - arc_summary.pl

jhell jhell at dataix.net
Tue Mar 30 14:30:29 UTC 2010


On 03/29/2010 10:43, Barry Pederson wrote:
> I've been using the arc_summary.pl script from here:
> 
> http://jhell.googlecode.com/svn/base/head/scripts/zfs/arc_summary/arc_summary.pl
> 
> 
> and noticed some odd numbers, with the ARC Current Size being larger
> than the Max Size, and the breakdown adding up to less than the current
> size as shown below
> 
> --------
> ARC Size:
>         Current Size:                           992.71M (arcsize)
>         Target Size: (Adaptive)                 512.00M (c)
>         Min Size (Hard Limit):                  81.82M (arc_min)
>         Max Size (Hard Limit):                  512.00M (arc_max)
> 
> ARC Size Breakdown:
>         Recently Used Cache Size:       99.84%  511.18M (p)
>         Frequently Used Cache Size:     0.16%   0.82M (c-p)
> --------
> 
> 
> From another thread I saw, it sounds like arc_max isn't really
> a "Hard Limit" but rather some kind of high water mark.  If that's
> the case then I wonder if this might make more sense....
> 
> 
> 
> ---------
> --- arc_summary.pl.original     2010-02-25 19:23:13.000000000 -0600
> +++ arc_summary.pl      2010-03-29 09:32:28.000000000 -0500
> @@ -121,20 +121,20 @@
> 
>  my $arc_size = ${Kstat}->{zfs}->{0}->{arcstats}->{size};
>  my $arc_size_MiB = ($arc_size / 1048576);
> -my $mfu_size = $target_size - $mru_size;
> +my $mfu_size = $arc_size - $mru_size;
>  my $mfu_size_MiB = ($mfu_size / 1048576);
> -my $mru_perc = 100*($mru_size / $target_size);
> -my $mfu_perc = 100*($mfu_size / $target_size);
> +my $mru_perc = 100*($mru_size / $arc_size);
> +my $mfu_perc = 100*($mfu_size / $arc_size);
> 
>  print "ARC Size:\n";
>  printf("\tCurrent Size:\t\t\t\t%0.2fM (arcsize)\n", $arc_size_MiB);
>  printf("\tTarget Size: (Adaptive)\t\t\t%0.2fM (c)\n", $target_size_MiB);
>  printf("\tMin Size (Hard Limit):\t\t\t%0.2fM (arc_min)\n",
> $arc_min_size_MiB);
> -printf("\tMax Size (Hard Limit):\t\t\t%0.2fM (arc_max)\n",
> $arc_max_size_MiB);
> +printf("\tMax Size             :\t\t\t%0.2fM (arc_max)\n",
> $arc_max_size_MiB);
> 
>  print "\nARC Size Breakdown:\n";
>  printf("\tRecently Used Cache Size:\t%0.2f%%\t%0.2fM (p)\n", $mru_perc,
> $mru_size_MiB);
> -printf("\tFrequently Used Cache Size:\t%0.2f%%\t%0.2fM (c-p)\n",
> $mfu_perc, $mfu_size_MiB);
> +printf("\tFrequently Used Cache Size:\t%0.2f%%\t%0.2fM (arcsize-p)\n",
> $mfu_perc, $mfu_size_MiB);
>  print "\n";
> 
>  ### ARC Efficency ###
> 
> -----------
> 
> 
> Giving something like this...
> 
> --------
> ARC Size:
>         Current Size:                           992.88M (arcsize)
>         Target Size: (Adaptive)                 512.00M (c)
>         Min Size (Hard Limit):                  81.82M (arc_min)
>         Max Size             :                  512.00M (arc_max)
> 
> ARC Size Breakdown:
>         Recently Used Cache Size:       51.48%  511.18M (p)
>         Frequently Used Cache Size:     48.52%  481.70M (arcsize-p)
> --------
> 
>     Barry
> _______________________________________________
> freebsd-stable at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"

Ill mark this up on my todo. Thanks for the feedback & I should have
something committed back within the next couple days, possibly even tonight.

I never recalculated for this difference as that area of the code was
just a formatting fix.

But as Jeremy has pointed out, it would have to verify against
__FreeBSD_version but since I already pull in the sysctl MIB
kern.osreldate I should be able to compare to that and say 700000 or
higher make the above correction.

As this is mainly ZFS v13 dependent now I don't feel to bad doing what I
have stated above.

Thanks again,

Regards,

-- 

 jhell


More information about the freebsd-stable mailing list