Subject: UBC status
To: None <,>
From: Chuck Silvers <>
List: tech-kern
Date: 09/24/1999 09:09:27
with the impending creation of the 1.5 release branch, I'd like to
get people thinking about what else needs to be done before the UBC
branch can be merged into -current.  (the intent is to merge it soonish
after the 1.5 branch is created, but it'll probably wait until sometime in
November... my job has been consuming all my time lately, but that will be
changing in the next month or so.)

towards that end, here's some status:

generally the UBC code works well enough to recompile a kernel,
even with "make -j 100".  I've also done some testing with copying
large (100s of megs) trees with "tar | (cd && tar)", which works fine.
I recall there were still some hanging problems with blocksize<pagesize
on the alpha, but not on x86, so that's one thing to watch out for.

here are some lists of things left to do:

should be done before the initial commit to -current:
- additional locking needed between VOP_GETPAGES() and VOPs that modify
  the file's size or blockmap.  I've got a start on this.
- implement error handling for uiomove() failures.
- readahead, and writebehind flushing.
- nfs write caching is currently write-thru, needs to become write-back again.
- flushing for "mount -o sync".
- fix any blocksize<pagesize problems.

needed before the first release but not critical for initial merge:
- support for returning errnos other than EFAULT from uiomove()
  (this is the "pcb_onfault_errno" stuff that was discussed on tech-kern
  a while back).
- pagedaemon optimizations.  (the pagedaemon is triggered in various situations
  now that it wasn't before, and it doesn't behave so well sometimes.)
- add limits on how much of physmem is used for cached file data?
- change sizing of the buffer cache?  (it should default to using
  less memory now, since file data will be in the page cache.)
- change buffer cache buffers to have only 8k of virtual space?
- various code cleanup (merge uvm_vnode into vnode, add some macros to
  hide locking details, etc).

would be nice but aren't really necessary:
- change VBWAIT to be two flags like UVM_VNODE_IOSYNC{,WAIT} used to be.
- implement non-wired kernel pmap entries for sparc, sun3 (maybe one other?).

does anyone have different opinions on how to catagorize these items?
does anyone have any items they think should be added?

I've put this list at
and I'll update that page as the list changes.

for non-committers, if you'd like to try out a UBC kernel,
you can fetch the code via anoncvs with:

	cvs -d co -r chs-ubc2 syssrc

(you don't need to do anything to enable UBC, it's enabled by default in
the branch.)