YARN-8292 added code that prevents CS intra-queue preemption from preempting containers from an app unless all of the major resources used by the app are greater than the user limit for that user.
|<58GB, 58>||<30GB, 300>|
In this example, only used memory is above the user limit, not used vcores. So, intra-queue preemption will not occur.
YARN-8292 added the conservativeDRF flag to CapacitySchedulerPreemptionUtils#tryPreemptContainerAndDeductResToObtain. If conservativeDRF is false, containers will be preempted from apps in the example state. If true, containers will not be preempted.
This flag is hard-coded to false for Inter-queue (cross-queue) preemption and true for intra-queue (in-queue) preemption.
I propose that in some cases, we want intra-queue preemption to be more aggressive and preempt in the example case. To accommodate that, I propose the addition of a config property.
Also, we may want inter-queue (cross-queue) preemption to be more conservative, so I propose also making that a configuration property: