support configuring multiple vgpu types in cyborg
This patch defines the group and options for vgpu types configuration. Co-Authored-By: Wenping Song <songwenping@inspur.com> Change-Id: Ifbdf7f8fee663ddd28eeef9d7a804d29c0354c5f Story: 2008265 Task: 41326
This commit is contained in:
parent
82d1ed968b
commit
0605fe39fd
|
@ -27,10 +27,51 @@ nic_opts = [
|
||||||
help=" ")
|
help=" ")
|
||||||
]
|
]
|
||||||
|
|
||||||
|
gpu_group = cfg.OptGroup(
|
||||||
|
name='gpu_devices',
|
||||||
|
title='virtual gpu options',
|
||||||
|
help="""This is used to config vGPU types for nvidia GPU devices.
|
||||||
|
""")
|
||||||
|
|
||||||
|
vgpu_opts = [
|
||||||
|
cfg.ListOpt('enabled_vgpu_types',
|
||||||
|
default=[],
|
||||||
|
help="""
|
||||||
|
The vGPU types enabled in the compute node.
|
||||||
|
|
||||||
|
Cyborg supports multiple vGPU types in one host. Usually, a single physical
|
||||||
|
GPU can only set one vgpu type. Some pGPUs (e.g. NVIDIA GRID K1) support
|
||||||
|
multiple vGPU types.
|
||||||
|
|
||||||
|
If more than one single vGPU type are provided, then for each
|
||||||
|
*vGPU type*, you must add an additional section ``[vgpu_$(VGPU_TYPE)]`` with
|
||||||
|
a single configuration option ``device_addresses`` to assign this type to
|
||||||
|
the target physical GPU(s). PGPUs should be configured explictly now, we will
|
||||||
|
improve this after we implement the enable/disable interface.
|
||||||
|
|
||||||
|
If the same PCI address is provided for two different types, cyborg-agent will
|
||||||
|
return an InvalidGPUConfig exception at restart.
|
||||||
|
|
||||||
|
An example is as the following::
|
||||||
|
|
||||||
|
[gpu_devices]
|
||||||
|
enabled_vgpu_types = nvidia-35, nvidia-36
|
||||||
|
|
||||||
|
[vgpu_nvidia-35]
|
||||||
|
device_addresses = 0000:84:00.0,0000:85:00.0
|
||||||
|
|
||||||
|
[vgpu_nvidia-36]
|
||||||
|
device_addresses = 0000:86:00.0
|
||||||
|
|
||||||
|
""")
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def register_opts(conf):
|
def register_opts(conf):
|
||||||
conf.register_group(nic_group)
|
conf.register_group(nic_group)
|
||||||
conf.register_opts(nic_opts, group=nic_group)
|
conf.register_opts(nic_opts, group=nic_group)
|
||||||
|
conf.register_group(gpu_group)
|
||||||
|
conf.register_opts(vgpu_opts, group=gpu_group)
|
||||||
|
|
||||||
|
|
||||||
def register_dynamic_opts(conf):
|
def register_dynamic_opts(conf):
|
||||||
|
@ -51,7 +92,13 @@ def register_dynamic_opts(conf):
|
||||||
# registering the '[nic_type]' groups in the process
|
# registering the '[nic_type]' groups in the process
|
||||||
for nic_type in conf.nic_devices.enabled_nic_types:
|
for nic_type in conf.nic_devices.enabled_nic_types:
|
||||||
conf.register_opts(opts, group=nic_type)
|
conf.register_opts(opts, group=nic_type)
|
||||||
|
# Register the '[vgpu_$(VGPU_TYPE)]/device_addresses' opts, implicitly
|
||||||
|
# registering the '[vgpu_$(VGPU_TYPE)]' groups in the process
|
||||||
|
opt = cfg.ListOpt('device_addresses', default=[],
|
||||||
|
item_type=cfg.types.String())
|
||||||
|
for vgpu_type in conf.gpu_devices.enabled_vgpu_types:
|
||||||
|
conf.register_opt(opt, group='vgpu_%s' % vgpu_type)
|
||||||
|
|
||||||
|
|
||||||
def list_opts():
|
def list_opts():
|
||||||
return {nic_group: nic_opts}
|
return {nic_group: nic_opts, gpu_group: vgpu_opts}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The cyborg Nvidia GPU driver now supports defining different virtual GPU
|
||||||
|
types for each physical GPU. See the ``[gpu_devices]/enabled_vgpu_types``
|
||||||
|
configuration option for knowing how to do it. Please refer to
|
||||||
|
https://specs.openstack.org/openstack/cyborg-specs/specs/wallaby/approved/vgpu-driver-proposal.html
|
||||||
|
for further documentation.
|
Loading…
Reference in New Issue