Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Mar 2013 17:32:12 -0500
From:      Alan Cox <alan.l.cox@gmail.com>
To:        Maksim Yevmenkin <emax@freebsd.org>
Cc:        current@freebsd.org
Subject:   Re: [RFC] small VM patch to review
Message-ID:  <CAJUyCcPUA0D-fbvUxNsZkHdns_-oxLk_MpgK%2B9LfocjoKxJ_iA@mail.gmail.com>
In-Reply-To: <CAFPOs6pOzp_ZVqjeGZ28GfPWRuCYtL30jmhZ5Aoqo85bSCBq=g@mail.gmail.com>
References:  <CAFPOs6pOzp_ZVqjeGZ28GfPWRuCYtL30jmhZ5Aoqo85bSCBq=g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 20, 2013 at 12:24 PM, Maksim Yevmenkin <emax@freebsd.org> wrote:

> hello,
>
> would anyone object to the following small patch?
>
>

Yes, I don't think that we should entirely disable vm_lowmem events or
uma_reclaim() on pass == 0 calls to vm_pageout_scan().  However, I do
think it's reasonable to significantly reduce the frequency at which we do
both.

My recollection is that UMA only releases idle pages from zones when
uma_reclaim() is called.  In other words, there is no mechanism like a
high water mark on the number of idle pages in a zone that triggers the
return of some of these idle pages to the VM system.

Given this, turning off vm_lowmem events or uma_reclaim() calls
on pass == 0 is fine for machines under a steady-state workload.  But,
if there are changes in the workload then we won't adapt our overall
memory allocation to the new workload.  Specifically, the loser would be
the file cache/inactive queue, because even under moderate memory
pressure we typically meet our goals on pass 0 by reclaiming file
cache/inactive queue pages.  So, instead of repurposing unused pages
from UMA to the file cache/inactive queue, we would leave them lingering
in UMA.

(Also note I've not said anything about the ZFS ARC, because I'm not
exactly sure how it uses the vm_lowmem events.  This may or may not
be a problem.  I don't know.)



> ==
>
> Index: vm_pageout.c
> ===================================================================
> --- vm_pageout.c        (revision 248560)
> +++ vm_pageout.c        (working copy)
> @@ -882,14 +882,17 @@
>
>         vm_pageout_init_marker(&marker, PQ_INACTIVE);
>
> -       /*
> -        * Decrease registered cache sizes.
> -        */
> -       EVENTHANDLER_INVOKE(vm_lowmem, 0);
> -       /*
> -        * We do this explicitly after the caches have been drained above.
> -        */
> -       uma_reclaim();
> +       if (pass) {
> +               /*
> +                * Decrease registered cache sizes.
> +                */
> +               EVENTHANDLER_INVOKE(vm_lowmem, 0);
> +               /*
> +                * We do this explicitly after the caches have
> +                * been drained above.
> +                */
> +               uma_reclaim();
> +       }
>
>         /*
>          * The addl_page_shortage is the number of temporarily
>
> ==
>
> the idea is to not invoke lowmem handler etc. on first pass in
> vm_pageout_scan(). it saves a few CPU cycles on a relatively busy
> webserver with moderate amount of RAM serving large-ish files.
>
> thanks,
> max
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJUyCcPUA0D-fbvUxNsZkHdns_-oxLk_MpgK%2B9LfocjoKxJ_iA>