UBC(9) BSD Kernel Developer's Manual UBC(9)NAME
ubc — unified buffer cache
SYNOPSIS
#include <uvm/uvm.h>
void *
ubc_alloc(struct uvm_object *uobj, voff_t offset, vsize_t *lenp,
int advice, int flags);
void
ubc_release(void *va, int flags);
int
ubc_uiomove(struct uvm_object *uobj, struct uio *uio, vsize_t todo,
int advice, int flags);
void
ubc_purge(struct uvm_object *uobj);
DESCRIPTIONubc_alloc() creates a kernel mapping of uobj starting at offset offset.
The desired length of the mapping is pointed to by lenp, but the actual
mapping may be smaller than this. lenp is updated to contain the actual
length mapped. advice is the access pattern hint, which must be one of
UVM_ADV_NORMAL No hint
UVM_ADV_RANDOM Random access hint
UVM_ADV_SEQUENTIAL Sequential access hint (from lower offset to
higher offset)
The possible flags are
UBC_READ Mapping will be accessed for read.
UBC_WRITE Mapping will be accessed for write.
UBC_FAULTBUSY Fault in window's pages already during mapping
operation. Makes sense only for write.
Once the mapping is created, it must be accessed only by methods that can
handle faults, such as uiomove() or kcopy(). Page faults on the mapping
will result in the object's pager method being called to resolve the
fault.
ubc_release() frees the mapping at va for reuse. The mapping may be
cached to speed future accesses to the same region of the object. The
flags can be any of
UBC_UNMAP Do not cache mapping.
ubc_uiomove() allocates an UBC memory window, performs I/O on it and
unmaps the window. The advice parameter takes the same values as the
respective parameter in ubc_alloc() and the flags parameter takes the
same arguments as ubc_alloc() and ubc_release(). Additionally, the flag
UBC_PARTIALOK can be provided to indicate that it is acceptable to return
if an error occurs mid-transfer.
ubc_purge() disassociates all UBC structures from an empty UVM object,
specified by uobj.
CODE REFERENCES
The ubc subsystem is implemented within the file sys/uvm/uvm_bio.c.
SEE ALSOpmap(9), uiomove(9), uvm(9), vnode(9), vnodeops(9)
Chuck Silvers, "UBC: An Efficient Unified I/O and Memory Caching
Subsystem for NetBSD", Proceedings of the FREENIX Track: 2000 USENIX
Annual Technical Conference, USENIX Association,
http://www.usenix.org/event/usenix2000/freenix/full_papers/silvers/silvers.pdf,
285-290, June 18-23, 2000.
HISTORY
UBC first appeared in NetBSD 1.6.
AUTHORS
Chuck Silvers ⟨chuq@chuq.com⟩ designed and implemented the UBC part of
UVM, which uses UVM pages to cache vnode data rather than the traditional
buffer cache buffers.
BSD June 14, 2011 BSD