[ 
https://issues.apache.org/jira/browse/YARN-4108?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15099088#comment-15099088
 ] 

Eric Payne commented on YARN-4108:
----------------------------------

[~leftnoteasy], great job! This approach looks like it has potential to vastly 
improve preemption. I just have a few comments and questions.

- In the lazy preemption case, PCPP will send an event to the scheduler to mark 
a container killable. Can PCPP check if it's already been marked before 
sending, so that maybe event traffic will be less in the RM?
- Currently, if both queueA and queueB are over their guaranteed capacity, 
preemption will still occur if queueA is more over capacity than queueB. I 
think it is probably important to preserve this behavior (YARN-2592).
-- I don't see anyplace where {{ResourceLimits#isAllowPreemption}} is called. 
But, if it is, Will the following code in {{LeafQueue}} change preemption 
behavior?
{noformat}
  private void setPreemptionAllowed(ResourceLimits limits, String 
nodePartition) {
    // Set preemption-allowed:
    // For leaf queue, only under-utilized queue is allowed to preempt 
resources from other queues
    float usedCapacity = queueCapacities.getAbsoluteUsedCapacity(nodePartition);
    float guaranteedCapacity = 
queueCapacities.getAbsoluteCapacity(nodePartition);
    limits.setIsAllowPreemption(usedCapacity < guaranteedCapacity);
  }
{noformat}
-- Also, in {{ParentQueue#canAssign}}, does the following code have the same 
effect?
{noformat}
      if (this.getQueueCapacities().getUsedCapacity(node.getPartition())
          < 1.0f) {
{noformat}
- In {{AbstractCSQueue#canAssignToThisQueue}}:
-- I'm just trying to understand how things will be affected when headroom for 
a parent queue is (limit - used) + killable. Doesn't that say that a parent 
queue has more headroom than it's already acutally using? Is it relying on this 
behavior so that the {{assignment}} code will determine that it has more 
headroom when there are killable containers, and then rely on the leafqueue to 
kill those containers?
-- NPE if {{getChildQueues()}} returns null
{noformat}
    if (null != getChildQueues() || !getChildQueues().isEmpty()) {
{noformat}
- {{CSAssignment#toKillContainers}}: I would call them {{containersToKill}}
{quote}
4. I would like to have some freedom in selecting conatiners (marking) for 
preemption. A simple sorting based on submission time or priority seems limited 
approach. Could we have some interface here so that we can plugin user specific 
comparision cases.

    submission time
    priority
    demand based etc may be
{quote}
- To [~sunilg]'s point: Currently PCPP doesn't take into consideration things 
like locality or container size. If a queue is over its capacity by 8GB, and 
there are 1 8GB container plus 8 1GB containers, PCPP may decide to kill the 1 
8GB contaienr or it may decide to kill the 8 1GB containers, depending on 
properties like 'time since submission' and 'ignore-partition-exclusivity'. So, 
with the current, lazy preemption proposal, if the underserved queue needs an 
8GB container and the 8 1GB containers are marked as killable, at least now 
those containers don't get killed. It's a step in the right direction, but the 
underserved queue still has to wait. Same kind of thing with locality and other 
properties. It would be interesting to know what your thoughts are on making 
further modifications to PCPP to make more informed choices about which 
containers to kill. There may not be a "right" choice in PCPP, though, since 
the requirements of the underserved queue may change by the time the scheduler 
gets around to allocating resources.

> CapacityScheduler: Improve preemption to preempt only those containers that 
> would satisfy the incoming request
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: YARN-4108
>                 URL: https://issues.apache.org/jira/browse/YARN-4108
>             Project: Hadoop YARN
>          Issue Type: Bug
>          Components: capacity scheduler
>            Reporter: Wangda Tan
>            Assignee: Wangda Tan
>         Attachments: YARN-4108-design-doc-V3.pdf, 
> YARN-4108-design-doc-v1.pdf, YARN-4108-design-doc-v2.pdf, 
> YARN-4108.poc.1.patch, YARN-4108.poc.2-WIP.patch
>
>
> This is sibling JIRA for YARN-2154. We should make sure container preemption 
> is more effective.
> *Requirements:*:
> 1) Can handle case of user-limit preemption
> 2) Can handle case of resource placement requirements, such as: hard-locality 
> (I only want to use rack-1) / node-constraints (YARN-3409) / black-list (I 
> don't want to use rack1 and host\[1-3\])
> 3) Can handle preemption within a queue: cross user preemption (YARN-2113), 
> cross applicaiton preemption (such as priority-based (YARN-1963) / 
> fairness-based (YARN-3319)).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to