Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Jan 1999 20:38:24 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Terry Lambert <tlambert@primenet.com>
Cc:        dyson@iquest.net, pfgiffun@bachue.usc.unal.edu.co, freebsd-hackers@FreeBSD.ORG
Subject:   Re: questions/problems with vm_fault() in Stable
Message-ID:  <199901050438.UAA91261@apollo.backplane.com>
References:   <199901050338.UAA03450@usr05.primenet.com>

next in thread | previous in thread | raw e-mail | index | archive | help
:Specifically, I think that the VM references should be macro-ized
:so that the underlying VM system has much less impact on the code.
:
:I'd like to see VFS modules portable between the BSD's (the main
:obstacle at this point is that the VM intrusions aren't generalized

    Well, certain things, yes... not macroized, but __inline'd.  But let me
    deal with those sorts of optimizations since I'm hip-deep in the VM code
    right now.  I've had to rip out half a dozen such optimizations because
    they (A) weren't saving very many cpu cycles, and (B) they were stale and
    no longer in sync with the VM algorithms, and I've put *in* other less
    messy __inline optimizations that save about as many cycles.  

    Basically, on too many occassions, people have ripped out pieces of 
    VM subroutines and manually inserted them in other VM code to avoid making
    a subroutine call.  These sorts of optimizations not only haven't produced 
    much in the way of performance results, many of them have destabilized 
    the codebase as other programmers have made modifications to the procedures
    and 'missed' the extracted pieces of code inserted in other places.  There
    have also been some truely serious breeches of the appropriate use of 
    __inline - 50+ line procedures inline'd with repeated calls to them in
    several places in the code which do more damage to the cpu's primary
    cache then the measily 2% call/return cycle overhead (in a 50 line 
    procedure) that they save.

    But, with appropriate use of __inline functions there are quite a few 
    optimizations that we *CAN* make to de-proceduralized the critical
    path.  For example, the pagerops calls (vm/vm_pager.c) are currently all
    discrete procedures which can easily (and will soon be) migrated to
    __inline's in vm/vm_pager.h.

:to ignore the underlying implementation (in the FreeBSD case, the
:intrusion points for cache coherency have been diked out); after
:that's fixed, the obstacle becomes the "cookie" crap in VOP_READDIR
:(it has argument order of operation issues, which is why the NetBSD
:AFS code won't work in FreeBSD), which should be murdered by splitting
:the VOP_READDIR into VOP_GETDIRBLK/VOP_GETBLKENTRY to get rid of the
:need for a cookie for resuming context in a directory block for NFS
:and too-small-user-buffer based traversals -- at the same time paving
:the way for kernel based globbing for about a 5 times speed increase
:for a SAMBA/AFS specific system call KLD module).

    The entire VFS interface needs to be revamped.  There are multiple 
    problems with it.  The one's I will concentrate on starting a month or
    two from now are basically the blocking and low-memory deadlock situations
    that crop up when you have multiple VFS layers.  I've already fixed about
    a half a dozen low-memory or buffer-exhaustion deadlock situations that
    will be committed to the new -current after the CVS tree splits - you can 
    actually take a 30MB core dump onto an MFS filesystem on a 48MB machine 
    using NFS based swap now while simultaniously running a vnode-eating
    (find /usr | xargs md5) and memory-eating (allocate/touch/loop) program.
    Over and over again.

    In anycase, anyone interested in looking at my current patch-set, which
    due to its complexity also includes the more seriously changed files
    en-toto, can look at it at:

	http://www.backplane.com/FreeBSD/
	http://www.backplane.com/FreeBSD/dillon-swapper-A8.tgz 

    No comments on syntax or #if 0's, please - there will be a general
    cleanup pass after the initial commit after the tree splits.    Also
    ignore the stuff that isn't obviously related to the VM system, like
    the if_slip junk -- those aren't really part of this project.

    This is the stuff that I've been working on with DG and John.  It is
    quite extensive:  don't try to understand the unified diff for
    vm/vm_page.c or vm/swap_pager.c, look at the files included along with
    the diff in the tar instead.  New swapper, new swap bitmap allocator,
    moderate vm_page_t handling changes, and lots of other junk.  Not all
    the code has been optimized yet, though due to the removal or reduction
    of two major linear linked lists it's probably already much faster then
    the old code despite the unwinding of some of the (improperly done) 
    manual code inlining.


:					Terry Lambert
:					terry@lambert.org


    Matthew Dillon  Engineering, HiWay Technologies, Inc. & BEST Internet 
                    Communications & God knows what else.
    <dillon@backplane.com> (Please include original email in any response)    

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



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