This is the repository for AGIO v0.1, from the paper Asynchrony and GPUs: Bridging this Dichotomy for I/O with AGIO.
Software Requirements
Linux kernel 6.8
Nvidia driver 570 (open version)
CMake 3.31
CUDA 12.8 and its nvcc compiler
GCC 12 and a C++ compiler which supports C++17
Different versions may work, but not tested
System Configurations
Disable IOMMU (both in BIOS and kernel) To disable in the kernel, have iommu=off and intel_iommu=off / amd_iommu=off in the kernel command line (Check /etc/default/grub if your system uses grub, and verify using dmesg)
Build kernel symbols for the Nvidia driver (sudo make inside the Nvidia driver source directory, usually located in /usr/src)
Enable PCI P2PDMA and enable PCI BAR1 Add parameters for the nvidia kernel module:
Lock GPU frequency using nvidia-smi (e.g. to use 1410Mhz, $ sudo nvidia-smi -lgc 1410,1410)
Build
$ mkdir build; cd build
$ cmake ..
$ make
$ cd module; make
You will have AGIO applications (main-appname) and the necessary kernel module (libnvm.ko) file ready.
This repository includes all dependencies as a git subtree.
AGIO Configurations (via .toml files)
On initial cmake build, cmake will check if the build folder has the AGIO configuration files. If not, it will copy from the sources to the build directory, with a _in.toml suffix.
options_in.toml: contains configurations for AGIO
work_in-appname.toml: contains configurations for appname application
Please refer to the comments in the configuration files for additional details.
Application Input Datasets
Please refer to app/README.md.
Bind NVMe devices with AGIO
Unbind NVMe device(s) from the default kernel module (nvme). Assuming the PCIe BDF of the NVMe device is 0000:e5:00.0, $ echo "0000:e5:00.0" | sudo tee /sys/bus/pci/drivers/nvme/unbind
Load the libnvm module, and all NVMe devices not bound to the default kernel module will be bound to libnvm, with a device file /dev/libnvm* exposed. $ sudo insmod libnvm.ko
Bind NVMe devices back with default kernel module
Unload and unbind the NVMe devices from the libnvm kernel module $ sudo rmmod libnvm
For each unbound NVMe drive, bind the drive back to its default kernel module $ echo "0000:e5:00.0" | sudo tee /sys/bus/pci/drivers/nvme/bind
Acknowledgement
AGIO uses libnvm and BaM. AGIO also includes JSON for Modern C++ (json.hpp) and toml++ (toml.hpp).
AGIO
This is the repository for AGIO v0.1, from the paper
Asynchrony and GPUs: Bridging this Dichotomy for I/O with AGIO.Software Requirements
Different versions may work, but not tested
System Configurations
To disable in the kernel, have
iommu=offandintel_iommu=off/amd_iommu=offin the kernel command line(Check
/etc/default/grubif your system usesgrub, and verify usingdmesg)(
sudo makeinside the Nvidia driver source directory, usually located in/usr/src)Add parameters for the
nvidiakernel module:nvidia-smi(e.g. to use 1410Mhz,
$ sudo nvidia-smi -lgc 1410,1410)Build
You will have AGIO applications (
main-appname) and the necessary kernel module (libnvm.ko) file ready. This repository includes all dependencies as a git subtree.AGIO Configurations (via
.tomlfiles)On initial cmake build, cmake will check if the build folder has the AGIO configuration files. If not, it will copy from the sources to the build directory, with a
_in.tomlsuffix.options_in.toml: contains configurations for AGIOwork_in-appname.toml: contains configurations forappnameapplicationPlease refer to the comments in the configuration files for additional details.
Application Input Datasets
Please refer to
app/README.md.Bind NVMe devices with AGIO
nvme). Assuming the PCIe BDF of the NVMe device is0000:e5:00.0,$ echo "0000:e5:00.0" | sudo tee /sys/bus/pci/drivers/nvme/unbindlibnvmmodule, and all NVMe devices not bound to the default kernel module will be bound to libnvm, with a device file/dev/libnvm*exposed.$ sudo insmod libnvm.koBind NVMe devices back with default kernel module
libnvmkernel module$ sudo rmmod libnvm$ echo "0000:e5:00.0" | sudo tee /sys/bus/pci/drivers/nvme/bindAcknowledgement
AGIO uses libnvm and BaM. AGIO also includes JSON for Modern C++ (
json.hpp) and toml++ (toml.hpp).