<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Courier New";
        panose-1:2 7 3 9 2 2 5 2 4 4;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:Calibri;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:Calibri;}
@page WordSection1
        {size:595.0pt 842.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:434592723;
        mso-list-template-ids:-621280372;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:502164146;
        mso-list-template-ids:-387698720;}
@list l2
        {mso-list-id:1261914374;
        mso-list-template-ids:1175079630;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hi folks:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Seeking community input on an initial design for Intel Resource Director Technology (RDT), in particular for Cache Allocation Technology in OpenStack Nova to protect workloads from co-resident noisy neighbors,
 to ensure quality of service (QoS).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">1. What is Cache Allocation Technology (CAT)?<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Intel’s RDT(Resource Director Technology) [1]  is a umbrella of
<b>hardware</b> support to facilitate the monitoring and reservation of shared resources such as cache, memory and network bandwidth towards obtaining Quality of Service. RDT will enable fine grain control of resources which in particular is valuable in cloud
 environments to meet Service Level Agreements while increasing resource utilization through sharing. CAT is a part of RDT and concerns itself with reserving for a process(es) a portion of last level cache with further fine grain control as to how much for
 code versus data. The below figure shows a single processor composed of 4 cores and the cache hierarchy. The L1 cache is split into Instruction and Data, the L2 cache is next in speed to L1. The L1 and L2 caches are per core. The Last Level Cache (LLC) is
 shared among all cores. With CAT on the currently available hardware the LLC can be partitioned on a per process (virtual machine, container, or normal application) or process group basis.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><br>
<br>
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Libvirt and OpenStack [2] already support monitoring cache (CMT) and memory bandwidth usage local to a processor socket (MBM_local) and total memory bandwidth usage across all processor sockets (MBM_total)
 for a process or process group.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><br>
2. How CAT works  <b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">To learn more about CAT please refer to the
<a href="http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html">
Intel Processor Soft Developer's Manual</a>  volume 3b, chapters 17.16 and 17.17 [3]. Linux kernel support for the same is expected in release 4.10 and documented at [4]<br>
<br>
<br>
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3. Libvirt Interface<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><br>
Libvirt support for CAT is underway with the patch at reversion 7<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Interface changes of libvirt:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3.1 The capabilities xml has been extended to reveal cache information
<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><cache><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       <control min='2816' reserved='2816' unit='KiB' scope='L3'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     </bank><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       <control min='2816' reserved='2816' unit='KiB' scope='L3'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     </bank><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"></cache><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">The new `cache` xml element shows that the host has two
<b>banks</b> of <b>type</b> L3 or Last Level Cache (LLC), one per processor socket. The cache
<b>type</b> is l3 cache, its <b>size</b> 56320 KiB, and the <b>cpus</b> attribute indicates the physical CPUs associated with the same, here ‘0-21’, ‘44-65’ respectively.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">The <b>control </b>tag shows that bank belongs to scope L3, with a minimum possible allocation of 2816 KiB and still has 2816 KiB need to be reserved.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">If the host enabled CDP (Code and Data Prioritization) , l3 cache will be divided as code  (L3CODE)and data (L3Data).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Control tag will be extended to:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">...<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <control min='2816' reserved='2816' unit='KiB' scope='L3CODE'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <control min='2816' reserved='2816' unit='KiB' scope='L3DATA'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">…<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">The scope of L3CODE and L3DATA show that we can allocate cache for code/data usage respectively, they share same amount of l3 cache.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3.2 Domain xml extended to include new CacheTune element
<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><cputune><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">   <vcpupin vcpu='0' cpuset='0'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">               <vcpupin vcpu='1' cpuset='1'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">   <vcpupin vcpu='2' cpuset='0'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">               <vcpupin vcpu='3' cpuset='1'/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">   <cachetune id='0' host_id='0' type='l3' size='2816' unit='KiB' vcpus='0, 1/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">   <cachetune id='1' host_id='1' type='l3' size='2816' unit='KiB' vcpus=’2, 3’/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">...<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"></cputune>  <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">This means the guest will be have vcpus 0, 1 running on host’s socket 0, with 2816 KiB cache exclusively allocated to it and vcpus 2, 3 running on host’s socket 0, with 2816 KiB cache exclusively allocated
 to it. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Here we need to make sure vcpus 0, 1 are pinned to the pcpus of socket 0, refer capabilities
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'>:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Here we need to make sure vcpus 2, 3 are pinned to the pcpus of socket 1, refer capabilities
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'>:.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3.3 Libvirt work flow for CAT<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<ol style="margin-top:0cm" start="1" type="1">
<li class="MsoNormal" style="mso-list:l2 level1 lfo1"><span style="font-size:11.0pt">Create qemu process and get it’s PIDs<o:p></o:p></span></li><li class="MsoNormal" style="mso-list:l2 level1 lfo1"><span style="font-size:11.0pt">Define a new resource control domain also known as
<b>Cl</b>ass-<b>o</b>f-<b>S</b>ervice (CLOS) under /sys/fs/resctrl and set the desired
<b>C</b>ache <b>B</b>it <b>M</b>ask(CBM) in the libvirt domain xml file in addition to updating the default schemata of the host<o:p></o:p></span></li></ol>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">4. Proposed Nova Changes<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<ol style="margin-top:0cm" start="1" type="1">
<li class="MsoNormal" style="mso-list:l1 level1 lfo2"><span style="font-size:11.0pt">Get host capabilities from libvirt and extend compute node’ filed<o:p></o:p></span></li><li class="MsoNormal" style="mso-list:l1 level1 lfo2"><span style="font-size:11.0pt">Add new scheduler filter and weight to help schedule host for requested guest.<o:p></o:p></span></li><li class="MsoNormal" style="mso-list:l1 level1 lfo2"><span style="font-size:11.0pt">Extend flavor’s (and image meta) extra spec fields:<o:p></o:p></span></li></ol>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">We need to specify  numa setting for NUMA hosts if we want to enable CAT, see [5] to learn more about NUMA.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">In flavor, we can have:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">vcpus=8<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">mem=4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:numa_nodes=2 - numa of NUMA nodes to expose to the guest.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:numa_cpus.0=0,1,2,3,4,5<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:numa_cpus.1=6,7<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:numa_mem.0=3072<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:numa_mem.1=1024<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">//  new added in the proposal<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_banks=2   <i>//cache banks to be allocated to a  guest, (can be less than the number of NUMA nodes)</i><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_type.0=l3  <i>//cache bank type, could be l3, l3data + l3code</i><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_type.1=l3_c+d  <i>//cache bank type, could be l3, l3data + l3code</i><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_vcpus.0=0,1  <i>//vcpu list on cache banks, can be none</i><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_vcpus.1=6,7<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_l3.0=2816  <i>//cache size in KiB.</i><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_l3_code.1=2816<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">hw:cache_l3_data.1=2816<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Here, user can clear about which vcpus will benefit cache allocation, about cache bank, it’s should be co-work with numa cell, it will allocate cache on a physical CPU socket, but here cache bank is a logic
 concept. Cache bank will allocate cache for a vcpu list, all vcpu list should group   <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Modify in addition the <cachetune> element in libvirt domain xml, see 3.2 for detail<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">This will allocate 2 cache banks from the host’s cache banks and associate vcpus to the same.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">In the example, the guest will be have vcpus 0, 1 running on socket 0 of the host with 2816 KiB of cache for exclusive use and have vcpus 6, 7 running on socket 1 of the host with l3 code cache 2816KiB and
 l3 data with 2816KiB cache allocation.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">If a NUMA Cell were to contain multiple CPU sockets (this is rare), then we will adjust NUMA vCPU placement policy, to ensure that vCPUs and the cache allocated to them are all co-located on the same socket.
  <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoNormal" style="mso-list:l0 level1 lfo3"><span style="font-size:11.0pt">We can define less cache bank on a multiple NUMA cell node.<o:p></o:p></span></li><li class="MsoNormal" style="mso-list:l0 level1 lfo3"><span style="font-size:11.0pt">No cache_vcpus parameter needs to be specified if no reservation is desired.
<o:p></o:p></span></li></ul>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">NOTE: the cache allocation for a guest is in isolated/exclusive mode.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">References<b><o:p></o:p></b></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[1] <a href="http://www.intel.com/content/www/us/en/architecture-and-technology/resource-director-technology.html">
http://www.intel.com/content/www/us/en/architecture-and-technology/resource-director-technology.html</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[2] <a href="https://blueprints.launchpad.net/nova/+spec/support-perf-event">
https://blueprints.launchpad.net/nova/+spec/support-perf-event</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[3] <a href="http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html">
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[4] <a href="https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/tree/Documentation/x86/intel_rdt_ui.txt?h=x86/cache">
https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/tree/Documentation/x86/intel_rdt_ui.txt?h=x86/cache</a>
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[5] https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-numa-placement.html
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:DengXian;color:black">Best Regards<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:DengXian;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:DengXian;color:black">Eli Qiao(<span lang="ZH-CN">乔立勇)</span>OpenStack Core team OTC Intel.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:DengXian;color:black">-- <o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>