You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Benjamin Mahler (JIRA)" <ji...@apache.org> on 2016/12/09 02:07:58 UTC

[jira] [Updated] (MESOS-6765) Consider making the Resources wrapper "copy-on-write" to improve performance.

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

Benjamin Mahler updated MESOS-6765:
-----------------------------------
    Labels: performance  (was: )

> Consider making the Resources wrapper "copy-on-write" to improve performance.
> -----------------------------------------------------------------------------
>
>                 Key: MESOS-6765
>                 URL: https://issues.apache.org/jira/browse/MESOS-6765
>             Project: Mesos
>          Issue Type: Improvement
>            Reporter: Benjamin Mahler
>              Labels: performance
>
> Resources currently directly stores the underlying resource objects:
> {code}
> class Resources
> {
>   ...
>   std::vector<Resource_> resources;
> };
> {code}
> What this means is that copying of Resources (which occurs frequently) is expensive since copying a {{Resource}} object is relatively heavy-weight.
> One strategy, in MESOS-4770, is to avoid protobuf in favor of C++ types (i.e. replace {{Value::Scalar}}, {{Value::Set}}, and {{Value::Ranges}} with C++ equivalents). However, metadata like reservations, disk info, etc, is still fairly expensive to copy even if avoiding protobufs.
> An approach to reduce copying would be to only copy the resource objects upon writing, when there are multiple references to the resource object. If there is a single reference to the resource object we could safely mutate it without copying. E.g.
> {code}
> class Resource
> {
>   ...
>   std::vector<shared_ptr<Resource_>> resources;
> };
> // Mutation function:
> void Resources::mutate(size_t index)
> {
>   // Copy if there are multiple references.
>   if (resources[i].use_count() > 1) {
>     resources[i] = copy(resources[i]);
>   }
>   // Mutate safely.
>   resources[i].some_mutation();
> }
> {code}
> On the other hand, this introduces a additional level of pointer chasing. So we would need to weigh the approaches.



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