This is an automated email from the ASF dual-hosted git repository. mzhu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 73033130de7872c6f240b9b05dced039d7666138 Author: Meng Zhu <[email protected]> AuthorDate: Thu Aug 22 17:19:30 2019 -0700 Used boost `small_vector` in `Resources`. Master + previous patch: *HierarchicalAllocator_WithQuotaParam.LargeAndSmallQuota/2 Made 3500 allocations in 16.307044003secs Made 0 allocation in 14.948262599secs Master + previous patch + this patch: *HierarchicalAllocator_WithQuotaParam.LargeAndSmallQuota/2 Made 3500 allocations in 15.385276405secs Made 0 allocation in 13.718502414secs Review: https://reviews.apache.org/r/71357 --- include/mesos/resources.hpp | 20 ++++++++++++-------- include/mesos/v1/resources.hpp | 20 ++++++++++++-------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp index e5e87a0..b8aef28 100644 --- a/include/mesos/resources.hpp +++ b/include/mesos/resources.hpp @@ -23,6 +23,7 @@ #include <string> #include <vector> +#include <boost/container/small_vector.hpp> #include <boost/iterator/indirect_iterator.hpp> #include <google/protobuf/repeated_field.h> @@ -630,21 +631,19 @@ public: // iterators to prevent mutable access to the `Resource` objects. typedef boost::indirect_iterator< - std::vector<Resource_Unsafe>::const_iterator> + boost::container::small_vector_base<Resource_Unsafe>::const_iterator> const_iterator; const_iterator begin() { - return static_cast<const std::vector<Resource_Unsafe>&>( - resourcesNoMutationWithoutExclusiveOwnership) - .begin(); + const auto& self = *this; + return self.begin(); } const_iterator end() { - return static_cast<const std::vector<Resource_Unsafe>&>( - resourcesNoMutationWithoutExclusiveOwnership) - .end(); + const auto& self = *this; + return self.end(); } const_iterator begin() const @@ -754,7 +753,12 @@ private: // // TODO(mzhu): Consider using `boost::intrusive_ptr` for // possibly better performance. - std::vector<Resource_Unsafe> resourcesNoMutationWithoutExclusiveOwnership; + // + // We chose a size of 15 based on the fact that we have five first class + // resources (cpu, mem, disk, gpu and port). And 15 would allow one set of + // unreserved resources and two sets of reservations. + boost::container::small_vector<Resource_Unsafe, 15> + resourcesNoMutationWithoutExclusiveOwnership; }; diff --git a/include/mesos/v1/resources.hpp b/include/mesos/v1/resources.hpp index 6a9751a..3fbe7fb 100644 --- a/include/mesos/v1/resources.hpp +++ b/include/mesos/v1/resources.hpp @@ -23,6 +23,7 @@ #include <string> #include <vector> +#include <boost/container/small_vector.hpp> #include <boost/iterator/indirect_iterator.hpp> #include <google/protobuf/repeated_field.h> @@ -625,21 +626,19 @@ public: // iterators to prevent mutable access to the `Resource` objects. typedef boost::indirect_iterator< - std::vector<Resource_Unsafe>::const_iterator> + boost::container::small_vector_base<Resource_Unsafe>::const_iterator> const_iterator; const_iterator begin() { - return static_cast<const std::vector<Resource_Unsafe>&>( - resourcesNoMutationWithoutExclusiveOwnership) - .begin(); + const auto& self = *this; + return self.begin(); } const_iterator end() { - return static_cast<const std::vector<Resource_Unsafe>&>( - resourcesNoMutationWithoutExclusiveOwnership) - .end(); + const auto& self = *this; + return self.end(); } const_iterator begin() const @@ -749,7 +748,12 @@ private: // // TODO(mzhu): Consider using `boost::intrusive_ptr` for // possibly better performance. - std::vector<Resource_Unsafe> resourcesNoMutationWithoutExclusiveOwnership; + // + // We chose a size of 15 based on the fact that we have five first class + // resources (cpu, mem, disk, gpu and port). And 15 would allow one set of + // unreserved resources and two sets of reservations. + boost::container::small_vector<Resource_Unsafe, 15> + resourcesNoMutationWithoutExclusiveOwnership; };
