OpenFAM Reference Implementation

Design Choices

Table 1 describes the current design limits within the OpenFAM reference implementation. Since the maximum FAM size in the reference implementation is bound by the amount of memory available at the memory server, these parameters should not pose undue limitations on memory size, while enabling developers to build reasonable sized applications using the reference implementation.
Table 1: Data set limits per memory server in the reference implementation
ItemLimit
Maximum FAM size128 TB
Minimum region size8 GB
Maximum region size1 TB
Maximum number of regions16 K regions
Minimum data Item size128 bytes
Maximum data Item size512 GB
Maximum number of data items within a region~8 B data Items
As mentioned in The OpenFAM API: A Programming Model for Disaggregated Persistent Memory, the reference implementation uses libfabric to handle the underlying memory traffic. Libfabric uses 64 bit keys to manage memory regions and associated access permissions. Within OpenFAM, every data item requires independent access permissions, so OpenFAM data items are mapped to libfabric regions for access from remote PEs. Rather than assigning random keys for data items within libfabric, access keys are explicitly constructed using a combination of OpenFAM region Id, the data item id and OpenFAM permissions using the sequence Key = <Region Id ><DataItem Id><R|RW>. This enables the library to dynamically construct the required libfabric keys from data structures maintained within the implementation. Corresponding to the limits shown in Table 1, the field widths in the libfabric key are shown in Table 2.
Table 2: Construction of libfabric access keys
ItemLimit
Region Id14 bits
Data Item Id33 bits
Permission1 bit (0 = R | 1 = RW)
Total key length48 bits
Reserved for future use16 bits
The implementation supports the complete API with exceptions highlighted in Table 3.
Table 3: OpenFAM APIs currently not available in the reference implementation
APIMemory ServerShared MemoryComment
fam_mapNOYESLibfabric currently does not support mmap APIs
fam_unmapNOYESLibfabric currently does not support mmap APIs
fam_fenceYES (only with sockets provider)NOFence operation is not supported by PSM2 and Verbs libfabric provider.
Support for other providers and Shared Memory model will be added in future
Since the underlying libfabric providers do not support 128-bit compare and swap (CAS) operations, CAS operations have been implemented in software.