[
https://issues.apache.org/jira/browse/YUNIKORN-1?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17260177#comment-17260177
]
Tao Yang commented on YUNIKORN-1:
---------------------------------
Hi, [~wangda] [~wwei] [~wilfreds]
As the refactor for core scheduling process has been done, I would like to
keep this ticket moving. This time I think we can establish a pluggable
mechanism with flexible interfaces at first.
Currently the key steps of scheduling process such as applications/requests
sorting are implemented with fixed process and policies, users may have some
different requirements on them but it's not flexible enough. Moreover, some
steps are relatively time-consuming in every scheduling cycle, we can improve
the performance a lot via different implementations if they are pluggable.
I have tried to improve following places:
(1) requests inside the application which are managed via a map structure.
To make it pluggable, at first we should add a Request interface out of
scheduler/objects package for AllocationAsk to avoid circular dependencies,
then add Requests interface with some common methods like
AddRequest/RemoveRequest/GetRequest in interfaces package, and add a default
implemetation DefaultRequests with map structure for it, at last add
RequestsPlugin interface and its default implementation in plugins package
which helps to generate new requests instance when creating an application.
(2) key steps about sorting applications and requests inside a queue.
Currently sorting applications and sorting requests are separated so that some
requirements can't be satisfied, for example we have 3 apps APP1/APP2, every
application have different priorities(APP1: 3/5, APP2: 2/4), the request
priority is utmost important so that the required sequence may be
APP1/priority=5 > APP2/priority=4 > APP1/priority=3 > APP2/priority=2. Thus I
propose to add QueueRequestManager interface to handle these steps together to
make it more flexible, it may have simple method like SortForAllocation() whose
return is an iterator which can output an application and its requests,
AppRequestIterator/RequestIterator interfaces are added for iterating
applications and requests, QueueRequestManagerPlugin interface is imported as
RequestsPlugin which helps to generate QueueRequestManager instance when
initilizing a queue.
Please refer to the [draft
PR|https://github.com/apache/incubator-yunikorn-core/pull/237] for details.
Hope to hear your thoughts, Thanks.
> Support app/task priority aware scheduling
> ------------------------------------------
>
> Key: YUNIKORN-1
> URL: https://issues.apache.org/jira/browse/YUNIKORN-1
> Project: Apache YuniKorn
> Issue Type: New Feature
> Components: core - scheduler
> Reporter: Weiwei Yang
> Assignee: Tao Yang
> Priority: Major
> Labels: pull-request-available
> Attachments: Support priority-based scheduling among applications
> v1.pdf, Support priority-based scheduling among applications v2.pdf, Support
> priority-based scheduling among applications v3.pdf
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> The scheduler needs to understand app/task priority and make proper decisions
> while allocating resources. I think we don't need to introduce a very complex
> model when defining priorities, e.g supporting both queues, app, and task
> level priorities, it will be hard for users to consume. Instead, we need to
> find a clean, straightforward approach to handle priorities.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]