[openstack-dev] Dynamically adding Extra Specs

Joshua Harlow harlowja at fastmail.com
Tue Feb 9 01:44:18 UTC 2016

Dhvanan Shah wrote:
> Hey Jay!
> I was looking at implementing a few scheduling algorithms of my own
> natively into OpenStack, and for that I went through the nova-scheduler.
> After going through the scheduler, I felt that it was not very easy to
> implement or extend and add new scheduling algorithms to the scheduler.
> The only things that I felt that I could change or maybe was provisioned
> for adding or extending were the filters and weighers and implementing
> new scheduling algorithms with just these 2 knobs was a little hard. I
> did change the code in the filter_scheduler to get some basic algorithms
> running like the first and next fit apart from the spreading and
> stacking which was already present. But to go beyond and to implement
> more complex algorithms was much harder and I would have to change a lot
> of code in different places that could as a side effect also break
> things and didn't seem clean. I might be wrong and might have not
> understood things right, please correct me if so.
> To give an example of what I mean by a little complex scheduling
> algorithms: a subset matching algorithm - that schedules multiple
> heterogeneous requests by picking out a subset from the requests that
> best fit a host/s, so this would improve the utilization. The
> prerequisite for this is that I have multiple heterogeneous requests
> lined up to be scheduled. So for this kind of an algorithm it isnt easy
> to implement into OpenStack.
> So a workaround that I'm working on for implementing different
> scheduling algorithms is by building a scheduling wrapper outside of the
> OpenStack architecture, where the user interacts with this wrapper and
> in the wrapper I get the host details from the database and based on the
> algorithm I want, the scheduler chooses the host for the request and
> gives out a VM : Host mapping (The wrapper does the sanity checks that
> the filters do to check if the host can accommodate or handle the
> request). Along with the request, I also want to pass this mapping that
> the scheduler can use to assign the request to the host passed in the
> mapping. I've written a filter that filters all the hosts apart from the
> host that I sent and this is how I make sure that the request gets
> placed on the host that I had passed. I have come up with a hack to pass
> the host to the scheduler, but it is not quite elegant.

Why use the filter mechanism at all?

Just provide a whole new scheduler that replaces the plugabble point 
that already exists (a class with ``def select_destinations(self, 
context, spec_obj)``)?

Although it seems u want to put a request into SCHEDULING_WAIT (or 
something like that) and then when u have enough requests to batch up u 
will move from SCHEDULING_WAIT -> SCHEDULING (something akin to delayed 
scheduling when you have reached your batch size). Is something like 
that correct?

> Would be great to have your input on the same!
> On Mon, Feb 8, 2016 at 12:51 AM, Jay Pipes <jaypipes at gmail.com
> <mailto:jaypipes at gmail.com>> wrote:
>     Apologies for the delayed responses. Comments inline.
>     On 01/27/2016 02:29 AM, Dhvanan Shah wrote:
>         Hey Jay!
>         Thanks for the clarification. There was another thing that I
>         wanted to
>         know, is there any provision to pass extra arguments or some extra
>         specifications along with the VM request to nova. To give you some
>         context, I wanted to pass a host:vm mapping to the nova
>         scheduler for
>         its host selection process, and I'm providing this mapping from
>         outside
>         of the openstack architecture.
>     Why do you want to do this? The scheduler is the thing that sets the
>     host -> vm mapping -- that's what the process of scheduling does.
>     >  So I need to send this information along
>         with the request to the scheduler. One way of doing this was
>         creating
>         new flavors with their extra specification as different hosts,
>         but that
>         would lead to as you pointed out earlier a "flavor explosion"
>         problem.
>         So is there a way to pass some extra arguments or some additional
>         information to nova.
>     Depends what exactly you are trying to pass to Nova. Could you give
>     some more information about your use case?
>     Thanks!
>     -jay
> --
> Dhvanan Shah
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

More information about the OpenStack-dev mailing list