> -----Original Message----- > From: fio-owner@xxxxxxxxxxxxxxx [mailto:fio-owner@xxxxxxxxxxxxxxx] On > Behalf Of Dave Jiang > Sent: Wednesday, December 07, 2016 4:55 PM > Subject: [PATCH v2] fio: add device dax engine > ... > +static int fio_devdax_init(struct thread_data *td) > +{ > + struct thread_options *o = &td->o; > + const char *path; > + void *dl; > + > + if ((o->rw_min_bs & page_mask) && > + (o->fsync_blocks || o->fdatasync_blocks)) { > + log_err("fio: mmap options dictate a minimum block size > of " > + "%llu bytes\n", (unsigned long long) page_size); > + return 1; > + } > + > + path = getenv("FIO_PMEM_LIB"); > + if (!path) > + path = "libpmem.so"; > + > + dl = dlopen(path, RTLD_NOW | RTLD_NODELETE); > + if (!dl) { > + log_err("fio: unable to open libpmem: %s\n", dlerror()); > + return 1; > + } Should that open libpmem.so.1 rather than libpmem.so? (same question for the pmemblk engine) Although my upstream nvml Makefile installs a libpmem.so symbolic link, it looks like some or all of the distro packages (e.g. Fedora 25 and SUSE Linux Enterprise Server 12 SP2) are just installing so.1 symbolic links. So, fio fails to find the library. If I understand the version conventions correctly, including .1 would ensure ABI compatibility. distro library *pmem* files: /usr/lib64/libpmemblk.so.1 /usr/lib64/libpmemobj.so.1 /usr/lib64/libpmemblk.so.1.0.0 /usr/lib64/libpmemobj.so.1.0.0 /usr/lib64/libpmemlog.so.1 /usr/lib64/libpmem.so.1 /usr/lib64/libpmemlog.so.1.0.0 /usr/lib64/libpmem.so.1.0.0 vs. upstream nvml installation: /lib64/libpmem.a /lib64/libpmemlog.so.1.0.0 /lib64/libpmemblk.a /lib64/libpmemobj.a /lib64/libpmemblk.so /lib64/libpmemobj.so /lib64/libpmemblk.so.1 /lib64/libpmemobj.so.1 /lib64/libpmemblk.so.1.0.0 /lib64/libpmemobj.so.1.0.0 /lib64/libpmemlog.a /lib64/libpmem.so /lib64/libpmemlog.so /lib64/libpmem.so.1 /lib64/libpmemlog.so.1 /lib64/libpmem.so.1.0.0 --- Robert Elliott, HPE Persistent Memory ��.n��������+%������w��{.n�������^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�