You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mz...@apache.org on 2019/08/23 21:51:47 UTC
[mesos] 03/04: Used boost `small_vector` in Resource Quantities and
Limits.
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 95201cbe4dc87eae2fde5754d16f5effbb6c1974
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Thu Aug 22 16:55:34 2019 -0700
Used boost `small_vector` in Resource Quantities and Limits.
Master + previous patch
*HierarchicalAllocator_WithQuotaParam.LargeAndSmallQuota/2
Made 3500 allocations in 16.831380548secs
Made 0 allocation in 15.102885644secs
Master + previous patch + this patch:
*HierarchicalAllocator_WithQuotaParam.LargeAndSmallQuota/2
Made 3500 allocations in 16.307044003secs
Made 0 allocation in 14.948262599secs
Review: https://reviews.apache.org/r/71355
---
include/mesos/resource_quantities.hpp | 33 ++++++++++++++++++++++-----------
src/common/resource_quantities.cpp | 34 ++++++++++------------------------
2 files changed, 32 insertions(+), 35 deletions(-)
diff --git a/include/mesos/resource_quantities.hpp b/include/mesos/resource_quantities.hpp
index cdb3427..8195d5e 100644
--- a/include/mesos/resource_quantities.hpp
+++ b/include/mesos/resource_quantities.hpp
@@ -19,7 +19,8 @@
#include <string>
#include <utility>
-#include <vector>
+
+#include <boost/container/small_vector.hpp>
#include <mesos/mesos.hpp>
@@ -118,10 +119,10 @@ public:
ResourceQuantities& operator=(const ResourceQuantities& that) = default;
ResourceQuantities& operator=(ResourceQuantities&& that) = default;
- typedef std::vector<std::pair<std::string, Value::Scalar>>::const_iterator
- iterator;
- typedef std::vector<std::pair<std::string, Value::Scalar>>::const_iterator
- const_iterator;
+ typedef boost::container::small_vector_base<
+ std::pair<std::string, Value::Scalar> >::const_iterator iterator;
+ typedef boost::container::small_vector_base<
+ std::pair<std::string, Value::Scalar> >::const_iterator const_iterator;
// NOTE: Non-`const` `iterator`, `begin()` and `end()` are __intentionally__
// defined with `const` semantics in order to prevent mutation during
@@ -159,7 +160,12 @@ private:
// List of name quantity pairs sorted by name.
// Arithmetic and comparison operations benefit from this sorting.
- std::vector<std::pair<std::string, Value::Scalar>> quantities;
+ //
+ // Pre-allocate space for first-class resources, plus some margins.
+ // This needs to be updated as introduce more first-class resources.
+ // [cpus, disk, gpus, mem, ports]
+ boost::container::small_vector<std::pair<std::string, Value::Scalar>, 7>
+ quantities;
};
@@ -212,10 +218,10 @@ public:
ResourceLimits& operator=(const ResourceLimits& that) = default;
ResourceLimits& operator=(ResourceLimits&& that) = default;
- typedef std::vector<std::pair<std::string, Value::Scalar>>::const_iterator
- iterator;
- typedef std::vector<std::pair<std::string, Value::Scalar>>::const_iterator
- const_iterator;
+ typedef boost::container::small_vector_base<
+ std::pair<std::string, Value::Scalar> >::const_iterator iterator;
+ typedef boost::container::small_vector_base<
+ std::pair<std::string, Value::Scalar> >::const_iterator const_iterator;
// NOTE: Non-`const` `iterator`, `begin()` and `end()` are __intentionally__
// defined with `const` semantics in order to prevent mutation during
@@ -258,7 +264,12 @@ private:
// List of name limit pairs sorted by name.
// Arithmetic and comparison operations benefit from this sorting.
- std::vector<std::pair<std::string, Value::Scalar>> limits;
+ //
+ // Pre-allocate space for first-class resources, plus some margins.
+ // This needs to be updated as introduce more first-class resources.
+ // [cpus, disk, gpus, mem, ports]
+ boost::container::small_vector<std::pair<std::string, Value::Scalar>, 7>
+ limits;
};
diff --git a/src/common/resource_quantities.cpp b/src/common/resource_quantities.cpp
index 7c7ede3..8f487fb 100644
--- a/src/common/resource_quantities.cpp
+++ b/src/common/resource_quantities.cpp
@@ -131,12 +131,7 @@ ResourceQuantities ResourceQuantities::fromResources(const Resources& resources)
}
-ResourceQuantities::ResourceQuantities()
-{
- // Pre-reserve space for first-class resources.
- // [cpus, disk, gpus, mem, ports]
- quantities.reserve(5u);
-}
+ResourceQuantities::ResourceQuantities() {}
ResourceQuantities::ResourceQuantities(
@@ -152,17 +147,15 @@ ResourceQuantities::ResourceQuantities(
ResourceQuantities::const_iterator ResourceQuantities::begin()
{
- return static_cast<const std::vector<std::pair<std::string, Value::Scalar>>&>(
- quantities)
- .begin();
+ const auto& self = *this;
+ return self.begin();
}
ResourceQuantities::const_iterator ResourceQuantities::end()
{
- return static_cast<const std::vector<std::pair<std::string, Value::Scalar>>&>(
- quantities)
- .end();
+ const auto& self = *this;
+ return self.end();
}
@@ -407,12 +400,7 @@ Try<ResourceLimits> ResourceLimits::fromString(const string& text)
}
-ResourceLimits::ResourceLimits()
-{
- // Pre-reserve space for first-class resources.
- // [cpus, disk, gpus, mem, ports]
- limits.reserve(5u);
-}
+ResourceLimits::ResourceLimits() {}
ResourceLimits::ResourceLimits(
@@ -428,17 +416,15 @@ ResourceLimits::ResourceLimits(
ResourceLimits::const_iterator ResourceLimits::begin()
{
- return static_cast<const std::vector<std::pair<std::string, Value::Scalar>>&>(
- limits)
- .begin();
+ const auto& self = *this;
+ return self.begin();
}
ResourceLimits::const_iterator ResourceLimits::end()
{
- return static_cast<const std::vector<std::pair<std::string, Value::Scalar>>&>(
- limits)
- .end();
+ const auto& self = *this;
+ return self.end();
}