Today each VOS instance has single associated “data blob” to store the bulk values, to support metadata on SSD, two more blobs will be introduced, one is named “VOS “meta blob” for storing VOS index and small values, the other is named “WAL blob” for storing WAL. Depending on the configuration schemes, VOS meta blob and WAL blob could reside in same SSD or separate SSDs, they could also share same SSD with data blob as well.
...
Meta blob layout
VOS Meta blob starts with a “VOS “meta blob header”, the remaining area is “VOS data “metadata area” which is filled by VOS indexes, small values and allocator heap.
The durable format of VOS meta blob header is defined as following:
Code Block | ||
---|---|---|
| ||
struct vosmeta_blob_header { uint32_t vbhmbh_magic; uint32_t vbhmbh_version; uuid_t vbhmbh_vosmeta_devid; /* VOSMeta SSD device ID */ uuid_t vbhmbh_wal_devid; /* WAL device ID */ uuid_t vbhmbh_data_devid; /* Data device ID */ uint64_t vbhmbh_vosmeta_blobid; /* VOSMeta SPDK blob ID */ uint64_t vbhmbh_wal_blobid; /* WAL SPDK blob ID */ uint64_t vbhmbh_data_blobid; /* Data SPDK blob ID */ uint32_t vbhmbh_blk_bytes; /* Block size for VOSmeta blob, in bytes */ uint32_t vbhmbh_hdr_blks; /* VOSMeta blob header size, in blocks */ uint64_t vbhmbh_tot_blks; /* VOSMeta blob capacity, in blocks */ uint32_t vbhmbh_vos_id; /* VOSMeta target ID, per engine ID */ uint16_t vbhmbh_csum_type; /* Checksum type */ uint16_t vbhmbh_csum_len; /* Checksum length in bytes */ uint8_t vbhmbh_csum[0]; /* Checksum of the header */ }; |
The layout of VOS data metadata area (TBD)
WAL blob layout
WAL blob starts with a “WAL blob header”, the remaining area is used as a circular log to store WAL transactions.
...