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
113 lines
5.9 KiB
ReStructuredText
113 lines
5.9 KiB
ReStructuredText
.. meta::
|
|
:description: Known issues with hipFile
|
|
:keywords: hipFile, known issues, limitations
|
|
|
|
************
|
|
Known issues
|
|
************
|
|
|
|
This page documents known issues with hipFile.
|
|
|
|
Poor performance with GPU Virtual Functions
|
|
===========================================
|
|
|
|
If hipFile I/O is only able to achieve half of the expected bandwidth of
|
|
the storage, check if the GPU is a virtual function.
|
|
|
|
Some AMD GPUs can be partitioned into multiple virtual functions (VFs) using
|
|
Single Root I/O Virtualization (SR-IOV). hipFile's fastpath is disabled on GPU
|
|
VFs and will instead use the fallback path resulting in reduced performance.
|
|
|
|
Use ``amd-smi`` to determine if your GPU device is a virtual function. The GPU's
|
|
name will end with "VF" if the device is a virtual function.
|
|
|
|
Example:
|
|
|
|
.. code-block:: none
|
|
|
|
$ amd-smi
|
|
+------------------------------------------------------------------------------+
|
|
| AMD-SMI 26.2.2+1d06e2956f amdgpu version: 6.16.13 ROCm version: 7.2.1 |
|
|
| VBIOS version: 00143754 |
|
|
| Platform: Linux Guest |
|
|
|-------------------------------------+----------------------------------------|
|
|
| BDF GPU-Name | Mem-Uti Temp UEC Power-Usage |
|
|
| GPU HIP-ID OAM-ID Partition-Mode | GFX-Uti Fan Mem-Usage |
|
|
|=====================================+========================================|
|
|
| 0000:05:00.0 AMD Instinct MI300X VF | 0 % 39 °C 0 142/750 W |
|
|
| 0 0 2 SPX/NPS1 | 0 % N/A 285/196288 MB |
|
|
+-------------------------------------+----------------------------------------+
|
|
|
|
hipFile's fastpath is only supported on GPU physical functions (PFs).
|
|
|
|
High memory utilization with hipFile
|
|
====================================
|
|
|
|
Processes using child processes for I/O parallelism may observe each child
|
|
process consuming ~200MiB of memory.
|
|
|
|
For example, when fio uses the hipFile engine with four job processes, ``htop``
|
|
shows each child process consuming ~200MiB of memory.
|
|
|
|
.. code-block:: none
|
|
|
|
PID VIRT RES SHR Command
|
|
7851 4646M 197M 79364 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=libhipfile --rocm_io=hipfile --gpu_dev_ids=0
|
|
7853 4646M 199M 81516 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=libhipfile --rocm_io=hipfile --gpu_dev_ids=0
|
|
7852 4646M 197M 79804 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=libhipfile --rocm_io=hipfile --gpu_dev_ids=0
|
|
7850 4646M 199M 81504 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=libhipfile --rocm_io=hipfile --gpu_dev_ids=0
|
|
|
|
When fio uses the psync engine with four job processes, ``htop`` shows each child process consuming ~18MiB of memory.
|
|
|
|
.. code-block:: none
|
|
|
|
PID VIRT RES SHR Command
|
|
8021 237M 18004 1640 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=psync
|
|
8022 237M 18004 1640 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=psync
|
|
8023 237M 18044 1680 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=psync
|
|
8024 237M 18040 1676 fio --time_based --runtime=120s --filename=/dev/nvme0n1 --direct=1 --rw=read --bs=8M --name=bw --numjobs=4 --ioengine=psync
|
|
|
|
The increased memory usage can be attributed to each child process independently
|
|
loading the HIP runtime and its dependencies. Using threads instead reduces
|
|
overall memory usage as the HIP runtime and its dependencies are loaded once and
|
|
shared among the process' threads.
|
|
|
|
GPU Reset on RDNA4 GPUs
|
|
=======================
|
|
|
|
hipFile's fallback path may trigger GPU resets on RDNA4 GPUs. This issue has not
|
|
been observed on other GPU architectures. The fallback path is used when I/O does
|
|
not meet the requirements to use the fastpath. When using the fallback path on
|
|
RDNA4 GPUs, the GPU may enter an unrecoverable state which triggers a GPU reset.
|
|
When a GPU reset occurs, messages similar to the following may be observed in
|
|
the system log:
|
|
|
|
.. code-block:: none
|
|
|
|
kernel: amdgpu 0000:f3:00.0: amdgpu: MES might be in unrecoverable state, issue a GPU reset
|
|
kernel: amdgpu 0000:f3:00.0: amdgpu: Suspending all queues failed
|
|
kernel: amdgpu 0000:f3:00.0: amdgpu: Failed to evict process queues
|
|
kernel: amdgpu: Failed to quiesce KFD
|
|
kernel: amdgpu 0000:f3:00.0: amdgpu: GPU reset begin!. Source: 3
|
|
|
|
To work around this issue, ensure I/O requests meet the alignment, size,
|
|
filesystem, and device requirements of the fastpath. The fallback path can also
|
|
be disabled by setting the ``HIPFILE_ALLOW_COMPAT_MODE`` environment variable to
|
|
``false``. When the fallback path is disabled, I/O requests will be rejected if
|
|
they do not meet the requirements of the fastpath.
|
|
|
|
Poor IOPS with small I/O sizes and many threads/processes
|
|
===========================================================
|
|
|
|
Every I/O operation requires the GPU buffer to be pinned (locked in place) at the
|
|
start of the operation and unpinned at the end of the operation. Pin and unpin
|
|
operations are protected by a lock. With small I/O sizes and many
|
|
threads/processes, GPU buffers are pinned and unpinned rapidly resulting in high
|
|
lock contention and lower than expected IOPS. With I/O sizes >= 64KiB, the GPU
|
|
buffer is pinned and unpinned less frequently which reduces contention on the
|
|
lock and results in IOPS that are in line with expectations.
|
|
|
|
Lock contention can impact IOPS with I/O sizes < 64KiB and process/thread counts
|
|
>= 16. To work around this issue, use I/O sizes >= 64KiB or use fewer
|
|
threads/processes.
|