PCIe - GPU Bandwidth Plugin#
The PCIe plugin detects underperforming or unreliable host-to-GPU and peer-to-peer GPU transfer paths. Depending on the enabled subtests, it flags link downtraining, low bandwidth, high latency, excessive PCIe recovery activity, and data corruption; GPU peer paths can use NVLink when topology allows.
Availability and prerequisites#
The canonical test name is pcie. It runs on selected physical GPUs.
Host-to-device subtests require one GPU; peer-to-peer and concurrent subtests
require a selection and topology from which the applicable GPU pairs can be
formed. Run the plugin on idle GPUs so competing transfers do not distort
bandwidth or latency measurements.
Behavior#
The plugin consists of several self-tests that each measure a different aspect of bandwidth or latency. Each subtest has either a pinned/unpinned pair or a p2p enabled/p2p disabled pair of identical tests. Pinned/unpinned tests use either pinned or unpinned memory when copying data between the host and the GPUs.
This plugin will use NvLink to communicate between GPUs when possible. Otherwise, communication between GPUs will occur over PCIe
Each sub test is represented with a tag that is used both for specifying configuration parameters for the sub test and for outputting stats for the sub test. P2p enabled/p2p disabled tests enable or disable GPUs writing and reading to and from each other directly rather than through the PCIe bus.
Subtests#
Sub Test Tag |
Pinned/Unpinned P2P Enabled/P2P Disabled |
Description |
|---|---|---|
h2d_d2h_single_pinned |
Pinned |
Device <-> Host Bandwidth, one GPU at a time |
h2d_d2h_single_unpinned |
Unpinned |
Device <-> Host Bandwidth, one GPU at a time |
h2d_d2h_concurrent_pinned |
Pinned |
Device <-> Host bandwidth, with all selected GPUs transferring concurrently |
h2d_d2h_concurrent_unpinned |
Unpinned |
Device <-> Host bandwidth, with all selected GPUs transferring concurrently |
h2d_d2h_latency_pinned |
Pinned |
Device <-> Host Latency, one GPU at a time |
h2d_d2h_latency_unpinned |
Unpinned |
Device <-> Host Latency, one GPU at a time |
p2p_bw_p2p_enabled |
P2P Enabled |
Device <-> Device bandwidth one GPU pair at a time |
p2p_bw_p2p_disabled |
P2P Disabled |
Device <-> Device bandwidth one GPU pair at a time |
p2p_bw_concurrent_p2p_enabled |
P2P Enabled |
Device <-> Device bandwidth, concurrently, focusing on bandwidth between GPUs between GPUs likely to be directly connected to each other -> for each (index / 2) and (index / 2)+1 |
p2p_bw_concurrent_p2p_disabled |
P2P Disabled |
Device <-> Device bandwidth, concurrently, focusing on bandwidth between GPUs between GPUs likely to be directly connected to each other -> for each (index / 2) and (index / 2)+1 |
1d_exch_bw_p2p_enabled |
P2P Enabled |
Device <-> Device bandwidth, concurrently, focusing on bandwidth between gpus, every GPU either sending to the gpu with the index higher than itself (l2r) or to the gpu with the index lower than itself (r2l) |
1d_exch_bw_p2p_disabled |
P2P Disabled |
Device <-> Device bandwidth, concurrently, focusing on bandwidth between gpus, every GPU either sending to the gpu with the index higher than itself (l2r) or to the gpu with the index lower than itself (r2l) |
p2p_latency_p2p_enabled |
P2P Enabled |
Device <-> Device Latency, one GPU pair at a time |
p2p_latency_p2p_disabled |
P2P Disabled |
Device <-> Device Latency, one GPU pair at a time |
Parameters#
Execution selectors#
The following table lists the global parameters for the PCIe plugin.
Parameter |
Type |
Default |
Description |
|---|---|---|---|
test_pinned |
Bool |
True |
Include subtests that test using pinned memory. |
test_unpinned |
Bool |
True |
Include subtests that test using unpinned memory. |
test_p2p_on |
Bool |
True |
Run relevant subtests with peer to peer (P2P) memory transfers between GPUs enabled. |
test_p2p_off |
Bool |
True |
Run relevant subtests with peer to peer (P2P) memory transfers between GPUs disabled. |
test_broken_p2p |
Bool |
True |
Check peer-to-peer copies for data corruption and identify the reader or writer GPU involved when possible. |
is_allowed |
Bool |
False |
Allow the plugin to run. Numbered-suite configuration can override this product-dependent default. |
max_pcie_replays |
Float |
80.0 |
Maximum number of PCIe replays to allow per GPU during the plugin run. |
Subtest thresholds#
The following table lists parameters that apply to specific PCIe subtests.
Parameter |
Type |
Default |
Applies to |
Description |
|---|---|---|---|---|
min_bandwidth |
Number |
0 |
h2d_d2h_single_pinned, h2d_d2h_single_unpinned, h2d_d2h_concurrent_pinned, h2d_d2h_concurrent_unpinned |
Minimum bandwidth in GB/s that must be reached for this sub-test to pass. |
max_latency |
Number |
100,000 |
h2d_d2h_latency_pinned, h2d_d2h_latency_unpinned |
Latency in microseconds that cannot be exceeded for this sub-test to pass. |
min_pci_generation |
Number |
1.0 |
h2d_d2h_single_pinned, h2d_d2h_single_unpinned |
Minimum allowed PCI generation that the GPU must be at or exceed for this sub-test to pass. |
min_pci_width |
Number |
1.0 |
h2d_d2h_single_pinned, h2d_d2h_single_unpinned |
Minimum allowed PCI width that the GPU must be at or exceed for this sub-test to pass. For example, 16x = 16.0. |
Examples#
Run the PCIe plugin on two GPUs so that both host-to-device and applicable peer-to-peer paths can be exercised:
$ dcgmi diag --run pcie --entity-id gpu:0,gpu:1
Results and failure conditions#
Condition |
Result or code |
Interpretation |
|---|---|---|
A bandwidth subtest is below its configured |
|
The message identifies the GPU, direction, measured value, and threshold. |
A latency subtest exceeds its configured |
|
The tested transfer path did not meet the configured latency limit. |
Negotiated PCIe generation or width is below the configured minimum. |
|
Compare the result with the platform topology and expected link state. |
A peer-to-peer correctness check reads corrupted data. |
|
The specific code distinguishes the reader or writer and, when known, whether the path used PCIe or NVLink. |
PCIe replay or correctable-error activity exceeds its configured threshold. |
|
The link reported excessive recovery activity during the test. |
Fewer GPU or NVSwitch NVLinks are up than an explicitly configured expectation. |
|
Inspect link and Fabric Manager state before rerunning a bandwidth workload. |
A common monitored condition occurs, such as an uncorrectable memory error, XID, row-remap problem, thermal violation, or enabled error threshold. |
Fail with the condition-specific |
See Diagnostic Errors for the reported condition. |
A concurrent subtest cannot be meaningfully formed from the selected GPUs. |
|
Other applicable PCIe subtests can still produce results. |
DCGM field access, CUDA setup, NUMA setup, or another internal operation fails. |
|
This is an execution or environment failure, not a measured link threshold violation. |
The plugin is disabled or the run is interrupted. |
|
The plugin did not complete and made no health determination. |