<html xmlns:v="urn:schemas-microsoft-com:vml" 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=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@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:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
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;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:337779011;
mso-list-type:hybrid;
mso-list-template-ids:-1882928772 -1739310932 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:0;
mso-level-number-format:bullet;
mso-level-text:-;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Calibri","sans-serif";
mso-fareast-font-family:Calibri;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi All, <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m sorry I am so late to this lively discussion – it looks a good one! Jay has been driving the debate a bit so most of this is in response to his comments. But please, anyone should chip in.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">On extensible resource tracking<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Jay, I am surprised to hear you say no one has explained to you why there is an extensible resource tracking blueprint. It’s simple, there was a succession of blueprints wanting to add data about this and that to the resource tracker and
the scheduler and the database tables used to communicate. These included capabilities, all the stuff in the stats, rxtx_factor, the equivalent for cpu (which only works on one hypervisor I think), pci_stats and more were coming including,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://blueprints.launchpad.net/nova/+spec/network-bandwidth-entitlement">https://blueprints.launchpad.net/nova/+spec/network-bandwidth-entitlement</a>
<o:p></o:p></p>
<p class="MsoNormal"><a href="https://blueprints.launchpad.net/nova/+spec/cpu-entitlement">https://blueprints.launchpad.net/nova/+spec/cpu-entitlement</a>
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So, in short, your claim that there are no operators asking for additional stuff is simply not true.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Around about the Icehouse summit (I think) it was suggested that we should stop the obvious trend and add a way to make resource tracking extensible, similar to metrics, which had just been added as an extensible way of collecting on going
usage data (because that was also wanted).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The json blob you refer to was down to the bad experience of the compute_node_stats table implemented for stats – which had a particular performance hit because it required an expensive join. This was dealt with by removing the table and
adding a string field to contain the data as a json blob. A pure performance optimization. Clearly there is no need to store things in this way and with Nova objects being introduced there is a means to provide strict type checking on the data even if it is
stored as json blobs in the database.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">On scheduler split<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have no particular position on splitting the scheduler. However, there was an interesting reaction to the network bandwidth entitlement blueprint listed above. The nova community felt it was a network thing and so nova should not provide
it – neutron should. Of course, in nova, the nova scheduler makes placement decisions… can you see where this is going…? Nova needs to coordinate its placement decision with neutron to decide if a host has sufficient bandwidth available. Similar points are
made about cinder – nova has no idea about cinder, but in some environments the location of a volume matters when you come to place an instance.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I should re-iterate that I have no position on splitting out the scheduler, but some way to deal with information from outside nova is certainly desirable. Maybe other services have the same dilemma.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">On global resource tracker<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have to say I am inclined to be against the idea of turning the scheduler into a “global resource tracker”. I do see the benefit of obtaining a resource claim up front, we have all seen that the scheduler can make incorrect choices because
of the delay in reflecting resource allocation to the database and so to the scheduler – it operates on imperfect information. However, it is best to avoid a global service relying on synchronous interaction with compute nodes during the process of servicing
a request. I have looked at your example code for the scheduler (global resource tracker) and it seems to make a choice from local information and then interact with the chosen compute node to obtain a claim and then try again if the claim fails. I get it
– I see that it deals with the same list of hosts on the retry. I also see it has no better chance of getting it right.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Your desire to have a claim is borne out by the persistent claims spec (I love the spec, I really I don’t see why they have to be persistent). I think that is a great idea. Why not let the scheduler make placement suggestions (as a global
service) and then allow conductors to obtain the claim and retry if the claim fails? Similar process to your code, but the scheduler only does its part and the conductors scale out the process by acting more locally and with more parallelism. (Of course, you
could also be optimistic and allow the compute node to do the claim as part of the create as the degenerate case).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">To emphasize the point further, what would a cells scheduler do? Would that also make a synchronous operation to obtain the claim?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My reaction to the global resource tracker idea has been quite negative. I want to like the idea because I like the thought of knowing I have the resources when I get my answer. Its just that I think the persistent claims (without the persistent
part <span style="font-family:Wingdings">J</span> ) gives us a lot of what we need. But I am still open to be convinced.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Paul<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">On 07/14/2014 10:16 AM, Sylvain Bauza wrote:<o:p></o:p></p>
<p class="MsoNormal">> Le 12/07/2014 06:07, Jay Pipes a écrit :<o:p></o:p></p>
<p class="MsoNormal">>> On 07/11/2014 07:14 AM, John Garbutt wrote:<o:p></o:p></p>
<p class="MsoNormal">>>> On 10 July 2014 16:59, Sylvain Bauza <sbauza at redhat.com> wrote:<o:p></o:p></p>
<p class="MsoNormal">>>>> Le 10/07/2014 15:47, Russell Bryant a écrit :<o:p></o:p></p>
<p class="MsoNormal">>>>>> On 07/10/2014 05:06 AM, Sylvain Bauza wrote:<o:p></o:p></p>
<p class="MsoNormal">>>>>>> Hi all,<o:p></o:p></p>
<p class="MsoNormal">>>>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>>>> === tl;dr: Now that we agree on waiting for the split<o:p></o:p></p>
<p class="MsoNormal">>>>>>> prereqs to be done, we debate on if ResourceTracker should<o:p></o:p></p>
<p class="MsoNormal">>>>>>> be part of the scheduler code and consequently Scheduler<o:p></o:p></p>
<p class="MsoNormal">>>>>>> should expose ResourceTracker APIs so that Nova wouldn't<o:p></o:p></p>
<p class="MsoNormal">>>>>>> own compute nodes resources. I'm proposing to first come<o:p></o:p></p>
<p class="MsoNormal">>>>>>> with RT as Nova resource in Juno and move ResourceTracker<o:p></o:p></p>
<p class="MsoNormal">>>>>>> in Scheduler for K, so we at least merge some patches by<o:p></o:p></p>
<p class="MsoNormal">>>>>>> Juno. ===<o:p></o:p></p>
<p class="MsoNormal">>>>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>>>> Some debates occured recently about the scheduler split, so<o:p></o:p></p>
<p class="MsoNormal">>>>>>> I think it's important to loop back with you all to see<o:p></o:p></p>
<p class="MsoNormal">>>>>>> where we are and what are the discussions. Again, feel free<o:p></o:p></p>
<p class="MsoNormal">>>>>>> to express your opinions, they are welcome.<o:p></o:p></p>
<p class="MsoNormal">>>>>> Where did this resource tracker discussion come up? Do you<o:p></o:p></p>
<p class="MsoNormal">>>>>> have any references that I can read to catch up on it? I<o:p></o:p></p>
<p class="MsoNormal">>>>>> would like to see more detail on the proposal for what should<o:p></o:p></p>
<p class="MsoNormal">>>>>> stay in Nova vs. be moved. What is the interface between<o:p></o:p></p>
<p class="MsoNormal">>>>>> Nova and the scheduler here?<o:p></o:p></p>
<p class="MsoNormal">>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>> Oh, missed the most important question you asked. So, about<o:p></o:p></p>
<p class="MsoNormal">>>>> the interface in between scheduler and Nova, the original<o:p></o:p></p>
<p class="MsoNormal">>>>> agreed proposal is in the spec<o:p></o:p></p>
<p class="MsoNormal">>>>> https://review.openstack.org/82133 (approved) where the<o:p></o:p></p>
<p class="MsoNormal">>>>> Scheduler exposes : - select_destinations() : for querying the<o:p></o:p></p>
<p class="MsoNormal">>>>> scheduler to provide candidates - update_resource_stats() : for<o:p></o:p></p>
<p class="MsoNormal">>>>> updating the scheduler internal state (ie. HostState)<o:p></o:p></p>
<p class="MsoNormal">>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>> Here, update_resource_stats() is called by the<o:p></o:p></p>
<p class="MsoNormal">>>>> ResourceTracker, see the implementations (in review)<o:p></o:p></p>
<p class="MsoNormal">>>>> https://review.openstack.org/82778 and<o:p></o:p></p>
<p class="MsoNormal">>>>> https://review.openstack.org/104556.<o:p></o:p></p>
<p class="MsoNormal">>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>> The alternative that has just been raised this week is to<o:p></o:p></p>
<p class="MsoNormal">>>>> provide a new interface where ComputeNode claims for resources<o:p></o:p></p>
<p class="MsoNormal">>>>> and frees these resources, so that all the resources are fully<o:p></o:p></p>
<p class="MsoNormal">>>>> owned by the Scheduler. An initial PoC has been raised here<o:p></o:p></p>
<p class="MsoNormal">>>>> https://review.openstack.org/103598 but I tried to see what<o:p></o:p></p>
<p class="MsoNormal">>>>> would be a ResourceTracker proxified by a Scheduler client here<o:p></o:p></p>
<p class="MsoNormal">>>>> : https://review.openstack.org/105747. As the spec hasn't been<o:p></o:p></p>
<p class="MsoNormal">>>>> written, the names of the interfaces are not properly defined<o:p></o:p></p>
<p class="MsoNormal">>>>> but I made a proposal as : - select_destinations() : same as<o:p></o:p></p>
<p class="MsoNormal">>>>> above - usage_claim() : claim a resource amount -<o:p></o:p></p>
<p class="MsoNormal">>>>> usage_update() : update a resource amount - usage_drop(): frees<o:p></o:p></p>
<p class="MsoNormal">>>>> the resource amount<o:p></o:p></p>
<p class="MsoNormal">>>>><o:p> </o:p></p>
<p class="MsoNormal">>>>> Again, this is a dummy proposal, a spec has to written if we<o:p></o:p></p>
<p class="MsoNormal">>>>> consider moving the RT.<o:p></o:p></p>
<p class="MsoNormal">>>><o:p> </o:p></p>
<p class="MsoNormal">>>> While I am not against moving the resource tracker, I feel we<o:p></o:p></p>
<p class="MsoNormal">>>> could move this to Gantt after the core scheduling has been<o:p></o:p></p>
<p class="MsoNormal">>>> moved.<o:p></o:p></p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Big -1 from me on this, John.<o:p></o:p></p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Frankly, I see no urgency whatsoever -- and actually very little<o:p></o:p></p>
<p class="MsoNormal">>> benefit -- to moving the scheduler out of Nova. The Gantt project I<o:p></o:p></p>
<p class="MsoNormal">>> think is getting ahead of itself by focusing on a split instead of<o:p></o:p></p>
<p class="MsoNormal">>> focusing on cleaning up the interfaces between nova-conductor,<o:p></o:p></p>
<p class="MsoNormal">>> nova-scheduler, and nova-compute.<o:p></o:p></p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">> -1 on saying there is no urgency. Don't you see the NFV group saying<o:p></o:p></p>
<p class="MsoNormal">> each meeting what is the status of the scheduler split ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Frankly, I don't think a lot of the NFV use cases are well-defined.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Even more frankly, I don't see any benefit to a split-out scheduler to a
<o:p></o:p></p>
<p class="MsoNormal">single NFV use case.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> Don't you see each Summit the lots of talks (and people attending<o:p></o:p></p>
<p class="MsoNormal">> them) talking about how OpenStack should look at Pets vs. Cattle and<o:p></o:p></p>
<p class="MsoNormal">> saying that the scheduler should be out of Nova ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There's been no concrete benefits discussed to having the scheduler
<o:p></o:p></p>
<p class="MsoNormal">outside of Nova.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I don't really care how many people say that the scheduler should be out
<o:p></o:p></p>
<p class="MsoNormal">of Nova unless those same people come to the table with concrete reasons
<o:p></o:p></p>
<p class="MsoNormal">why. Just saying something is a benefit does not make it a benefit, and
<o:p></o:p></p>
<p class="MsoNormal">I think I've outlined some of the very real dangers -- in terms of code
<o:p></o:p></p>
<p class="MsoNormal">and payload complexity -- of breaking the scheduler out of Nova until
<o:p></o:p></p>
<p class="MsoNormal">the interfaces are cleaned up and the scheduler actually owns the
<o:p></o:p></p>
<p class="MsoNormal">resources upon which it exercises placement decisions.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> From an operator perspective, people waited so long for having a<o:p></o:p></p>
<p class="MsoNormal">> scheduler doing "scheduling" and not only "resource placement".<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Could you elaborate a bit here? What operators are begging for the
<o:p></o:p></p>
<p class="MsoNormal">scheduler to do more than resource placement? And if they are begging
<o:p></o:p></p>
<p class="MsoNormal">for this, what use cases are they trying to address?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'm genuinely curious, so looking forward to your reply here! :)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">snip...<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">>> As for the idea that things will get *easier* once scheduler code<o:p></o:p></p>
<p class="MsoNormal">>> is broken out of Nova, I go back to my original statement that I<o:p></o:p></p>
<p class="MsoNormal">>> don't really see the benefit of the split at this point, and I<o:p></o:p></p>
<p class="MsoNormal">>> would just bring up the fact that Neutron/nova-network is a shining<o:p></o:p></p>
<p class="MsoNormal">>> example of how things can easily backfire when splitting of code is<o:p></o:p></p>
<p class="MsoNormal">>> done too early before interfaces are cleaned up and<o:p></o:p></p>
<p class="MsoNormal">>> responsibilities between internal components are not clearly agreed<o:p></o:p></p>
<p class="MsoNormal">>> upon.<o:p></o:p></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">> Please, please, don't mix the rationale for extensible Resource<o:p></o:p></p>
<p class="MsoNormal">> Tracker and the current efforts for moving out the Scheduler. Both of<o:p></o:p></p>
<p class="MsoNormal">> them try to have an agnostic and heterogeneous scheduler, but both<o:p></o:p></p>
<p class="MsoNormal">> efforts are independent.<o:p></o:p></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">> The ResourceTracker is something pure Nova. Saying to Gantt "I want<o:p></o:p></p>
<p class="MsoNormal">> to store this data" and "I want you to select a destination" is<o:p></o:p></p>
<p class="MsoNormal">> something enough agnostic for not including the port of<o:p></o:p></p>
<p class="MsoNormal">> ResourceTracker to the Scheduler.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Sorry, I'm not following you. Who is saying to Gantt "I want to store
<o:p></o:p></p>
<p class="MsoNormal">this data"?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">All I am saying is that the thing that places a resource on some
<o:p></o:p></p>
<p class="MsoNormal">provider of that resource should be the thing that owns the process of a
<o:p></o:p></p>
<p class="MsoNormal">requester *claiming* the resources on that provider, and in order to
<o:p></o:p></p>
<p class="MsoNormal">properly track resources in a race-free way in such a system, then the
<o:p></o:p></p>
<p class="MsoNormal">system needs to contain the resource tracker.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> While I approve to define the interfaces now, there is no reason tho<o:p></o:p></p>
<p class="MsoNormal">> to say we would have to change anything in how Nova is doing that.<o:p></o:p></p>
<p class="MsoNormal">> The role of Gantt is to define the interfaces, make the line<o:p></o:p></p>
<p class="MsoNormal">> Scheduler vs. Nova and forklift the Scheduler into a single project.<o:p></o:p></p>
<p class="MsoNormal">> No big bang is needed here.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Yeah, I just don't see the need to split the scheduler at this point,
<o:p></o:p></p>
<p class="MsoNormal">sorry. :(<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best,<o:p></o:p></p>
<p class="MsoNormal">-jay<o:p></o:p></p>
</div>
</body>
</html>