b...@bullno1.com wrote:
> I have read a few threads on lmdb alignment but I am still not clear on what 
> kind of padding should be done.
> 
> Use case: I want to store aligned SIMD vectors in the value and operate on 
> them directly with SIMD instructions without copying.
> 
> As I understand it, lmdb guarantees 2-byte alignment.
> However, it can also move nodes around for tree rebalancing or page 
> reclaiming.
> Thus, merely aligning the key and value might not be enough.
> 
> Right now, based on my reading of the code, I'm assuming that the data layout 
> in a leaf page is like this:
> 
> [page_header][mp_ptrs]...[node_header][key][value][node_header][key][value]
> 
> Basically, nodes are stored contiguously in memory with `node_header` and 
> `key` always aligned to 2-byte.
> New nodes are allocated from the bottom of the page and offsets are 
> stored/allocated into MDB_page.mp_ptrs from the top.
> Is this correct?

No.
> 
> If so, to ensure that `value` has a certain alignment, even when accounting 
> for nodes being moved around, one would also have to ensure that 
> `sizeof(node_header) + sizeof(key) + sizeof(value)` is a multiple of the 
> alignment.
> Is this reasoning correct?

No.
> 
> For the overflow page, is the structure similar? Just that one single page 
> header is used for a number of contiguous pages.
> 


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

Reply via email to