-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/12098/
-----------------------------------------------------------

(Updated Aug. 8, 2013, 3:44 p.m.)


Review request for cloudstack.


Changes
-------

Rebased on master


Repository: cloudstack-git


Description
-------

This patch adds PCI Passthrough support to CloudStack on the KVM Hypervisor as 
previously mentioned on the mailing list

PCI Passthrough may be useful for high-performance networking devices
or other hardware accelerators. This patch does not care what kind of
the device it is or attempt to configure it, leaving it to the guest.

Because the devices available at each agent may be different, the
available devices for passthrough are configured at the agent
configuration file (/etc/cloudstack/agent/agent.properties).
Configuration is a comma separated list of available PCI devices and
its given name.

pci.devices=28:00.1|10GE,28:00.2|10GE,28:00.3|10GE,28:00.4|10GE,28:00.5|10GE,28:00.6|10GE,28:00.7|10GE,28:01.0|10GE

At agent startup, the list of PCI devices is parsed and sent together
with StartupRoutingCommand (in a new field, not in details). The
management server then stores it in a new table “op_host_pci_devices”.
If a device is added, removed, or renamed, the table is updated
accordingly. The agent also probes libvirt which devices are currently
in-use and send it with the command in attempt to synchronize any
potential difference between the database and the actual status.

The “name” of the PCI device is what is used to assign a device. In a
compute offering, the user can specify the name of one or more PCI
devices (as a comma-separated list) and CloudStack will find a host
with the PCI device of the specified name available and assign it.

A new manager, PciDeviceManager, is created to handle the
allocation of PCI device. The manager implements StateListener and
assigns PCI devices on state change to “starting” and also release the
devices VM stop. First fit allocator and first fit planner are also
modified to check for PCI device availability accordingly.

For migration, intrusive migration is implementated. The PCI device is
detached before migration and attached it again at the target host.
This will interrupt whatever is using the device on the VM. However,
it may be desirable for networking devices where the VM can use a
bonding device to channel network traffic through the normal
virtualized network device while the PCI Passthrough device is down.


Diffs (updated)
-----

  api/src/com/cloud/agent/api/to/PciDeviceTO.java PRE-CREATION 
  api/src/com/cloud/agent/api/to/VirtualMachineTO.java e6240ff 
  api/src/com/cloud/offering/ServiceOffering.java 45d5f38 
  api/src/com/cloud/pci/PciDevice.java PRE-CREATION 
  api/src/org/apache/cloudstack/api/ApiConstants.java 00d526d 
  
api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
 decac29 
  api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java 
5c5b369 
  client/WEB-INF/classes/resources/messages.properties 4fc09ee 
  client/tomcatconf/applicationContext.xml.in b832b09 
  core/src/com/cloud/agent/api/AttachPciDevicesCommand.java PRE-CREATION 
  core/src/com/cloud/agent/api/StartupRoutingCommand.java 5961ab0 
  engine/schema/src/com/cloud/host/HostPciDeviceVO.java PRE-CREATION 
  engine/schema/src/com/cloud/host/HostVO.java c814b94 
  engine/schema/src/com/cloud/host/dao/HostDaoImpl.java dd26941 
  engine/schema/src/com/cloud/host/dao/HostPciDevicesDao.java PRE-CREATION 
  engine/schema/src/com/cloud/host/dao/HostPciDevicesDaoImpl.java PRE-CREATION 
  engine/schema/src/com/cloud/migration/ServiceOffering21VO.java 7a49e63 
  engine/schema/src/com/cloud/service/ServiceOfferingVO.java 9a262c5 
  
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 542136a 
  
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
 a283768 
  
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java 
6aaabc5 
  server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java 
088591f 
  server/src/com/cloud/alert/AlertManagerImpl.java c437a8c 
  server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java 945e67b 
  server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java 05ff5f3 
  server/src/com/cloud/configuration/ConfigurationManager.java 775601a 
  server/src/com/cloud/configuration/ConfigurationManagerImpl.java 00503c5 
  server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b896b84 
  server/src/com/cloud/hypervisor/HypervisorGuruBase.java 8a9df03 
  server/src/com/cloud/pci/PciDeviceManager.java PRE-CREATION 
  server/src/com/cloud/pci/PciDeviceManagerImpl.java PRE-CREATION 
  server/src/com/cloud/resource/ResourceManagerImpl.java beb5f4e 
  server/src/com/cloud/vm/UserVmManagerImpl.java 07d5f64 
  server/test/com/cloud/vpc/MockConfigurationManagerImpl.java 840f539 
  setup/db/db/schema-420to430.sql 52b8391 
  ui/dictionary.jsp 3dfdefe 
  ui/scripts/configuration.js f9c2498 
  ui/scripts/docs.js e3be08c 

Diff: https://reviews.apache.org/r/12098/diff/


Testing
-------

Testing done with Mellanox ConnectX-2 NIC with SR-IOV on Ubuntu Raring.


Thanks,

Pawit Pornkitprasan

Reply via email to