FDPFS is a File System in Userspace (FUSE) - based file system that expose FDP SSD's chariteristics to allow ease of use data placement on FDP-enabled SSDs.
If you use this work, please cite our paper published in IEEE Embedded Systems Letters, vol. 16, no. 4.
Ping-Xiang Chen, Dongjoo Seo, and Nikil Dutt. "FDPFS: Leveraging File System Abstraction for FDP SSD Data Placement." IEEE Embedded Systems Letters 16.4 (2024): 349-352. https://doi.org/10.1109/LES.2024.3443205
git clone https://github.com/pingxiang-chen/fuse-fdpfs.gitwget https://github.com/libfuse/libfuse/releases/download/fuse-3.16.2/fuse-3.16.2.tar.gztar xzf fuse-3.16.2.tar.gzFollow the README to install libfuse 3.16.2.
wget https://github.com/linux-nvme/libnvme/archive/refs/tags/v1.8.ziptar xzf v1.8.zipFollow the README to install libnvme 3.16.2.
wget https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/snapshot/linux-6.7.9.tar.gztar xvf linux-6.7.9.tar.gzBuild and compile linux kernel 6.7.9.
After installed the kernel, install linux headers to your computer, for example:
sudo make headers_install INSTALL_HDR_PATH=/usrcd fuse-fdpfs && makeSwitch to superuser
sudo suMount FDPFS on FDP SSD.
cd scripts && ./mount_fdpfs.shOpen another terminal, and switch to sudo user as well, you should be able to see FDPFS exposes the placment identifier as directorys
ls fuse_mountYou should be able to see the following:

You can try to do simple write based on the placment identifier expose by FDPFS
echo "a" >> p1/acat p1/aWhen you check with nvme-cli, you should be able to see there are 2 bytes written to placement identifier 1.
cd scriptssudo fio fdp_write.fiosudo fio fdp_read.fiocd scripts && ./mount_fdpfs.sh 1 Open another terminal, and switch to sudo user as well, you should be able to see FDPFS exposes the placment identifier as directorys
sudo fio test-write-small-10s-p0-a.fiosudo fio test-read-small-10s-p0-a.fio