<div dir="ltr">I have summarize some scenarios for fpga devices request.<div><a href="https://etherpad.openstack.org/p/cyborg-fpga-request-scenarios">https://etherpad.openstack.org/p/cyborg-fpga-request-scenarios</a></div><div><div><br></div><div>Please add more  more 

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">scenarios<span> to find out the exceptions that placement can not satisfy the filter and weight.</span></span></div><div><br></div><div>IMOH, I refer 

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">placement<span>  to do 

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">filter and weight. If we have to let cyborg do <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">filter and weight.  Nova scheduler just need call cyborg once for all host 

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">weight though we do the weigh one by one.</span></span></span></span></span></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></span></span></span></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-03-23 12:27 GMT+08:00 Nadathur, Sundar <span dir="ltr"><<a href="mailto:sundar.nadathur@intel.com" target="_blank">sundar.nadathur@intel.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    Hi all,<br>
        There seems to be a possibility of a race condition in the
    Cyborg/Nova flow. Apologies for missing this earlier. (You can refer
    to the <a href="https://review.openstack.org/#/c/554717/1/doc/specs/rocky/cyborg-nova-sched.rst" target="_blank">proposed
      Cyborg/Nova spec</a> for details.)<br>
    <br>
    Consider the scenario where the flavor specifies a resource class
    for a device type, and also specifies a function (e.g. encrypt) in
    the extra specs. The Nova scheduler would only track the device type
    as a resource, and Cyborg needs to track the availability of
    functions. Further, to keep it simple, say all the functions exist
    all the time (no reprogramming involved).<br>
    <br>
    To recap, here is the scheduler flow for this case:<br>
    <ul>
      <li>A request spec with a flavor comes to Nova
        conductor/scheduler. The flavor has a device type as a resource
        class, and a function in the extra specs.</li>
      <li>Placement API returns the list of RPs (compute nodes) which
        contain the requested device types (but not necessarily the
        function).</li>
      <li>Cyborg will provide a custom filter which queries Cyborg DB.
        This needs to check which hosts contain the needed function, and
        filter out the rest.</li>
      <li>The scheduler selects one node from the filtered list, and the
        request goes to the compute node.<br>
      </li>
    </ul>
    For the filter to work, the Cyborg DB needs to maintain a table with
    triples of (host, function type, #free units). The filter checks if
    a given host has one or more free units of the requested function
    type. But, to keep the # free units up to date, Cyborg on the
    selected compute node needs to notify the Cyborg API to decrement
    the #free units when an instance is spawned, and to increment them
    when resources are released. <br>
    <br>
    Therein lies the catch: this loop from the compute node to
    controller is susceptible to race conditions. For example, if two
    simultaneous requests each ask for function A, and there is only one
    unit of that available, the Cyborg filter will approve both, both
    may land on the same host, and one will fail. This is because Cyborg
    on the controller does not decrement resource usage due to one
    request before processing the next request.<br>
    <br>
    This is similar to <a href="https://specs.openstack.org/openstack/nova-specs/specs/pike/implemented/placement-claims.html" target="_blank">this
      previous Nova scheduling issue</a>. That was solved by having the
    scheduler claim a resource in Placement for the selected node. I
    don't see an analog for Cyborg, since it would not know which node
    is selected. <br>
    <br>
    Thanks in advance for suggestions and solutions.<br>
    <br>
    Regards,<br>
    Sundar <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </div>

<br>______________________________<wbr>______________________________<wbr>______________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
<br></blockquote></div><br></div>