Date: Tue, 1 Apr 1997 09:39:42 -0500 (EST) From: "Peter M. Chen" <pmchen@eecs.umich.edu> To: freebsd-hackers@freebsd.org Subject: question on buffer cache and VMIO Message-ID: <199704011439.JAA26225@life.eecs.umich.edu>
index | next in thread | raw e-mail
Hi,
I'm starting to hack on FreeBSD and had some questions.
Background:
My goal is to make the file cache reliable without writing to disk under
normal operation (see Rio paper in ASPLOS 1996). We protect against power loss
by using a battery; we protect against kernel crashes by write-protecting the
file cache. The main benefit is you get reliability equivalent to mounting the
file system sync, yet with the performance of async (actually even better,
since FreeBSD's async option still does substantial amounts of I/O). This
works really well for mmap'ed files, which makes it possible to have VERY fast
transactions. It should also extend the battery life for portables. See
http://www.eecs.umich.edu/~pmchen/ for more info.
Questions re: buffer cache and VMIO
1) What's the relationship between the buffer cache and VM cache (I'm
not sure this is the proper terminology)? The buffer cache seems to
hold file data and metadata, while the VM cache holds only file data.
Do buffer headers point to the VM cache data? Can the VM cache hold
file data that is not in the buffer cache?
2) The buffer cache seems small relative to the physical memory. E.g.
on a 64 MB machine (51 MB available), maxbufspace defaults to only
6.3 MB. For working sets larger than this, there appears to be
significant overhead in frequently moving data between the VM
cache and buffer cache. Would it make sense to set NBUF larger
(e.g. enough to have the buffer cache fill memory)?
3) Dirty data gets written to disk when it leaves the buffer cache, even
if it is also in the VM cache. This makes sense normally (since
Unix traditionally bawrote data to disk as soon as it filled a block),
but this prevents my keeping lots of dirty file data around.
4) What happens to mmap'ed data? Does it reside in the VM cache? Are
there buffer headers for mmap'ed data?
5) I came across a strange phenomenon when trying to get rid of all
disk writes in ufs_remove. Even if i_nlink goes to 0, the file
is still fsync'ed. The call graph is: ufs_remove -> vput -> vrele ->
vm_object_deallocate -> vm_object_terminate -> vinvalbuf (with V_SAVE)
-> VOP_FSYNC. The system fails when I have vm_object_terminate
check for i_nlink and call vinvalbuf without V_SAVE. Can someone
explain why a deleted file needs to get fsynced (note that this
isn't the directory, but the actual file)?
General kernel questions:
1) I'd like the ability to read and write kernel global variables (without
going to ddb). I tried kvm, but that only works for variables in
i386/i386/symbols.raw. kgdb only works for off-line core dumps.
I finally used nm to get the symbol address and directly read and
wrote to /dev/kmem. This works fine, but I was wondering if there's
a better solution that exists already.
By the way, I've been SUPER impressed with FreeBSD. The code is
well-written, especially compared to other operating systems I've worked on;
Compiling the kernel is VERY fast; the system is fast and small; the
installation process is easy; the small number of packages and ports I've tried
work right away; the boot manager understands the file system. It has the feel
of a solid, well-put-together system.
Thanks for your time,
Pete
Prof. Peter M. Chen
EECS Department, 2225 EECS
1301 Beal Ave.
University of Michigan
Ann Arbor, MI 48109-2122
(313) 763-4472, fax: (313) 763-4617
pmchen@eecs.umich.edu
http://www.eecs.umich.edu/~pmchen/
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704011439.JAA26225>
