Application development using the PMDK can be done using traditional memory mapped files without emulating NVDIMMs. Such files can exist on any storage media. However, data consistency assurance embedded within PMDK requires frequent synchronization of data that is being modified. Depending on platform capabilities, and underlying device where the files are, a different set of commands is used to facilitate synchronization. It might be msync(2)
for the regular hard drives, or combination of cache flushing instructions followed by memory fence instruction for the real persistent memory. Calling msync
or fsync
frequently can cause significant IO performance issues. For this reason, it is not recommended to use this approach for persistent memory application development.