<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:10.5pt;">
<div align="left" style="text-align:justify;">Now I am working on an FPGA management POC with Dolpher. </div>
<div align="left" style="text-align:justify;">We have finished some code, and have discussion with Li Liu and some cyborg developer guys. </div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">Here are some discussions:</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">image management</div>
<div align="left" style="text-align:justify;">1. User should upload the FPGA image to glance and set the tags as follow:</div>
<div align="left" style="text-align:justify;">There are two suggestions to upload an FPGA image.</div>
<div align="left" style="text-align:justify;">A. use raw glance api like:</div>
<div align="left" style="text-align:justify;">   $ openstack image create --file mypath/FPGA.img  fpga.img</div>
<div align="left" style="text-align:justify;">   $ openstack image set --tag FPGA --property vendor=intel --property type=crypto 58b813db-1fb7-43ec-b85c-3b771c685d22</div>
<div align="left" style="text-align:justify;">   The image must have "FPGA" tag and accelerator type(such as type=crypto).</div>
<div align="left" style="text-align:justify;">B. cyborg support a new api to upload a image.</div>
<div align="left" style="text-align:justify;">   This API will wrap glance api and include the above steps, also make image record in it's local DB. </div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">2. Cyborg agent/conductor get the FPGA image info from glance.</div>
<div align="left" style="text-align:justify;">There are also two suggestions to get the FPGA image info.</div>
<div align="left" style="text-align:justify;">A. use raw glance api.</div>
<div align="left" style="text-align:justify;">Cyborg will get the images by FPGA tag and timestamp periodically and store them in it's local cache.</div>
<div align="left" style="text-align:justify;">It will use the images tags and properties to form placement taits and resource_class name.</div>
<div align="left" style="text-align:justify;">B. store the imformations when call cybort's new upload API.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">3. Image download.</div>
<div align="left" style="text-align:justify;">call glance image download API to local file. and make a corresponding md5 files for checksum.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">GAP in image management<font face="ËÎÌå">£º</font></div>
<div align="left" style="text-align:justify;">missing related glance image client in cyborg.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">resource report management for scheduler.</div>
<div align="left" style="text-align:justify;">1.  Cyborg agent/conductor need synthesize all useful information from FPGA driver and image information.</div>
<div align="left" style="text-align:justify;">The traits will be like:</div>
<div align="left" style="text-align:justify;">CUSTOM_FPGA, CUSTOM_ACCELERATOR_CRYPTO,</div>
<div align="left" style="text-align:justify;">The resource_class will be like:</div>
<div align="left" style="text-align:justify;">CUSTOM_FPGA_INTEL_PF, CUSTOM_FPGA_INTEL_VF</div>
<div align="left" style="text-align:justify;">{"inventories":</div>
<div align="left" style="text-align:justify;">    "CUSTOM_FPGA_INTEL_PF": {</div>
<div align="left" style="text-align:justify;">        "allocation_ratio": 1.0,</div>
<div align="left" style="text-align:justify;">        "max_unit": 4,</div>
<div align="left" style="text-align:justify;">        "min_unit": 1,</div>
<div align="left" style="text-align:justify;">        "reserved": 0,</div>
<div align="left" style="text-align:justify;">        "step_size": 1,</div>
<div align="left" style="text-align:justify;">        "total": 4</div>
<div align="left" style="text-align:justify;">    }</div>
<div align="left" style="text-align:justify;">}</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">Accelerator claim and release:</div>
<div align="left" style="text-align:justify;">1. Cybort will support the releated API for accelerator claim and release.</div>
<div align="left" style="text-align:justify;">It can pass the follow parameters:</div>
<div align="left" style="text-align:justify;">  nodename: Which host that accelerator located on, it is required.</div>
<div align="left" style="text-align:justify;">  type: This accelerator type, cyborg can get image uuid by it. it is optional.</div>
<div align="left" style="text-align:justify;">  image uuid: the uuid of FPGA bitstream image, . it is optional.</div>
<div align="left" style="text-align:justify;">  traits: the traits info that cyborg reports to placement.</div>
<div align="left" style="text-align:justify;">  resource_class: the resource_class name that reports to placement.</div>
<div align="left" style="text-align:justify;">And return the address for the accelerator. At present, it is the PCIE_ADDRESS.</div>
<div align="left" style="text-align:justify;">2. When claim an accelerator, type and image is None, cybort will not program the fpga for user.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">FPGA accelerator program API:</div>
<div align="left" style="text-align:justify;">We still need to support an independent program API for some specific scenarios.</div>
<div align="left" style="text-align:justify;">Such as as a FPGA developer, I will change my verilog logical frequently and need to do verification on my guest.</div>
<div align="left" style="text-align:justify;">I upload my new bitstream image to glance, and call cyborg to program my FPGA accelerator.</div>
<div align="left" style="text-align:justify;"> </div>
<div align="left" style="text-align:justify;">End user operations follow:</div>
<div align="left" style="text-align:justify;">1. upload an bitstream image to glance if necessary and set its tags(at least FPGA is requied) and property.</div>
<div align="left" style="text-align:justify;">   sucn as: --tag FPGA --property vendor=intel --property type=crypto</div>
<div align="left" style="text-align:justify;">2. list the FPGA related traits and resource_class names by placement API.</div>
<div align="left" style="text-align:justify;">   such as get "CUSTOM_FPGA_INTEL_PF" resource_class names and "CUSTOM_HW_INTEL,CUSTOM_HW_CRYPTO" traits.</div>
<div align="left" style="text-align:justify;">3. create a new falvor wiht his expected traits and resource_class as extra spec.</div>
<div align="left" style="text-align:justify;">   such as:</div>
<div align="left" style="text-align:justify;">       "resourcesn:CUSTOM_FPGA_INTEL_PF=2"  n is an integer or empty string.  </div>
<div align="left" style="text-align:justify;">       "required:CUSTOM_HW_INTEL,CUSTOM_HW_CRYPTO".</div>
<div align="left" style="text-align:justify;">4. create the VM with this flavor.</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;">BR</div>
<div align="left" style="text-align:justify;">Shaohe Feng</div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
<div align="left" style="text-align:justify;"><font face="Times New Roman"> </font></div>
</span></font>
</body>
</html>