| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| package org.apache.cloudstack.gpu; |
| |
| import com.cloud.agent.api.VgpuTypesInfo; |
| import com.cloud.agent.api.to.GPUDeviceTO; |
| import com.cloud.host.Host; |
| import com.cloud.utils.component.Manager; |
| import com.cloud.vm.VirtualMachine; |
| import org.apache.cloudstack.api.command.admin.gpu.CreateGpuCardCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.CreateGpuDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.CreateVgpuProfileCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.DeleteGpuCardCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.DeleteGpuDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.DeleteVgpuProfileCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.UnmanageGpuDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.DiscoverGpuDevicesCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.ManageGpuDeviceCmd; |
| import org.apache.cloudstack.api.command.user.gpu.ListGpuDevicesCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.UpdateGpuCardCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.UpdateGpuDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.gpu.UpdateVgpuProfileCmd; |
| import org.apache.cloudstack.api.command.user.gpu.ListGpuCardsCmd; |
| import org.apache.cloudstack.api.command.user.gpu.ListVgpuProfilesCmd; |
| import org.apache.cloudstack.api.response.GpuCardResponse; |
| import org.apache.cloudstack.api.response.GpuDeviceResponse; |
| import org.apache.cloudstack.api.response.ListResponse; |
| import org.apache.cloudstack.api.response.VgpuProfileResponse; |
| import org.apache.cloudstack.framework.config.ConfigKey; |
| |
| import java.util.HashMap; |
| import java.util.List; |
| |
| public interface GpuService extends Manager { |
| |
| ConfigKey<Boolean> GpuDetachOnStop = new ConfigKey<>(Boolean.class, "gpu.detach.on.stop", "Advanced", "false", |
| "Whether to detach GPU devices from VM on stop or keep them allocated", true, ConfigKey.Scope.Domain, null); |
| |
| GpuCard createGpuCard(CreateGpuCardCmd cmd); |
| |
| GpuCard updateGpuCard(UpdateGpuCardCmd cmd); |
| |
| boolean deleteGpuCard(DeleteGpuCardCmd cmd); |
| |
| VgpuProfileResponse createVgpuProfile(CreateVgpuProfileCmd cmd); |
| |
| VgpuProfileResponse updateVgpuProfile(UpdateVgpuProfileCmd cmd); |
| |
| boolean deleteVgpuProfile(DeleteVgpuProfileCmd cmd); |
| |
| ListResponse<GpuCardResponse> listGpuCards(ListGpuCardsCmd cmd); |
| |
| ListResponse<VgpuProfileResponse> listVgpuProfiles(ListVgpuProfilesCmd cmd); |
| |
| GpuDeviceResponse createGpuDevice(CreateGpuDeviceCmd cmd); |
| |
| GpuDeviceResponse updateGpuDevice(UpdateGpuDeviceCmd cmd); |
| |
| ListResponse<GpuDeviceResponse> listGpuDevices(ListGpuDevicesCmd cmd); |
| |
| boolean disableGpuDevice(UnmanageGpuDeviceCmd cmd); |
| |
| boolean enableGpuDevice(ManageGpuDeviceCmd cmd); |
| |
| /** |
| * Deallocate GPU devices for a VM on a host. |
| * |
| * @param vmId The ID of the VM to deallocate GPU devices for. |
| */ |
| void deallocateAllGpuDevicesForVm(long vmId); |
| |
| |
| /** |
| * Deallocate GPU devices for a VM on a host. |
| * |
| * @param vmId The ID of the VM to deallocate GPU devices for. |
| */ |
| void deallocateGpuDevicesForVmOnHost(long vmId, long hostId); |
| |
| /** |
| * Deallocate existing GPU devices for a VM on a host and allocate new GPU devices to the VM. |
| * |
| * @param vmId The ID of the VM to allocate GPU devices to. |
| * @param hostId The ID of the host to allocate GPU devices to. |
| * @param gpuDevices The list of GPU devices to allocate to the VM. |
| */ |
| void allocateGpuDevicesToVmOnHost(long vmId, long hostId, List<VgpuTypesInfo> gpuDevices); |
| |
| /** |
| * Discover GPU devices on a host by using the getGPUStatistics command and updating the GPU details for the host. |
| * |
| * @param cmd The command to discover GPU devices. |
| * @return The list of GPU devices. |
| */ |
| ListResponse<GpuDeviceResponse> discoverGpuDevices(DiscoverGpuDevicesCmd cmd); |
| |
| /** |
| * Check if GPU devices are available for a VM on a host by checking the number of available GPU devices for the |
| * vGPU profile. |
| * |
| * @param host The host to check GPU devices for. |
| * @param vmId The ID of the VM to check GPU devices for. |
| * @param vgpuProfile The vGPU profile to check GPU devices for. |
| * @param gpuCount The number of GPU devices to check for. |
| * @return True if GPU devices are available, false otherwise. |
| */ |
| boolean isGPUDeviceAvailable(Host host, Long vmId, VgpuProfile vgpuProfile, int gpuCount); |
| |
| /** |
| * Get GPU devices for a VM on a host by checking the number of available GPU devices for the vGPU profile. |
| * If the VM already has GPU devices assigned, deallocate them and allocate new GPU devices to the VM. |
| * The new GPU devices are allocated optimally to the VM. |
| * |
| * @param vm The VM to get GPU devices for. |
| * @param vgpuProfile The vGPU profile to get GPU devices for. |
| * @param gpuCount The number of GPU devices to get. |
| * @return The GPU devices. |
| */ |
| GPUDeviceTO getGPUDevice(VirtualMachine vm, long hostId, VgpuProfile vgpuProfile, int gpuCount); |
| |
| /** |
| * Gets the GPU group details from the GPU devices on a host. |
| * This fetches the GPU devices from the host and prepares the GPU group details for the host. |
| * The GPU group details are a map of GPU group name (Card's device name) to a map of vGPU profile name to |
| * VgpuTypesInfo. |
| * The VgpuTypesInfo contains the information about the GPU device. |
| * |
| * @param hostId The host ID to get GPU group details for. |
| * @return The GPU group details. |
| */ |
| HashMap<String, HashMap<String, VgpuTypesInfo>> getGpuGroupDetailsFromGpuDevicesOnHost(long hostId); |
| |
| /** |
| * This method is used to add the GPU devices to the host when the host is discovered or when the GPU devices are |
| * updated. |
| * |
| * @param host The host to add the GPU devices to. |
| * @param newGpuDevicesInfo The list of GPU devices to add to the host. |
| */ |
| void addGpuDevicesToHost(Host host, List<VgpuTypesInfo> newGpuDevicesInfo); |
| |
| boolean deleteGpuDevices(DeleteGpuDeviceCmd deleteGpuDeviceCmd); |
| } |