赞
踩
Nova的虚拟GPU特性可以实现使用能够提供虚拟GPU的物理GPU部署指定类型的GPU到实例。
比如单独的Intel GVT-g或者NVIDIA GRID vGPU物理图形处理器单元都可以被虚拟化成多个虚拟vGPUs,前提是hypervisor支持硬件的驱动以及有足够的容量来创建实例使用这些虚拟硬件。
这个特性是高度依赖hypervisor,以及它的版本和主机上的硬件。除此之外,厂商的vGPU的驱动程序必须在主机节点上进行安装和配置。
关于特定于管理程序的注意事项查看链接。
可按照如下方式启用虚拟GPU。
[devices]
enabled_vgpu_types = nvidia-35
注:在Queens版本中,Nova仅仅支持单一的类型,如果指定多个类型,只有第一个类型会被使用。
可查看链接了解可使用的GPU类型。
警告:更改GPU类型是可以实现的,但是由于现有物理GPU无法处理具有不同类型的多个实例。如果具有原始类型的实例仍然存在,nova则会返回一个NoValidHost。因此,强烈建议将新类型部署到没有工作负载的新计算节点之上,并在需要更改类型的节点重新构建实例。
配置flavor请求一个vGPU:
openstack flavor set vgpu_1 --property "resources:VGPU=1"
注:在Queens版本中,所有支持vGPU的hypervisors每个实例只能接受单个vGPU。
计算节点上已启用的vGPU类型不对外开放给API用户。Flavor的GPU配置支持绑定到主机聚合。及意味着适宜的调度这些flavor到支持vGPU的节点上。可参考Host Aggregates了解更多信息。
nova-scheduler通过调用由计算节点提供的特定vGPU资源类的Placement API来选择具有可用vGPU设备的目标主机。
openstack server create --flavor vgpu_1 --image cirros-0.3.5-x86_64-uec --wait test-vgpu
注:在Queens版本中,只有FilterScheduler调度驱动使用Placement API。
取决于Hypervisor:
$ ls /sys/class/mdev_bus/*/mdev_supported_types
/sys/class/mdev_bus/0000:84:00.0/mdev_supported_types:
nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
/sys/class/mdev_bus/0000:85:00.0/mdev_supported_types:
nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
/sys/class/mdev_bus/0000:86:00.0/mdev_supported_types:
nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
/sys/class/mdev_bus/0000:87:00.0/mdev_supported_types:
nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
[root@trailblazer-2 ~]# xe vgpu-type-list uuid ( RO) : 78d2d963-41d6-4130-8842-aedbc559709f vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-8Q max-heads ( RO): 4 max-resolution ( RO): 4096x2160 uuid ( RO) : a1bb1692-8ce3-4577-a611-6b4b8f35a5c9 vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-0Q max-heads ( RO): 2 max-resolution ( RO): 2560x1600 uuid ( RO) : 69d03200-49eb-4002-b661-824aec4fd26f vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-2A max-heads ( RO): 1 max-resolution ( RO): 1280x1024 uuid ( RO) : c58b1007-8b47-4336-95aa-981a5634d03d vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-4Q max-heads ( RO): 4 max-resolution ( RO): 4096x2160 uuid ( RO) : 292a2b20-887f-4a13-b310-98a75c53b61f vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-2Q max-heads ( RO): 4 max-resolution ( RO): 4096x2160 uuid ( RO) : d377db6b-a068-4a98-92a8-f94bd8d6cc5d vendor-name ( RO): NVIDIA Corporation model-name ( RO): GRID M60-0B max-heads ( RO): 2 max-resolution ( RO): 2560x1600
注:以下的信息只适宜Stein版本之后及使用libvirt driver。在此版本发布之前或使用Xen驱动程序时,与VGPU资源类相关的库存和分配仍然在与计算节点相关的根资源提供程序上。如果从Rocky进行更新并使用libvirt driver,VGPU库存和分配被移动到代表实际物理gpu的子资源提供程序。
例子中,对于openstack client使用osc-placement plugin,对于更详细的信息参考其文档。
$ openstack resource provider list
+--------------------------------------+---------------------------------------------------------+------------+
| uuid | name | generation |
+--------------------------------------+---------------------------------------------------------+------------+
| 5958a366-3cad-416a-a2c9-cfbb5a472287 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx | 7 |
| fc9b9287-ef5e-4408-aced-d5577560160c | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_86_00_0 | 2 |
| e2f8607b-0683-4141-a8af-f5e20682e28c | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_85_00_0 | 3 |
| 85dd4837-76f9-41f2-9f19-df386017d8a0 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_87_00_0 | 2 |
| 7033d860-8d8a-4963-8555-0aa902a08653 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_84_00_0 | 2 |
+--------------------------------------+---------------------------------------------------------+------------+
上述例子中可以看到root resource provider是5958a366-3cad-416a-a2c9-cfbb5a472287且拥有4个其他资源provider作为其子资源,且每一个资源回应一个单独的物理GPU。
openstack resource provider inventory list 5958a366-3cad-416a-a2c9-cfbb5a472287
+----------------+------------------+----------+----------+-----------+----------+-------+
| resource_class | allocation_ratio | max_unit | reserved | step_size | min_unit | total |
+----------------+------------------+----------+----------+-----------+----------+-------+
| VCPU | 16.0 | 48 | 0 | 1 | 1 | 48 |
| MEMORY_MB | 1.5 | 65442 | 512 | 1 | 1 | 65442 |
| DISK_GB | 1.0 | 49 | 0 | 1 | 1 | 49 |
+----------------+------------------+----------+----------+-----------+----------+-------+
$ openstack resource provider inventory list e2f8607b-0683-4141-a8af-f5e20682e28c
+----------------+------------------+----------+----------+-----------+----------+-------+
| resource_class | allocation_ratio | max_unit | reserved | step_size | min_unit | total |
+----------------+------------------+----------+----------+-----------+----------+-------+
| VGPU | 1.0 | 16 | 0 | 1 | 1 | 16 |
+----------------+------------------+----------+----------+-----------+----------+-------+
可以看到VGPU inventory在子资源provider上,其他的资源级别则在root resource provider。
$ openstack server list +--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+ | 5294f726-33d5-472a-bef1-9e19bb41626d | vgpu2 | ACTIVE | private=10.0.0.14, fd45:cdad:c431:0:f816:3eff:fe78:a748 | cirros-0.4.0-x86_64-disk | vgpu | | a6811fc2-cec8-4f1d-baea-e2c6339a9697 | vgpu1 | ACTIVE | private=10.0.0.34, fd45:cdad:c431:0:f816:3eff:fe54:cc8f | cirros-0.4.0-x86_64-disk | vgpu | +--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+ $ openstack resource provider allocation show 5294f726-33d5-472a-bef1-9e19bb41626d +--------------------------------------+------------+------------------------------------------------+ | resource_provider | generation | resources | +--------------------------------------+------------+------------------------------------------------+ | 5958a366-3cad-416a-a2c9-cfbb5a472287 | 8 | {u'VCPU': 1, u'MEMORY_MB': 512, u'DISK_GB': 1} | | 7033d860-8d8a-4963-8555-0aa902a08653 | 3 | {u'VGPU': 1} | +--------------------------------------+------------+------------------------------------------------+ $ openstack resource provider allocation show a6811fc2-cec8-4f1d-baea-e2c6339a9697 +--------------------------------------+------------+------------------------------------------------+ | resource_provider | generation | resources | +--------------------------------------+------------+------------------------------------------------+ | e2f8607b-0683-4141-a8af-f5e20682e28c | 3 | {u'VGPU': 1} | | 5958a366-3cad-416a-a2c9-cfbb5a472287 | 8 | {u'VCPU': 1, u'MEMORY_MB': 512, u'DISK_GB': 1} | +--------------------------------------+------------+------------------------------------------------+
在本例中,使用请求1个VGPU的样式创建了两个服务器,因此在查看每个消费者UUID(即服务器UUID)的分配时,您可以看到VGPU分配针对子资源提供程序,而其他分配针对根资源提供程序。在这里,这意味着a6811fc2-cec8-4f1d-baea-e2c6339a9697使用的虚拟GPU实际上是由PCI ID为0000:85:00.0的物理GPU提供的。
注:这些信息在Queens版本中被修复。
对于libvirt:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。