Lines Matching refs:map

48 "chunk map" in persistent memory.  Each chunk map consists of N 64-bit values, where N is the maxim…
54 "free chunk map list".
56 Finally, the logical view of the compressed block device is represented by the "logical map". The
57 logical map is a mapping of chunk offsets into the compressed block device to the corresponding
58 chunk map. Each entry in the logical map is a 64-bit value, denoting the associated chunk map.
59 A special value (UINT64_MAX) is used if there is no associated chunk map. The mapping is
61 array index into the array of chunk map entries. At start, all entries in the logical map have no
62 associated chunk map. Note that while access to the backing storage device is in 4KB units, the
77 * A "chunk map" will be 32 bytes in size. This corresponds to 4 backing IO units per chunk
80 for the 4 chunks in the compressed block device (64KB / 16KB), plus an extra chunk map for use
82 * "Free chunk map list" will consist of indices 0 through 4 (inclusive). These represent the
84 * The "logical map" will be allocated in 32B of persistent memory. This corresponds to
111 * Find the corresponding index into the logical map. Offset 32KB divided by the chunk size
113 * Entry 2 in the logical map is "X". This means no part of this 16KB has been written to yet.
121 * Allocate a chunk map (0) from the free chunk map list.
122 * Write (0, 1, X, X) to the chunk map. This represents that only 2 backing IO units were used to
124 * Write the chunk map index to entry 2 in the logical map.
146 * Find the corresponding index into the logical map. Offset 8KB divided by the chunk size is 0.
147 * Entry 0 in the logical map is "X". This means no part of this 16KB has been written to yet.
156 * Allocate a chunk map (1) from the free chunk map list.
157 * Write (2, X, X, X) to the chunk map.
158 * Write the chunk map index to entry 0 in the logical map.
180 * Offset 16KB maps to index 1 in the logical map.
181 * Entry 1 in the logical map is "X". This means no part of this 16KB has been written to yet.
186 * Offset 4KB maps to index 0 in the logical map.
187 * Entry 0 in the logical map is "1". Since we are not overwriting the entire chunk, we must
189 * Chunk map 1 only specifies one backing IO unit (2). Allocate a 16KB buffer and read block
200 * Allocate chunk map 2 from the free chunk map list.
201 * Write (3, 4, X, X) to chunk map 2. Note that at this point, the chunk map is not referenced
202 by the logical map. If there was a power fail at this point, the previous data for this chunk
204 * Write chunk map 2 to entry 0 in the logical map.
205 * Free chunk map 1 back to the free chunk map list.
234 chunk 0 in the logical map) and a 8KB write at offset 16KB (affecting only chunk 1 in the
235 logical map). Each write is processed independently using the algorithm described above.
240 Unmap operations on an entire chunk are achieved by removing the chunk map entry (if any) from
241 the logical map. The chunk map is returned to the free chunk map list, and any backing IO units
242 associated with the chunk map are returned to the free backing IO unit list.
246 detected via the uncompressed data equaling all zeroes. When this occurs, the chunk map entry
247 may be removed from the logical map.
255 operation covers an entire chunk, we can remove the chunk's entry in the logical map
264 When the compressed volume is reloaded, the free chunk map list and free backing IO unit list
265 are reconstructed by walking the logical map. The logical map will only point to valid
270 after a chunk map is updated, but before it is written to the logical map - that everything