[Top] [All Lists]

Re: drastic changes to allocsize semantics in or around 2.6.38?

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: drastic changes to allocsize semantics in or around 2.6.38?
From: Marc Lehmann <schmorp@xxxxxxxxxx>
Date: Fri, 20 May 2011 17:49:20 +0200
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20110520025659.GO32466@dastard>
References: <20110520005510.GA15348@xxxxxxxxxx> <20110520025659.GO32466@dastard>
On Fri, May 20, 2011 at 12:56:59PM +1000, Dave Chinner <david@xxxxxxxxxxxxx> 
[thanks for the thorough explanation]
> So the question there: how is your workload accessing the files? Is
> it opening and closing them multiple times in quick succession after
> writing them?

I don't think so, but of course, when compiling a file, it will be linked
afterwards, so I guess it would be accessed at least once.

> I think it is triggering the "NFS server access pattern" logic and so
> keeping speculative preallocation around for longer.

Longer meaning practically infinitely :)

> I'd suggest removing the allocsize mount option - you shouldn't need
> it anymore because the new default behaviour resists fragmentation a
> whole lot better than pre-2.6.38 kernels.

I did remove it already, and will actively try this on our production
server which suffer from severe fragmentation (but xfs_fsr fixes that with
some work (suspending the logfile writing) anyway).

However, I would suggest that whatever heuristic 2.6.38 uses is deeply
broken at the momment, as NFS was not involved here at all (so no need for
it), the usage pattern was a simple compile-then-link-pattern (which is
very common), and there is really no need to cache this preallocation for
files that have been closed 8 hours ago and never touched since then.

                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_              http://www.deliantra.net
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp@xxxxxxxxxx
      -=====/_/_//_/\_,_/ /_/\_\

<Prev in Thread] Current Thread [Next in Thread>