zfs arc - just take it all and be good to me

Marco van Tol marco at tols.org
Wed Aug 11 06:20:10 UTC 2010


On Tue, Aug 10, 2010 at 06:49:19PM -0700, Jeremy Chadwick wrote:
> On Tue, Aug 10, 2010 at 09:44:18PM +0000, Marco van Tol wrote:
> > [...]
> > 
> > All in all this looks like a close attempt at zfs memory being auto
> > tuned while using maximum amount of memory.  The only problem is, nobody
> > else is doing it like this so its very likely that this is not the smart
> > thing to do.
> 
> I'm not sure what "nobody else is doing it like this" means, but Solaris
> 10 behaves exactly as you describe -- the ARC takes up as much memory as
> it can.  When an application or other piece of the kernel wants memory
> which the ARC can free up, it releases memory.  There's no tuning
> required on Solaris; it "just works".
> 
> At my day job (where we use Solaris 10), when we introduced ZFS into the
> picture, many of our memory usage monitors began firing indicating lack
> of free memory due to ARC usage.  We had to add some code to our
> check_system_memory monitor which called kstat to examine the
> zfs:0:arcstats:size and zfs:0:arcstats:c_min properties and then add
> that to the overall amount of memory available.  Code in question:
> 
> my $zfsarcstatssize = "zfs:0:arcstats:size";
> my $zfsarcstatsmin = "zfs:0:arcstats:c_min";
> my $zfsarcsize;
> my $zfsarcmin = 0;
> if ($OS eq 'solaris' and -x $kstat) {
>     my @dump = `$kstat -p $zfsarcstatssize $zfsarcstatsmin`;
>     unless ($?) {
>         foreach my $dump (@dump) {
>             chomp $dump;
>             my ($label, $size) = split(/\t/, $dump);
>             if ($label eq $zfsarcstatssize) {
>                 $zfsarcsize = sprintf("%.2f", $size/1024/1024);
>             }
>             if ($label eq $zfsarcstatsmin) {
>                 $zfsarcmin = sprintf("%.2f", $size/1024/1024);
>             }
>         }
>         $real_available += $zfsarcsize - $zfsarcmin if (defined $zfsarcsize and $zfsarcsize > $zfsarcmin);
>     }
> }
> 
> I believe OpenSolaris behaves the same as Solaris 10 in this regard.
> Their VM model differs from that of FreeBSD.
> 
> I've talked about this in the past (see paragraph starting with "Fast
> forward to today").  I can dig up John's original response (talking
> about how the VM needs to be improved in FreeBSD to accomplish the
> equivalent of what Solaris does) if need be.
> 
> http://lists.freebsd.org/pipermail/freebsd-fs/2010-May/008598.html

Thank you for your reply.  I have to go to work now first, but I will
read more closely what you're writing later today.

One thing I realized by the way is that I messed something up in the
test 4 "run it all together" scenario.  I wrote I used value
"1_000_000_000", but that will cause a perl process that is too large.
Use 500_000_000 instead and what I wrote happens like I wrote it,
together with strongly fluctuation arc sizes as it runs.  As expected
and desired.

By the way, uname -a output for the machine running the tests is (line
wrapped):

FreeBSD hostname.tld 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #3: Wed
Jul 28 22:38:28 CEST 2010
root at hostname.tld:/usr/obj/usr/src/sys/MAGICA  amd64

The RELENG tag is: RELENG_8

Thanks!

Marco

-- 
Als de redding het hoogst is, is de nood nabij!


More information about the freebsd-fs mailing list