# PCI Devices

In virtual computing platforms, Peripheral Component Interconnect (PCI))
devices are the hardware or software components that provide critical
functionality, such as networking, storage, and graphics to virtual
machines (VMs).
Their operating protocol allows diverse hardware to communicate with
a system’s processor.

For Managed Service Provider (MSP) admins, PCI is the industry-standard
interface that allows VMs to communicate directly with high-performance
physical hardware.

In the zCompute platform, PCI is primarily leveraged through PCI
Passthrough, which maps physical devices and high-speed NVMe storage
directly to a tenant’s instance.
This bypasses the hypervisor’s emulation layer to deliver near-native
hardware performance, which is crucial for supporting modern client
demands such as AI/ML training, VDI, and video analytics.

By managing these assignments through the zCompute interface, admins can
offer specialized high-throughput storage tiers, enabling them to operate
high-end workloads with the same multi-tenancy efficiency as their standard
compute offerings.

## PCI devices management

The PCI Devices screen lets system administrators view and manage PCI
passthrough devices in a region.

Use this screen to view devices and their statuses, see where a device is
installed, check whether a device is already tied to a VM, and change
whether a device is enabled or disabled for passthrough use.

The following tasks are supported:

* Viewing the PCI devices that are available in the region.
* Checking device state and related details before making a change.
* Enabling a single or multiple devices in one action.
* Disabling a single or multiple devices in one action.

### Viewing PCI devices

To view the available PCI devices:

1. Select **Configuration > PCI Devices**.

   The list of PCI devices appears, with the following columns:
   * **Device Name**

     The display name of the PCI device.

     Use it to identify the device in the table.
   * **PCI Slot**

     The PCI slot for the device.

     Use it to identify the hardware slot on the node.
   * **Node**

     The node that owns the device.

     When a value is displayed, it is a link to the node screen.
   * **Vendor**

     The vendor ID for the device.

     Use it to identify the device vendor.
   * **Device ID**

     The device ID for the hardware.

     Use it to identify the device type.
   * **Enabled**

     Indicates whether the device is enabled.
   * **Blocked**

     Indicates whether the device is blocked.
   * **Kernel Driver**

     The current kernel driver for the device.
   * **Original Kernel Driver**

     The original kernel driver for the device before the current driver
     was applied.
   * **Associated VM**

     The VM associated with the device.

     When a value is displayed, it is a link to the VM screen.
   * **Family**

     The device family value.

### Enabling PCI devices

Enabling a PCI device makes that device available for PCI passthrough
management on its node, so it can be used in later passthrough workflows.

To enable PCI devices:

1. Select **Configuration > PCI Devices**.

   The list of PCI devices appears.
2. In the list, locate the PCI devices to enable.

   Verify that the **Enabled** column of the devices to enable shows that
   they are not enabled.
3. Select the device rows.

   The **Enable Device** option appears in the upper toolbar.
4. From the upper toolbar, select **Enable Device**.
5. Confirm that the selected devices now appear as enabled.

### Disabling PCI devices

Disabling a PCI device removes that device from the platform’s PCI
passthrough management path on its node, so it is no longer kept enabled
for passthrough use.

To disable PCI devices:

1. Select **Configuration > PCI Devices**.

   The list of PCI devices appears.
2. In the list, locate the PCI devices to disable.
   1. Verify that the **Enabled** column of the devices to disable shows
      that they are enabled.
   2. Verify that **Associated VM** is empty.
3. Select the device rows.

   The **Disable Device** option appears in the upper toolbar.
4. From the upper toolbar, select **Disable Device**.
5. Confirm that the selected devices now appear as disabled.

## Recommended best practices

* Review **Associated VM** before you try to disable a device.
* Review **Enabled** before you run an enable or disable action.
* Review **Blocked** before you make a change so you can confirm the
  current device state.
* Review **Node** and **PCI Slot** when you need to identify a device
  on a specific node.
* Use the single-device actions for isolated changes.
* Use the batch actions only after you review all selected rows.
* Use sorting and the column picker to simplify large device lists.

## Troubleshooting

### No devices appear in the PCI devices list

Possible cause:

* No PCI devices are currently available.

What to check:

1. Open **Configuration** > **PCI Devices**.
2. Check whether the screen shows **There are no PCI Devices defined**.
3. If that message appears, confirm that PCI passthrough devices are
   available in the region.

### The Enable Device action is unavailable

Possible cause:

* The selected device is already enabled.

What to check:

1. Review the **Enabled** value for the selected device.
2. If the device is already enabled, no enable action is needed.

### The Disable Device action is unavailable

Possible causes:

* The selected device is not enabled.
* The selected device is associated with a VM.

What to check:

1. Review the **Enabled** value for the selected device.
2. Review **Associated VM** for the selected device.
3. If a VM is associated with the device, clear that association
   before you try to disable the device in this screen.

### A batch action does not change every selected device

Possible cause:

* One or more selected devices are not eligible for the requested
  action.

What to check:

1. For batch enable, confirm that the selection includes disabled
   devices.
2. For batch disable, confirm that the selection includes enabled
   devices.
3. For batch disable, confirm that **Associated VM** is empty for the
   devices that you expect to disable.
