Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Feb 2010 09:59:46 -0800
From:      Jeremy Chadwick <freebsd@jdc.parodius.com>
To:        freebsd-stable@freebsd.org
Subject:   Re: ZFS tuning [was: hardware for home use large storage]
Message-ID:  <20100216175946.GA98082@icarus.home.lan>
In-Reply-To: <4B7AD0A3.9080701@barryp.org>
References:  <cf9b1ee01002150049o43fced71ucb5776a0a1eaf4cf@mail.gmail.com> <20100215090756.GA54764@icarus.home.lan> <20100215105000.101326yj01j0f64g@webmail.leidinger.net> <20100215122744.GA57382@icarus.home.lan> <20100215161105.14071eiflhc9le68@webmail.leidinger.net> <4B79BA9C.3020402@quip.cz> <alpine.BSF.2.00.1002152024040.74553@pragry.qngnvk.ybpny> <4B7AD0A3.9080701@barryp.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 16, 2010 at 11:06:43AM -0600, Barry Pederson wrote:
> On 2/15/10 7:49 PM, jhell wrote:
> 
> >As I make final modifications to the script I will keep the below URLs
> >updated and welcome any bug reports or modification requests to me
> >personally.
> >
> >Here is the URLs:
> >http://jhell.googlecode.com/files/arc_summary.pl
> >http://jhell.googlecode.com/files/arc_summary.pl.asc
> 
> Nice.  How about including relevant lines from /boot/loader.conf,
> maybe something like this tacked on the end of the script (excuse my
> Perl, I'm a Python guy).
> 
> ----
> #### Loader Settings #############
> open(LOADER, '/boot/loader.conf');
> print "\n/boot/loader.conf settings:\n";
> while (<LOADER>){
>     chomp;
>     if (/^\s*(zfs|vfs\.zfs|vm\.kmem)/){
>         print "\t$_\n";
>     }
> }
> ----
> 
> Yes, it should more or less duplicate the sysctl values, but it may
> make it more obvious where the settings are coming from, or if the
> user has bad or ignored settings

Major problems with the above code:

1) Opens /boot/loader.conf for rw access; should be read-only
2) Makes the assumption /boot/loader.conf exists
3) Does not close the fd
4) Excessively quotes variables for no justified reason
5) Makes some bad assumptions about the contents of the file (ex.
   comments with the word "zfs" in them would match)

The code should really be something like what's below.  This should
be much more manageable as well (@tunables that is), although I always
worry when using grep()...

-- 
| Jeremy Chadwick                                   jdc@parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |

#!/usr/local/bin/perl

my @tunables = qw(
	vfs\.zfs\..+
        vm\.kmem_size.*
);

my $loaderconf = "/boot/loader.conf";

if (-e $loaderconf)
{
  open(FH, "<", $loaderconf) or die;
  while (<FH>)
  {
	# Get rid of trailing newlines and preceding spaces.
        chomp;
        s/^\s+//g;

	# Match against any key=value pair, and then see if the
	# key portion matches against any regex string in @tunables.
	if (/^([\w\.]+)=.+/)
	{
		if (grep $1 =~ /$_/, @tunables) {
			print "\t", $_ , "\n";
		}
	}
  }
  close(FH);
}




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100216175946.GA98082>