The 4.15 Linux kernel introduced a new flag to mmap() called MAP_SYNC. If the mapping with MAP_SYNC is successful, PMDK knows that flushing from user space using instructions like CLWB is safe. Otherwise, it falls back to calling msync(). The msync() call can be slower for the PMDK-style transactions because they are fine-grained, flushing lots of little stores during a typical transaction. Calling into the kernel has an overhead, as does the code path that msync() takes.