Lines Matching +full:single +full:- +full:lane

2 BTT - Block Translation Table
14 using stored energy in capacitors to complete in-flight block writes, or perhaps
15 in firmware. We don't have this luxury with persistent memory - if a write is in
23 the heart of it, is an indirection table that re-maps all the blocks on the
37 next arena). The following depicts the "On-disk" metadata layout::
40 Backing Store +-------> Arena
41 +---------------+ | +------------------+
43 | Arena 0 +---+ | 4K |
44 | 512G | +------------------+
46 +---------------+ | |
51 +---------------+ | |
57 +---------------+ +------------------+
62 +------------------+
66 +------------------+
69 +------------------+
77 --------------
86 31 - 30 Error and Zero flags - Used in the following way::
97 29 - 0 Mappings to internal 'postmap' blocks
105 ABA Arena Block Address - Block offset/number within an arena
124 ---------------
133 old_map The old postmap ABA - after 'this' write completes, this will be a
136 lba->postmap_aba mapping, but we log it here in case we have to
139 valid/newest. It cycles between 01->10->11->01 (binary) under normal
147 Each of the above fields is 32-bit, making one entry 32 bytes. Entries are also
155 -----------------------
163 A lane number is obtained at the start of any IO, and is used for indexing into
164 all the on-disk and in-memory data structures for the duration of the IO. If
169 d. In-memory data structure: Read Tracking Table (RTT)
170 ------------------------------------------------------
190 e. In-memory data structure: map locks
191 --------------------------------------
196 free[lane] = map[premap_aba]
199 Both threads can update their respective free[lane] with the same old, freed
203 To solve this, we could have a single map lock (per arena) that has to be taken
210 -------------------------------
213 through all the entries, and for each lane, of the set of two possible
217 - Read map[log_entry.lba].
218 - If log_entry.new matches the map entry, then log_entry.old is free.
219 - If log_entry.new does not match the map entry, then log_entry.new is free.
220 (This case can only be caused by power-fails/unsafe shutdowns)
223 g. Summarizing - Read and Write flows
224 -------------------------------------
228 1. Convert external LBA to arena number + pre-map ABA
229 2. Get a lane (and take lane_lock)
230 3. Read map to get the entry for this pre-map ABA
231 4. Enter post-map ABA into RTT[lane]
235 8. Remove post-map ABA entry from RTT[lane]
236 9. Release lane (and lane_lock)
240 1. Convert external LBA to Arena number + pre-map ABA
241 2. Get a lane (and take lane_lock)
242 3. Use lane to index into in-memory free list and obtain a new block, next flog
246 6. Read map to get the existing post-map ABA entry for this pre-map ABA
248 8. Write new post-map ABA into map.
249 9. Write old post-map entry into the free list
251 11. Release lane (and lane_lock)
261 - Info block checksum does not match (and recovering from the copy also fails)
262 - All internal available blocks are not uniquely and entirely addressed by the
264 - Rebuilding free list from the flog reveals missing/duplicate/impossible
266 - A map entry is out of bounds
281 ndctl create-namespace -f -e namespace0.0 -m sector -l 4k
283 See ndctl create-namespace --help for more options.