Blame


1 be7cbb4e 2005-07-12 devnull .TH VENTI-CACHE 3
2 be7cbb4e 2005-07-12 devnull .SH NAME
3 be7cbb4e 2005-07-12 devnull VtBlock, VtCache,
4 be7cbb4e 2005-07-12 devnull vtblockcopy,
5 be7cbb4e 2005-07-12 devnull vtblockdirty,
6 be7cbb4e 2005-07-12 devnull vtblockduplock,
7 be7cbb4e 2005-07-12 devnull vtblockput,
8 be7cbb4e 2005-07-12 devnull vtblockwrite,
9 be7cbb4e 2005-07-12 devnull vtcachealloc,
10 be7cbb4e 2005-07-12 devnull vtcacheallocblock,
11 be7cbb4e 2005-07-12 devnull vtcacheblocksize,
12 be7cbb4e 2005-07-12 devnull vtcachefree,
13 be7cbb4e 2005-07-12 devnull vtcacheglobal,
14 be7cbb4e 2005-07-12 devnull vtcachelocal,
15 be7cbb4e 2005-07-12 devnull vtcachesetwrite,
16 be7cbb4e 2005-07-12 devnull vtglobaltolocal,
17 be7cbb4e 2005-07-12 devnull vtlocaltoglobal \- Venti block cache
18 be7cbb4e 2005-07-12 devnull .SH SYNOPSIS
19 be7cbb4e 2005-07-12 devnull .ft L
20 be7cbb4e 2005-07-12 devnull #include <u.h>
21 be7cbb4e 2005-07-12 devnull .br
22 be7cbb4e 2005-07-12 devnull #include <libc.h>
23 be7cbb4e 2005-07-12 devnull .br
24 be7cbb4e 2005-07-12 devnull #include <venti.h>
25 be7cbb4e 2005-07-12 devnull .ta +\w'\fLxxxx 'u
26 be7cbb4e 2005-07-12 devnull .PP
27 be7cbb4e 2005-07-12 devnull typedef struct VtBlock
28 be7cbb4e 2005-07-12 devnull {
29 be7cbb4e 2005-07-12 devnull uchar *data;
30 be7cbb4e 2005-07-12 devnull uchar type;
31 be7cbb4e 2005-07-12 devnull uchar score[VtScoreSize];
32 be7cbb4e 2005-07-12 devnull u32int addr;
33 be7cbb4e 2005-07-12 devnull ...
34 be7cbb4e 2005-07-12 devnull } VtBlock;
35 be7cbb4e 2005-07-12 devnull .ta +\w'\fLVtBlock* 'u +\w'\fLxxxxxxxx'u
36 be7cbb4e 2005-07-12 devnull .PP
37 be7cbb4e 2005-07-12 devnull .B
38 be7cbb4e 2005-07-12 devnull VtCache* vtcachealloc(VtConn *z, int blocksize, ulong nblocks, int mode);
39 be7cbb4e 2005-07-12 devnull .PP
40 be7cbb4e 2005-07-12 devnull .B
41 be7cbb4e 2005-07-12 devnull void vtcachefree(VtCache *c);
42 be7cbb4e 2005-07-12 devnull .PP
43 be7cbb4e 2005-07-12 devnull .B
44 be7cbb4e 2005-07-12 devnull u32int vtcacheblocksize(VtCache *c);
45 be7cbb4e 2005-07-12 devnull .br
46 be7cbb4e 2005-07-12 devnull .B
47 be7cbb4e 2005-07-12 devnull int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int));
48 be7cbb4e 2005-07-12 devnull .PP
49 be7cbb4e 2005-07-12 devnull .B
50 be7cbb4e 2005-07-12 devnull u32int vtglobaltolocal(uchar score[VtScoreSize])
51 be7cbb4e 2005-07-12 devnull .br
52 be7cbb4e 2005-07-12 devnull .B
53 be7cbb4e 2005-07-12 devnull void vtlocaltoglobal(u32int local, uchar score[VtScoreSize])
54 be7cbb4e 2005-07-12 devnull .PP
55 be7cbb4e 2005-07-12 devnull .B
56 be7cbb4e 2005-07-12 devnull VtBlock* vtcacheallocblock(VtCache *c, int type);
57 be7cbb4e 2005-07-12 devnull .PP
58 be7cbb4e 2005-07-12 devnull .B
59 be7cbb4e 2005-07-12 devnull VtBlock* vtcachelocal(VtCache *c, u32int addr, int type);
60 be7cbb4e 2005-07-12 devnull .PP
61 be7cbb4e 2005-07-12 devnull .B
62 be7cbb4e 2005-07-12 devnull VtBlock* vtcacheglobal(VtCache *c, uchar[VtScoreSize], int type);
63 be7cbb4e 2005-07-12 devnull .PP
64 be7cbb4e 2005-07-12 devnull .B
65 be7cbb4e 2005-07-12 devnull void vtblockput(VtBlock *b);
66 be7cbb4e 2005-07-12 devnull .PP
67 be7cbb4e 2005-07-12 devnull .B
68 be7cbb4e 2005-07-12 devnull void vtblockduplock(VtBlock *b);
69 be7cbb4e 2005-07-12 devnull .PP
70 be7cbb4e 2005-07-12 devnull .B
71 be7cbb4e 2005-07-12 devnull int vtblockwrite(VtBlock *b);
72 be7cbb4e 2005-07-12 devnull .PP
73 be7cbb4e 2005-07-12 devnull .B
74 be7cbb4e 2005-07-12 devnull void vtcachesetwrite(VtCache *c,
75 be7cbb4e 2005-07-12 devnull .PP
76 be7cbb4e 2005-07-12 devnull .B
77 be7cbb4e 2005-07-12 devnull VtBlock* vtblockcopy(VtBlock *b);
78 be7cbb4e 2005-07-12 devnull .PP
79 be7cbb4e 2005-07-12 devnull .B
80 be7cbb4e 2005-07-12 devnull int vtblockdirty(VtBlock *b);
81 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
82 be7cbb4e 2005-07-12 devnull These functions provide access to a simple in-memory
83 be7cbb4e 2005-07-12 devnull cache of blocks already stored on a Venti server
84 be7cbb4e 2005-07-12 devnull and blocks that will eventually be stored on a Venti server.
85 be7cbb4e 2005-07-12 devnull .PP
86 be7cbb4e 2005-07-12 devnull .I Vtcachealloc
87 be7cbb4e 2005-07-12 devnull allocates a new cache using the client connection
88 be7cbb4e 2005-07-12 devnull .I z
89 be7cbb4e 2005-07-12 devnull (see
90 be7cbb4e 2005-07-12 devnull .IR venti-conn (3)
91 be7cbb4e 2005-07-12 devnull and
92 be7cbb4e 2005-07-12 devnull .IR venti-client (3)),
93 be7cbb4e 2005-07-12 devnull with room for
94 be7cbb4e 2005-07-12 devnull .I nblocks
95 be7cbb4e 2005-07-12 devnull of maximum block size
96 be7cbb4e 2005-07-12 devnull .I blocksize .
97 be7cbb4e 2005-07-12 devnull .PP
98 be7cbb4e 2005-07-12 devnull .I Vtcachefree
99 be7cbb4e 2005-07-12 devnull frees a cache and all the associated blocks.
100 be7cbb4e 2005-07-12 devnull .PP
101 be7cbb4e 2005-07-12 devnull .I Vtcacheblocksize
102 be7cbb4e 2005-07-12 devnull .PP
103 be7cbb4e 2005-07-12 devnull XXX global vs local blocks
104 be7cbb4e 2005-07-12 devnull .PP
105 be7cbb4e 2005-07-12 devnull .I Vtcacheallocblock
106 be7cbb4e 2005-07-12 devnull allocates a new local block with the given
107 be7cbb4e 2005-07-12 devnull .IR type .
108 be7cbb4e 2005-07-12 devnull .PP
109 be7cbb4e 2005-07-12 devnull .I Vtcachelocal
110 be7cbb4e 2005-07-12 devnull retrieves the local block at address
111 be7cbb4e 2005-07-12 devnull .I addr
112 be7cbb4e 2005-07-12 devnull from the cache.
113 be7cbb4e 2005-07-12 devnull The given
114 be7cbb4e 2005-07-12 devnull .I type
115 be7cbb4e 2005-07-12 devnull must match the type of the block found at
116 be7cbb4e 2005-07-12 devnull .IR addr .
117 be7cbb4e 2005-07-12 devnull .PP
118 be7cbb4e 2005-07-12 devnull .I Vtcacheglobal
119 be7cbb4e 2005-07-12 devnull retrieves the block with the given
120 be7cbb4e 2005-07-12 devnull .I score
121 be7cbb4e 2005-07-12 devnull and
122 be7cbb4e 2005-07-12 devnull .I dtype
123 be7cbb4e 2005-07-12 devnull from the cache, consulting the Venti server
124 be7cbb4e 2005-07-12 devnull if necessary.
125 be7cbb4e 2005-07-12 devnull If passed a local score,
126 be7cbb4e 2005-07-12 devnull .I vtcacheglobal
127 be7cbb4e 2005-07-12 devnull behaves as
128 be7cbb4e 2005-07-12 devnull .IR vtcachelocal .
129 be7cbb4e 2005-07-12 devnull .PP
130 be7cbb4e 2005-07-12 devnull The block references returned by
131 be7cbb4e 2005-07-12 devnull .IR vtcacheallocblock ,
132 be7cbb4e 2005-07-12 devnull .IR vtcachelocal ,
133 be7cbb4e 2005-07-12 devnull and
134 be7cbb4e 2005-07-12 devnull .I vtcacheglobal
135 be7cbb4e 2005-07-12 devnull must be released when no longer needed.
136 be7cbb4e 2005-07-12 devnull .I Vtblockput
137 be7cbb4e 2005-07-12 devnull releases such a reference.
138 be7cbb4e 2005-07-12 devnull .PP
139 be7cbb4e 2005-07-12 devnull It is occasionally convenient to have multiple variables
140 be7cbb4e 2005-07-12 devnull refer to the same block.
141 be7cbb4e 2005-07-12 devnull .I Vtblockduplock
142 be7cbb4e 2005-07-12 devnull increments the block's reference count so that
143 be7cbb4e 2005-07-12 devnull an extra
144 be7cbb4e 2005-07-12 devnull .I vtblockput
145 be7cbb4e 2005-07-12 devnull will be required in order to release the block.
146 be7cbb4e 2005-07-12 devnull .PP
147 be7cbb4e 2005-07-12 devnull .I Vtblockwrite
148 be7cbb4e 2005-07-12 devnull writes a local block to the Venti server,
149 be7cbb4e 2005-07-12 devnull changing the block to a global block.
150 be7cbb4e 2005-07-12 devnull It calls the cache's
151 be7cbb4e 2005-07-12 devnull .I write
152 be7cbb4e 2005-07-12 devnull function
153 be7cbb4e 2005-07-12 devnull to write the block to the server.
154 be7cbb4e 2005-07-12 devnull The default
155 be7cbb4e 2005-07-12 devnull .I write
156 be7cbb4e 2005-07-12 devnull function is
157 be7cbb4e 2005-07-12 devnull .I vtwrite
158 be7cbb4e 2005-07-12 devnull (see
159 be7cbb4e 2005-07-12 devnull .IR venti-client (3));
160 be7cbb4e 2005-07-12 devnull .I vtsetcachewrite
161 be7cbb4e 2005-07-12 devnull sets it.
162 be7cbb4e 2005-07-12 devnull .I Vtsetcachewrite
163 be7cbb4e 2005-07-12 devnull is used by clients to install replacement functions
164 be7cbb4e 2005-07-12 devnull that run writes in the background or perform other
165 be7cbb4e 2005-07-12 devnull additional processing.
166 be7cbb4e 2005-07-12 devnull .PP
167 be7cbb4e 2005-07-12 devnull .I Vtblockcopy
168 be7cbb4e 2005-07-12 devnull copies a block in preparation for modifying its contents.
169 be7cbb4e 2005-07-12 devnull The old block may be a local or global block,
170 be7cbb4e 2005-07-12 devnull but the new block will be a local block.
171 be7cbb4e 2005-07-12 devnull .PP
172 be7cbb4e 2005-07-12 devnull The cache only evicts global blocks.
173 be7cbb4e 2005-07-12 devnull Local blocks can only leave the cache via
174 be7cbb4e 2005-07-12 devnull .IR vtblockwrite ,
175 be7cbb4e 2005-07-12 devnull which turns them into global blocks, making them candidates for
176 be7cbb4e 2005-07-12 devnull eviction.
177 be7cbb4e 2005-07-12 devnull .PP
178 be7cbb4e 2005-07-12 devnull If a new cache block must be allocated (for
179 be7cbb4e 2005-07-12 devnull .IR vtcacheallocblock ,
180 be7cbb4e 2005-07-12 devnull .IR vtcachelocal ,
181 be7cbb4e 2005-07-12 devnull .IR vtcacheglobal ,
182 be7cbb4e 2005-07-12 devnull or
183 be7cbb4e 2005-07-12 devnull .IR vtblockcopy ),
184 be7cbb4e 2005-07-12 devnull but the cache is filled (with local blocks and blocks that
185 be7cbb4e 2005-07-12 devnull have not yet been released with
186 be7cbb4e 2005-07-12 devnull .IR vtblockput ),
187 be7cbb4e 2005-07-12 devnull the library prints the score and reference count of
188 be7cbb4e 2005-07-12 devnull every block in the cache and then aborts.
189 be7cbb4e 2005-07-12 devnull A full cache indicates either that the cache is too small,
190 be7cbb4e 2005-07-12 devnull or, more commonly, that cache blocks are being leaked.
191 be7cbb4e 2005-07-12 devnull .SH SOURCE
192 be7cbb4e 2005-07-12 devnull .B \*9/src/libventi
193 be7cbb4e 2005-07-12 devnull .SH SEE ALSO
194 be7cbb4e 2005-07-12 devnull .IR venti (1),
195 be7cbb4e 2005-07-12 devnull .IR venti (3),
196 be7cbb4e 2005-07-12 devnull .IR venti-client (3),
197 be7cbb4e 2005-07-12 devnull .IR venti-conn (3),
198 be7cbb4e 2005-07-12 devnull .IR venti-file (3)