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.
git clone https://github.com/pingxiang-chen/fuse-fdpfs.git
wget https://github.com/libfuse/libfuse/releases/download/fuse-3.16.2/fuse-3.16.2.tar.gz
tar xzf fuse-3.16.2.tar.gz
Follow the README to install libfuse 3.16.2.
wget https://github.com/linux-nvme/libnvme/archive/refs/tags/v1.8.zip
tar xzf v1.8.zip
Follow 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.gz
tar xvf linux-6.7.9.tar.gz
Build 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=/usr
cd fuse-fdpfs && make
Switch to superuser
sudo su
Mount FDPFS on FDP SSD.
cd scripts && ./mount_fdpfs.sh
Open another terminal, and switch to sudo user as well, you should be able to see FDPFS exposes the placment identifier as directorys
ls fuse_mount
You 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/a
cat p1/a
When you check with nvme-cli, you should be able to see there are 2 bytes written to placement identifier 1.
cd scripts
sudo fio fdp_write.fio
cd 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-small-10s-p0-a.fio