Hi Muneendra,
If I'm understanding the fio config file you included, you are using the psync engine with Direct I/O enabled. That means fio will open the file with O_DIRECT, telling the system to avoid the system page cache when possible. It will then do I/O using syscalls like preadv() and pwritev(). When you run without the dax mount option, I would expect the file system to call into the pmem driver, and the pmem driver will do memcpy to/from the media directly to/from the fio buffers (no system page cache used). When you run with the dax mount option, the file system is free to access the media directly, but the result is the same: doing memcpy to/from the media directly to/from the fio buffers (still no system page cache used). The result is that the code paths are almost identical and I would expect the performance to be very close.
Where dax really makes a difference in performance is in different cases. One case is when small accesses are used, like when a data structure is memory-mapped and updated in-place using load & store instructions, using cache flushes to make things persistent. Without DAX, each access to storage is in blocks, so the small updates get "rounded up" to larger I/Os. Another case where where dax outperforms storage is when I/O over PCIe is avoided, so instead of submitting an I/O to a device, sleeping, waking up on an interrupt, etc. the dax access just accesses persistence in-place.
Since fio is all about doing block-sized access, you're basically using persistent memory to emulate a block device and getting similar results that you can get with O_DIRECT.
Hope that helps,
-andy