CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
135 lines
4.1 KiB
ReStructuredText
135 lines
4.1 KiB
ReStructuredText
.. meta::
|
|
:description: Set up an NVMe-oF disk for use with hipFile.
|
|
:keywords: hipFile, NVMe-oF, install, ROCm, direct storage, GPU I/O
|
|
|
|
****************************************************
|
|
Setting up a local NVMe-oF disk for use with hipFile
|
|
****************************************************
|
|
|
|
To use hipFile with storage exported over NVMe-oF, first :ref:`set up a local NVMe drive <hipfile-setup-local-nvme>`.
|
|
|
|
NVMe-oF also requires:
|
|
|
|
* Network or fabric connectivity over RDMA. hipFile's optimized I/O requires an RDMA transport.
|
|
* The ``nvmet`` and ``nvmet-rdma`` kernel modules loaded on the target.
|
|
- The ``nvme-rdma`` kernel module loaded on the initiator.
|
|
|
|
Configure the target
|
|
=====================
|
|
|
|
Configure the NVMe target subsystem, ``nvmet``.
|
|
|
|
.. note::
|
|
|
|
The example commands use RDMA over IPv4. Use the appropriate transport values for the target being configured.
|
|
|
|
Create a subsystem directory and allow any host to connect.
|
|
|
|
.. code:: shell
|
|
|
|
cd /sys/kernel/config/nvmet/subsystems
|
|
sudo mkdir SUBSYSTEM_NAME
|
|
cd SUBSYSTEM_NAME
|
|
echo 1 | sudo tee ./attr_allow_any_host
|
|
|
|
Where ``SUBSYSTEM_NAME`` name is the name given to the subsystem. This name will become part of the subsystem's NQN when the initiator discovers it.
|
|
|
|
.. note::
|
|
|
|
Specific host NQNs can be specified for a more secure environment.
|
|
|
|
Create a namespace and point it at the NVMe partition. Use a stable identifier such as a PCI BDF or drive ID. Use ``lsblk`` and ``blkid``
|
|
to identify the block device. For example:
|
|
|
|
.. code:: shell
|
|
|
|
cd namespaces
|
|
sudo mkdir 1
|
|
cd 1
|
|
echo -n /dev/disk/by-path/pci-0000:01:00.0-nvme-1 | sudo tee ./device_path
|
|
echo 1 | sudo tee ./enable
|
|
|
|
Create a port and configure its transport address:
|
|
|
|
.. code:: shell
|
|
|
|
cd /sys/kernel/config/nvmet/ports
|
|
sudo mkdir 1
|
|
cd 1
|
|
echo <target_ip> | sudo tee ./addr_traddr
|
|
echo ipv4 | sudo tee ./addr_adrfam
|
|
echo rdma | sudo tee ./addr_trtype
|
|
echo <target_port> | sudo tee ./addr_trsvcid
|
|
|
|
Link the subsystem to the port to expose it to initiators:
|
|
|
|
.. code:: shell
|
|
|
|
sudo ln -s /sys/kernel/config/nvmet/subsystems/<subsystem_name> \
|
|
/sys/kernel/config/nvmet/ports/1/subsystems/<subsystem_name>
|
|
|
|
Confirm that the kernel has accepted the configuration and exposed the target
|
|
to the network.
|
|
|
|
Check the kernel logs for the syslog message:
|
|
|
|
.. code-block:: none
|
|
|
|
$ sudo journalctl -k | grep nvmet
|
|
nvmet_rdma: enabling port 1 (<target_ip>:<target_port>)
|
|
|
|
.. warning::
|
|
|
|
ext4 and xfs cannot safely be mounted by more than one host at the same time, including the host the drive resides on. Enabling Multiple Mount Protection helps prevent accidental corruption due to the devices being mounted by multiple hosts.
|
|
|
|
|
|
Configure the initiator
|
|
========================
|
|
|
|
Discover the subsystems exposed by the target:
|
|
|
|
.. code:: shell
|
|
|
|
sudo nvme discover -t rdma -a <target_ip> -s <target_port>
|
|
|
|
Connect to the discovered subsystem using its NQN:
|
|
|
|
.. code:: shell
|
|
|
|
sudo nvme connect -t rdma -a <target_ip> -s <target_port> -n <target_nqn>
|
|
|
|
Confirm the new NVMe device appears on the initiator:
|
|
|
|
.. code:: shell
|
|
|
|
lsblk -d -o NAME,SIZE,MODEL | grep nvme
|
|
|
|
Create a mount point and mount the device with ``data=ordered``. Mounting with ``data=ordered`` ensures that the fastpath can be used by hipFile.
|
|
|
|
For example, with ext4:
|
|
|
|
.. code:: shell
|
|
|
|
sudo mkdir /mnt/nvmeof
|
|
sudo mount /dev/nvme<N>n1 /mnt/nvmeof -o data=ordered
|
|
|
|
Verify that hipFile has access to the mounted path by copying a file using
|
|
`aiscp.cpp <https://github.com/ROCm/rocm-systems/blob/develop/projects/hipfile/examples/aiscp/aiscp.cpp>`_:
|
|
|
|
.. code:: shell
|
|
|
|
sudo mkdir /mnt/nvmeof/"${USER}"
|
|
sudo chown "${USER}":"${USER}" /mnt/nvmeof/"${USER}"
|
|
# Create a random input file
|
|
dd if=/dev/urandom of=/mnt/nvmeof/"${USER}"/source bs=4K count=16
|
|
# Copy file
|
|
HIPFILE_ALLOW_COMPAT_MODE=false ./aiscp /mnt/nvmeof/"${USER}"/source /mnt/nvmeof/"${USER}"/dest
|
|
md5sum /mnt/nvmeof/"${USER}"/source /mnt/nvmeof/"${USER}"/dest
|
|
|
|
|
|
Disconnect from the target once the connection is no longer needed:
|
|
|
|
.. code:: shell
|
|
|
|
sudo nvme disconnect -n <target_nqn>
|