[ 
https://issues.apache.org/jira/browse/MESOS-5741?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benjamin Mahler updated MESOS-5741:
-----------------------------------
    Labels: mesosphere multitenancy  (was: mesosphere)

> Quota + reserved resources is overly conservative
> -------------------------------------------------
>
>                 Key: MESOS-5741
>                 URL: https://issues.apache.org/jira/browse/MESOS-5741
>             Project: Mesos
>          Issue Type: Bug
>            Reporter: Neil Conway
>              Labels: mesosphere, multitenancy
>
> Consider this scenario:
> * Cluster has 10 CPUs total. 8 CPUs are reserved for role X, 2 CPUs are 
> unreserved.
> * Role X has a quota for 4 CPUs, but has only been allocated 2 CPUs (e.g., 
> because it has declined an offer for the other 2 CPUs). The CPUs it has been 
> allocated come from the reserved resources, so there are 6 reserved CPUs and 
> 2 unreserved CPUs available.
> * That means 6 CPUs should be offered as non-quota resources. However, which 
> 6 CPUs should be offered -- the 6 reserved CPUs, or 4 reserved CPUs and 2 
> unreserved CPUs?
> The current quota allocation logic appears to always offer the 6 reserved 
> CPUs. This is unfortunate, because frameworks in other roles won't be able to 
> use those resources. The reason for this behavior is:
> {code}
>   Resources remainingClusterResources = roleSorter->totalScalarQuantities();
>   foreachkey (const string& role, activeRoles) {
>     remainingClusterResources -= roleSorter->allocationScalarQuantities(role);
>   }
> {code}
> {{remainingClusterResources}} may have a {{role}} set (although dynamically 
> reserved resources will have been converted into effectively static 
> reservations).
> {code}
>   Resources unallocatedQuotaResources;
>   foreachpair (const string& name, const Quota& quota, quotas) {
>     // Compute the amount of quota that the role does not have allocated.
>     //
>     // NOTE: Revocable resources are excluded in `quotaRoleSorter`.
>     // NOTE: Only scalars are considered for quota.
>     Resources allocated = getQuotaRoleAllocatedResources(name);
>     const Resources required = quota.info.guarantee();
>     unallocatedQuotaResources += (required - allocated);
>   }
> {code}
> {{unallocatedQuotaResources}} will *not* have {{role}} set, per the 
> implementation of {{getQuotaRoleAllocatedResources}}.
> {code}
> remainingClusterResources -= unallocatedQuotaResources;
> {code}
> This means that *only* unreserved resources will be subtracted from 
> {{remainingClusterResources}}. At best this is sub-optimal, because it seems 
> better to lay-away resources for role X that are already reserved for X. I 
> don't *think* it will result in violating quota guarantees, though.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to