venti, now with documentation!
This commit is contained in:
parent
a0d146edd7
commit
be7cbb4ef2
14 changed files with 2843 additions and 0 deletions
198
man/man3/venti-cache.3
Normal file
198
man/man3/venti-cache.3
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
.TH VENTI-CACHE 3
|
||||
.SH NAME
|
||||
VtBlock, VtCache,
|
||||
vtblockcopy,
|
||||
vtblockdirty,
|
||||
vtblockduplock,
|
||||
vtblockput,
|
||||
vtblockwrite,
|
||||
vtcachealloc,
|
||||
vtcacheallocblock,
|
||||
vtcacheblocksize,
|
||||
vtcachefree,
|
||||
vtcacheglobal,
|
||||
vtcachelocal,
|
||||
vtcachesetwrite,
|
||||
vtglobaltolocal,
|
||||
vtlocaltoglobal \- Venti block cache
|
||||
.SH SYNOPSIS
|
||||
.ft L
|
||||
#include <u.h>
|
||||
.br
|
||||
#include <libc.h>
|
||||
.br
|
||||
#include <venti.h>
|
||||
.ta +\w'\fLxxxx 'u
|
||||
.PP
|
||||
typedef struct VtBlock
|
||||
{
|
||||
uchar *data;
|
||||
uchar type;
|
||||
uchar score[VtScoreSize];
|
||||
u32int addr;
|
||||
...
|
||||
} VtBlock;
|
||||
.ta +\w'\fLVtBlock* 'u +\w'\fLxxxxxxxx'u
|
||||
.PP
|
||||
.B
|
||||
VtCache* vtcachealloc(VtConn *z, int blocksize, ulong nblocks, int mode);
|
||||
.PP
|
||||
.B
|
||||
void vtcachefree(VtCache *c);
|
||||
.PP
|
||||
.B
|
||||
u32int vtcacheblocksize(VtCache *c);
|
||||
.br
|
||||
.B
|
||||
int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int));
|
||||
.PP
|
||||
.B
|
||||
u32int vtglobaltolocal(uchar score[VtScoreSize])
|
||||
.br
|
||||
.B
|
||||
void vtlocaltoglobal(u32int local, uchar score[VtScoreSize])
|
||||
.PP
|
||||
.B
|
||||
VtBlock* vtcacheallocblock(VtCache *c, int type);
|
||||
.PP
|
||||
.B
|
||||
VtBlock* vtcachelocal(VtCache *c, u32int addr, int type);
|
||||
.PP
|
||||
.B
|
||||
VtBlock* vtcacheglobal(VtCache *c, uchar[VtScoreSize], int type);
|
||||
.PP
|
||||
.B
|
||||
void vtblockput(VtBlock *b);
|
||||
.PP
|
||||
.B
|
||||
void vtblockduplock(VtBlock *b);
|
||||
.PP
|
||||
.B
|
||||
int vtblockwrite(VtBlock *b);
|
||||
.PP
|
||||
.B
|
||||
void vtcachesetwrite(VtCache *c,
|
||||
.PP
|
||||
.B
|
||||
VtBlock* vtblockcopy(VtBlock *b);
|
||||
.PP
|
||||
.B
|
||||
int vtblockdirty(VtBlock *b);
|
||||
.SH DESCRIPTION
|
||||
These functions provide access to a simple in-memory
|
||||
cache of blocks already stored on a Venti server
|
||||
and blocks that will eventually be stored on a Venti server.
|
||||
.PP
|
||||
.I Vtcachealloc
|
||||
allocates a new cache using the client connection
|
||||
.I z
|
||||
(see
|
||||
.IR venti-conn (3)
|
||||
and
|
||||
.IR venti-client (3)),
|
||||
with room for
|
||||
.I nblocks
|
||||
of maximum block size
|
||||
.I blocksize .
|
||||
.PP
|
||||
.I Vtcachefree
|
||||
frees a cache and all the associated blocks.
|
||||
.PP
|
||||
.I Vtcacheblocksize
|
||||
.PP
|
||||
XXX global vs local blocks
|
||||
.PP
|
||||
.I Vtcacheallocblock
|
||||
allocates a new local block with the given
|
||||
.IR type .
|
||||
.PP
|
||||
.I Vtcachelocal
|
||||
retrieves the local block at address
|
||||
.I addr
|
||||
from the cache.
|
||||
The given
|
||||
.I type
|
||||
must match the type of the block found at
|
||||
.IR addr .
|
||||
.PP
|
||||
.I Vtcacheglobal
|
||||
retrieves the block with the given
|
||||
.I score
|
||||
and
|
||||
.I dtype
|
||||
from the cache, consulting the Venti server
|
||||
if necessary.
|
||||
If passed a local score,
|
||||
.I vtcacheglobal
|
||||
behaves as
|
||||
.IR vtcachelocal .
|
||||
.PP
|
||||
The block references returned by
|
||||
.IR vtcacheallocblock ,
|
||||
.IR vtcachelocal ,
|
||||
and
|
||||
.I vtcacheglobal
|
||||
must be released when no longer needed.
|
||||
.I Vtblockput
|
||||
releases such a reference.
|
||||
.PP
|
||||
It is occasionally convenient to have multiple variables
|
||||
refer to the same block.
|
||||
.I Vtblockduplock
|
||||
increments the block's reference count so that
|
||||
an extra
|
||||
.I vtblockput
|
||||
will be required in order to release the block.
|
||||
.PP
|
||||
.I Vtblockwrite
|
||||
writes a local block to the Venti server,
|
||||
changing the block to a global block.
|
||||
It calls the cache's
|
||||
.I write
|
||||
function
|
||||
to write the block to the server.
|
||||
The default
|
||||
.I write
|
||||
function is
|
||||
.I vtwrite
|
||||
(see
|
||||
.IR venti-client (3));
|
||||
.I vtsetcachewrite
|
||||
sets it.
|
||||
.I Vtsetcachewrite
|
||||
is used by clients to install replacement functions
|
||||
that run writes in the background or perform other
|
||||
additional processing.
|
||||
.PP
|
||||
.I Vtblockcopy
|
||||
copies a block in preparation for modifying its contents.
|
||||
The old block may be a local or global block,
|
||||
but the new block will be a local block.
|
||||
.PP
|
||||
The cache only evicts global blocks.
|
||||
Local blocks can only leave the cache via
|
||||
.IR vtblockwrite ,
|
||||
which turns them into global blocks, making them candidates for
|
||||
eviction.
|
||||
.PP
|
||||
If a new cache block must be allocated (for
|
||||
.IR vtcacheallocblock ,
|
||||
.IR vtcachelocal ,
|
||||
.IR vtcacheglobal ,
|
||||
or
|
||||
.IR vtblockcopy ),
|
||||
but the cache is filled (with local blocks and blocks that
|
||||
have not yet been released with
|
||||
.IR vtblockput ),
|
||||
the library prints the score and reference count of
|
||||
every block in the cache and then aborts.
|
||||
A full cache indicates either that the cache is too small,
|
||||
or, more commonly, that cache blocks are being leaked.
|
||||
.SH SOURCE
|
||||
.B \*9/src/libventi
|
||||
.SH SEE ALSO
|
||||
.IR venti (1),
|
||||
.IR venti (3),
|
||||
.IR venti-client (3),
|
||||
.IR venti-conn (3),
|
||||
.IR venti-file (3)
|
||||
Loading…
Add table
Add a link
Reference in a new issue