Difference between revisions of "GPU Software Bill Of Materials (SBOM)"

From Open-IOV
Jump to navigation Jump to search
(Updated Nvidia VGX vGPU version to 15.2 in GPU SBOM.)
 
(7 intermediate revisions by the same user not shown)
Line 11: Line 11:
!Version
!Version
!OSS or Blob
!OSS or Blob
!Filesize
!Vendor Docs
!Vendor Docs
!Release Date
!Release Date
!Interfaces / APIs
!Interfaces / APIs
!Notes
!Notes
|-
| rowspan="2" |Arc Compute
|gvm-cli
|Daemon
|1.0
|[https://github.com/Open-IOV/GVM-user OSS]
|[https://docs.linux-gvm.org/gvm-user docs.linux-gvm.org/gvm-user]
|2023.01.06
|CLI, [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], RMAPI, [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|Allocates GPU resources for use with virtualization. Registers devices and mdev callbacks with the Mediated Core.
|-
|gvm-guest
|Daemon
|0.1.0
|[https://github.com/Open-IOV/GVM-guest OSS]
|[https://docs.linux-gvm.org/gvm-guest docs.linux-gvm.org/gvm-guest]
|2023.02.08
|[https://fedoraproject.org/wiki/Features/VirtioSerial Virtio-Serial], CLI
|Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules.
|-
|-
|Microsoft
|Microsoft
Line 40: Line 22:
|
|
|[https://github.com/Microsoft/Windows-driver-samples/tree/main/video/IndirectDisplay OSS]
|[https://github.com/Microsoft/Windows-driver-samples/tree/main/video/IndirectDisplay OSS]
|
|[https://learn.microsoft.com/en-us/windows-hardware/drivers/display/indirect-display-driver-model-overview Indirect Display Driver Overview]
|[https://learn.microsoft.com/en-us/windows-hardware/drivers/display/indirect-display-driver-model-overview Indirect Display Driver Overview]
|
|
Line 45: Line 28:
|The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems.
|The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems.
|-
|-
|RedHat
| rowspan="2" |RedHat
|vfio_pci
|vfio_pci
|Driver
|Driver
|6.2-rc1
|6.2-rc1
|[https://github.com/torvalds/linux/tree/master/drivers/vfio/pci OSS]
|[https://github.com/torvalds/linux/tree/master/drivers/vfio/pci OSS]
|in-kernel
|[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/chap-virtualization-pci_passthrough RedHat], [https://docs.kernel.org/driver-api/vfio.html kernel.org]
|[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/chap-virtualization-pci_passthrough RedHat], [https://docs.kernel.org/driver-api/vfio.html kernel.org]
|2022.12.15
|2022.12.15
|[https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution irqfd], [https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution ioeventfd], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL]
|[https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution irqfd], [https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution ioeventfd], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL]
|Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals.
|Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals.
|-
|Mediated Core (mdev.ko)
|Driver
|6.2-rc1
|OSS
|0.044 MB
|[https://docs.kernel.org/driver-api/vfio-mediated-device.html kernel.org]
|2016.xx.xx
|[https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution irqfd], [https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution ioeventfd], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_DMA_Translations Type 1 IOMMU]
|The Mediated Core driver provides a common interface for mediated device management that can be used by drivers of different devices. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment (based on VFIO).
|-
| rowspan="2" |Arc Compute
|gvm-guest
| rowspan="2" |Daemon
|0.1.0
|[https://github.com/Open-IOV/GVM-guest OSS]
|
|[https://docs.linux-gvm.org/gvm-guest docs.linux-gvm.org/gvm-guest]
|2023.02.08
|[https://fedoraproject.org/wiki/Features/VirtioSerial Virtio-Serial], CLI
|Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules.
|-
|gvm-cli
|1.0
|[https://github.com/Open-IOV/GVM-user OSS]
|0.084 MB
|[https://docs.linux-gvm.org/gvm-user docs.linux-gvm.org/gvm-user]
|2023.01.06
|CLI, [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/GPU_Driver_Internals#RM_API RMAPI], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|Configures the the [https://open-iov.org/index.php/GPU_Driver_Internals#nvidia-vgpu-mgr nvidia-vgpu-mgr] process.
|-
|-
| rowspan="4" |Intel
| rowspan="4" |Intel
Line 60: Line 74:
| rowspan="3" |[https://github.com/intel/linux-intel-lts/tree/5.15/ADL-linux-ER 5.15]
| rowspan="3" |[https://github.com/intel/linux-intel-lts/tree/5.15/ADL-linux-ER 5.15]
|OSS
|OSS
|in-kernel
|
|
|
|
|
|
|Intel's open source GPU driver for GuC-equipped graphics accelerators.
|Intel's open source GPU driver for [https://open-iov.org/index.php/GPU_Firmware#GuC GuC]-equipped graphics accelerators.
|-
|-
|[https://open-iov.org/index.php/GPU_Firmware#GuC GuC] μOS
|[https://open-iov.org/index.php/GPU_Firmware#GuC GuC] μOS
|Firmware
| rowspan="2" |Firmware
|Blob
| rowspan="2" |Blob
|
|
|
|
|
Line 74: Line 90:
|-
|-
|HuC
|HuC
|Firmware
|
|Blob
|
|
|
|
Line 85: Line 100:
|[https://github.com/intel/Display-Virtualization-for-Windows-OS/releases/ 791]
|[https://github.com/intel/Display-Virtualization-for-Windows-OS/releases/ 791]
|[https://github.com/intel/Display-Virtualization-for-Windows-OS OSS]
|[https://github.com/intel/Display-Virtualization-for-Windows-OS OSS]
|
|[https://github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt]
|[https://github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt]
|
|
|udmabuf, [https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/overview-of-the-umdf UMDF], [https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/ KMDF]
|[https://github.com/ikwzm/udmabuf udmabuf], [https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/overview-of-the-umdf UMDF], [https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/ KMDF]
|Intel's 'Display Virtualization for Windows OS' provides a virtual pixel surface used for hardware graphics rendering using Microsoft's open source 'Indirect Display Driver (IDD)'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host.
|Intel's 'Display Virtualization for Windows OS' provides a virtual pixel surface used for hardware graphics rendering using Microsoft's open source 'Indirect Display Driver (IDD)'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host.
|-
|-
Line 95: Line 111:
| rowspan="2" |525.85.12
| rowspan="2" |525.85.12
|OSS
|OSS
|
|[https://github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md]
|[https://github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md]
|2023.01.31
|2023.01.31
|
|
|Nvidia's open source GPU driver for GSP-equipped graphics accelerators.
|Nvidia's open source GPU driver for [https://open-iov.org/index.php/GPU_Firmware#GSP GSP]-equipped graphics accelerators.
|-
|-
|[https://open-iov.org/index.php/GPU_Firmware#GSP GSP] RM (uproc)
|[https://open-iov.org/index.php/GPU_Firmware#GSP GSP] RM (uproc)
|Firmware
| rowspan="2" |Firmware
|Blob
| rowspan="2" |Blob
|
|
|
|2023.01.31
|2023.01.31
|RPC
|RPC
|Embedded firmware based on LibOS containing the [https://open-iov.org/index.php/GPU_Driver_Internals#RM_Core RM Core].
|Embedded firmware based on [https://lwn.net/Articles/637658/ LibOS] containing the [https://open-iov.org/index.php/GPU_Driver_Internals#RM_Core RM Core].
|-
|-
|Falcon/NvRISC (uproc)
|Falcon/NvRISC (uproc)
|Firmware
|
|
|Blob
|
|
|
|
|
Line 118: Line 135:
|-
|-
|nvidia-vgpud
|nvidia-vgpud
|Daemon
| rowspan="2" |Daemon
| rowspan="4" |[https://docs.nvidia.com/grid/15.0/whats-new-vgpu/index.html v15.1]
| rowspan="4" |[https://docs.nvidia.com/grid/15.0/whats-new-vgpu/index.html v15.2]
|Blob
| rowspan="4" |Blob
|0.108 MB
| rowspan="4" |[https://docs.nvidia.com/grid/index.html docs.nvidia.com/grid]
| rowspan="4" |[https://docs.nvidia.com/grid/index.html docs.nvidia.com/grid]
|2023.01.xx
|2023.01.xx
|Systemd, [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|CLI, [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/GPU_Driver_Internals#RM_API RMAPI], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|Configures the the nvidia-vgpu-mgr process.
|Configures the the [https://open-iov.org/index.php/GPU_Driver_Internals#nvidia-vgpu-mgr nvidia-vgpu-mgr] process.
|-
|-
|nvidia-vgpu-mgr
|nvidia-vgpu-mgr
|Daemon
|0.132 MB
|Blob
|2023.01.xx
|2023.01.xx
|[https://open-iov.org/index.php/GPU_Driver_Internals#vmiop vmiop], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], RMAPI, [https://open-iov.org/index.php/GPU_Driver_Internals#Guest_kernel_(nvidia.ko) vRPC], pRPC, [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|[https://open-iov.org/index.php/GPU_Driver_Internals#vmiop vmiop], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/GPU_Driver_Internals#RM_API RMAPI], [https://open-iov.org/index.php/GPU_Driver_Internals#Guest_kernel_(nvidia.ko) vRPC], pRPC, [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|Handles IO to and from guest RM, host RM, and hardware.
|Handles IO to and from guest RM, host RM, and hardware.
|-
|-
|libnvidiavgpu.so
|libnvidia-vgpu.so
|Library
|Library
|Blob
|3.1 MB
|2023.01.xx
|2023.01.xx
|[https://open-iov.org/index.php/GPU_Driver_Internals#vmiop vmiop], RMAPI, [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|[https://open-iov.org/index.php/GPU_Driver_Internals#vmiop vmiop], [https://open-iov.org/index.php/GPU_Driver_Internals#RM_API RMAPI], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with nvidia-vgpu-mgr.
|Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with [https://open-iov.org/index.php/GPU_Driver_Internals#nvidia-vgpu-mgr nvidia-vgpu-mgr].
|-
|-
|nvidia_vgpu_vfio
|nvidia-vgpu-vfio.ko
|Driver
|Driver
|Blob
|0.108 MB
|2023.01.xx
|2023.01.xx
|[https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_DMA_Translations Type 1 IOMMU], [https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution irqfd, ioeventfd], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]
|[https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_DMA_Translations Type 1 IOMMU], [https://open-iov.org/index.php/Virtual_I/O_Internals#Instruction_Execution irqfd, ioeventfd], [https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst IOCTL], [https://open-iov.org/index.php/Virtual_I/O_Internals#Mediated_Core Mediated Core]

Latest revision as of 14:58, 13 June 2023

This page will keep a running list of components used to achieve GPU Virtualization.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization.

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation.

Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

Component Table
Vendor Component Description Version OSS or Blob Filesize Vendor Docs Release Date Interfaces / APIs Notes
Microsoft Indirect Display Driver (IDD) Driver OSS Indirect Display Driver Overview UMDF, KMDF The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems.
RedHat vfio_pci Driver 6.2-rc1 OSS in-kernel RedHat, kernel.org 2022.12.15 irqfd, ioeventfd, IOCTL Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals.
Mediated Core (mdev.ko) Driver 6.2-rc1 OSS 0.044 MB kernel.org 2016.xx.xx irqfd, ioeventfd, IOCTL, Type 1 IOMMU The Mediated Core driver provides a common interface for mediated device management that can be used by drivers of different devices. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment (based on VFIO).
Arc Compute gvm-guest Daemon 0.1.0 OSS docs.linux-gvm.org/gvm-guest 2023.02.08 Virtio-Serial, CLI Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules.
gvm-cli 1.0 OSS 0.084 MB docs.linux-gvm.org/gvm-user 2023.01.06 CLI, IOCTL, RMAPI, Mediated Core Configures the the nvidia-vgpu-mgr process.
Intel i915 SR-IOV Driver 5.15 OSS in-kernel Intel's open source GPU driver for GuC-equipped graphics accelerators.
GuC μOS Firmware Blob IOMMU Interrupts, Power Management Interrupts, GTT Handles scheduling, and power management.
HuC GTT Handles video encoding/decoding.
Display Virtualization for Windows OS Driver 791 OSS github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt udmabuf, UMDF, KMDF Intel's 'Display Virtualization for Windows OS' provides a virtual pixel surface used for hardware graphics rendering using Microsoft's open source 'Indirect Display Driver (IDD)'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host.
Nvidia OpenRM Driver 525.85.12 OSS github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md 2023.01.31 Nvidia's open source GPU driver for GSP-equipped graphics accelerators.
GSP RM (uproc) Firmware Blob 2023.01.31 RPC Embedded firmware based on LibOS containing the RM Core.
Falcon/NvRISC (uproc) FBIF (Frame Buffer Interface) / GMMU Embedded firmware which handles many aspects of the device including configuring the GPU's GMMU controller.
nvidia-vgpud Daemon v15.2 Blob 0.108 MB docs.nvidia.com/grid 2023.01.xx CLI, IOCTL, RMAPI, Mediated Core Configures the the nvidia-vgpu-mgr process.
nvidia-vgpu-mgr 0.132 MB 2023.01.xx vmiop, IOCTL, RMAPI, vRPC, pRPC, Mediated Core Handles IO to and from guest RM, host RM, and hardware.
libnvidia-vgpu.so Library 3.1 MB 2023.01.xx vmiop, RMAPI, Mediated Core Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with nvidia-vgpu-mgr.
nvidia-vgpu-vfio.ko Driver 0.108 MB 2023.01.xx Type 1 IOMMU, irqfd, ioeventfd, IOCTL, Mediated Core Handles incremental memory mapping (non-page pinning per the standard vfio-pci driver).

More Information

  1. Nvidia RISC-V Story
  2. linux-gvm.org
  3. Intel Graphics Programmer's Reference Manuals (PRM)
  4. i915: Hardware Contexts (and some bits about batchbuffers)
  5. i915: The Global GTT Part 1
  6. i915: Aliasing PPGTT Part 2
  7. i915: True PPGTT Part 3
  8. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  9. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  10. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  11. i915: An Introduction to Intel GVT-g (with new architecture)