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

Eric Payne commented on YARN-4945:
----------------------------------

[~sunilg], thanks again for all of the great work you are doing on this issue.
----
\\
- Separate switches for priority and user-limit-percent preemption?

{{ProportionalCapacityPreemptionPolicy#init}} uses 
{{SELECT_CANDIDATES_FOR_INTRAQUEUE_PREEMPTION}} to turn on all intra-queue 
preemption policies, but the config property name for 
{{SELECT_CANDIDATES_FOR_INTRAQUEUE_PREEMPTION}} is 
{{select_based_on_priority_of_applications}}.

I actually would like to have the priority policy and the 
minumum-user-limit-percent policy be turned on separately. I'm not sure of the 
best way to do that, but our users don't use application priority very much.

Perhaps {{CapacitySchedulerConfiguration}} could have something like:
{code}
  /**
   * For intra-queue preemption, priority based selector can help to preempt
   * containers of lowest priority apps to find resources for high priority
   * apps.
   */
  public static final String 
PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_APP_PRIORITY =
      PREEMPTION_CONFIG_PREFIX + "select_based_on_priority_of_applications";
  public static final boolean 
DEFAULT_PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_APP_PRIORITY = false;

  /**
   * For intra-queue preemption, minimum-user-limit-percent based selector can
   * help to preempt containers to ensure users are not starved of their
   * guaranteed percentage of a queue.
   */
  public static final String 
PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_USER_PERCENT_GUARANTEE =
      PREEMPTION_CONFIG_PREFIX + "select_based_on_user_percentage_guarantee";
  public static final boolean 
DEFAULT_SELECT_INTRAQUEUE_CANDIDATES_BY_USER_PERCENT_GUARANTEE = false;

{code}

And then {{ProportionalCapacityPreemptionPolicy#init}} can turn on intra-queue 
preemption if either one is set:
{code}
    boolean selectIntraQueuePreemptCandidatesByPriority = csConfig.getBoolean(
        
CapacitySchedulerConfiguration.PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_APP_PRIORITY,
        
CapacitySchedulerConfiguration.DEFAULT_PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_APP_PRIORITY);
    boolean selectIntraQueuePreemptCandidatesByUserPercentGuarantee = 
csConfig.getBoolean(
        
CapacitySchedulerConfiguration.PREEMPTION_SELECT_INTRAQUEUE_CANDIDATES_BY_USER_PERCENT_GUARANTEE,
        
CapacitySchedulerConfiguration.DEFAULT_SELECT_INTRAQUEUE_CANDIDATES_BY_USER_PERCENT_GUARANTEE);
    if (selectIntraQueuePreemptCandidatesByPriority || 
selectIntraQueuePreemptCandidatesByUserPercentGuarantee) {
      candidatesSelectionPolicies.add(new IntraQueueCandidatesSelector(this));
    }
{code}

Then, in {{IntraQueueCandidatesSelector}} logic could be added to do either one 
or both intra-queue preemption policies. What do you think?
\\
\\
----
\\
- Could headroom check allow priority inversion?

{{PriorityIntraQueuePreemptionPolicy#getResourceDemandFromAppsPerQueue}}:
{code}
  // Can skip apps which are already crossing user-limit.
  // For this, Get the userlimit from scheduler and ensure that app is
  // not crossing userlimit here. Such apps can be skipped.
  Resource userHeadroom = leafQueue.getUserLimitHeadRoomPerApp(
      a1.getFiCaSchedulerApp(), context.getPartitionResource(partition),
      partition);
  if (Resources.lessThanOrEqual(rc,
      context.getPartitionResource(partition), userHeadroom,
      Resources.none())) {
    continue;
  }
{code}
I think this code will allow a priority inversion when a user has apps of 
different priorities. For example, in a situation like the following, {{App1}} 
from {{User1}} is already taking up all of the resources, so its headroom is 0. 
But, since {{App2}} is also from {{User1}}, the above code will never allow 
preemption to occur. Is that correct?

||Queue Name||User Name||App Name||App Priority||Used Resources||Pending 
Resources||
|QUEUE1|User1|App1|1|200|0|
|QUEUE1|User1|App2|10|0|50|


> [Umbrella] Capacity Scheduler Preemption Within a queue
> -------------------------------------------------------
>
>                 Key: YARN-4945
>                 URL: https://issues.apache.org/jira/browse/YARN-4945
>             Project: Hadoop YARN
>          Issue Type: Bug
>            Reporter: Wangda Tan
>         Attachments: Intra-Queue Preemption Use Cases.pdf, 
> IntraQueuepreemption-CapacityScheduler (Design).pdf, YARN-2009-wip.2.patch, 
> YARN-2009-wip.patch, YARN-2009-wip.v3.patch, YARN-2009.v0.patch
>
>
> This is umbrella ticket to track efforts of preemption within a queue to 
> support features like:
> YARN-2009. YARN-2113. YARN-4781.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to