----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/68490/ -----------------------------------------------------------
(Updated Sept. 14, 2018, 3:11 p.m.) Review request for mesos, Benjamin Bannier, Benjamin Mahler, and Gastón Kleiman. Bugs: MESOS-6765 https://issues.apache.org/jira/browse/MESOS-6765 Repository: mesos Description ------- This patch lets `class Resources` only store shared pointers to the underlying resource objects, so that read-only filter operations such as `reserved()`, `unreserved()` and etc. can avoid making copies of the whole resource objects. Instead, only shared pointers are copied. In write operations, we check if there are more than one references to the resource object. If so, a copy is made for safe mutation without affecting owners. To maintain the usage abstraction that `class Resources` still holds resource objects, we utilize `boost::indirect_iterator` iterator adapter to deference the shared pointers as we iterate. Diffs (updated) ----- include/mesos/resources.hpp 6f81b14f8bc090a144eeae8f15639c370366166d include/mesos/v1/resources.hpp 09110530da16678abf6bf6b308906dd8ccc8180a src/common/resources.cpp 3e63cdedb9261970dbeb9bb9f97eed65819f68a7 src/v1/resources.cpp 3683a331e0859cd6f2ad061db6ba67112ecfcb0d Diff: https://reviews.apache.org/r/68490/diff/5/ Changes: https://reviews.apache.org/r/68490/diff/4-5/ Testing ------- make check Benchmarked on a Ubuntu box using clang -O2 optimized build with an i5 processor, frequency fixed at 1.6GHz. ## Resources benchmarks (Measure geo-mean of various operations): Normalized Geomean latency Master Copy-on-write Arithmetic 1 1.09 Filter 1 0.28 Contains 1 0.27 Parse 1 1.01 ## Sample allocator benchmark (Measure first allocation latency): HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/1 (1k agents, 50 frameworks): Master 1 Copy-on-write 0.72 HierarchicalAllocator_BENCHMARK_Test.ResourceLabels/1 (1k agents, 50 frameworks): Master 1 Copy-on-write 0.72 ## Sorter benchmark ### BENCHMARK_FullSort Master: Using 30000 agents and 500 clients Added 500 clients in 2.261373ms Added 30000 agents in 322.252441ms Added allocations for 30000 agents in 823.631826ms Full sort of 500 clients took 8662ns No-op sort of 500 clients took 809ns Removed allocations for 30000 agents in 8.482659084secs Removed 30000 agents in 417.988004ms Removed 500 clients in 17.855575ms Copy-on-write: Using 30000 agents and 500 clients (**normalized to the master above**) Added 500 clients in 2.464647ms (**1.09**) Added 30000 agents in 205.071423ms (**0.64**) Added allocations for 30000 agents in 156.340883ms (**0.19**) Full sort of 500 clients took 1007ns (**0.12**) No-op sort of 500 clients took 204ns (**0.02**) Removed allocations for 30000 agents in 7.215175016secs (**0.85**) Removed 30000 agents in 304.998116ms (**0.73**) Removed 500 clients in 3.195079ms (**0.18**) ### BENCHMARK_HierarchyFullSort Master: Added 1056 clients in 36.571505ms Added 10000 agents in 114.165111ms Added allocations for 10000 agents in 569.144686ms Full sort of 1056 clients took 43485ns No-op sort of 1056 clients took 676ns Removed allocations for 10000 agents in 5.656517904secs Removed 10000 agents in 153.016733ms Removed 1056 clients in 7.169549ms Copy-on-write: Added 1056 clients in 36.468822ms (**0.997**) Added 10000 agents in 67.733365ms (**0.59**) Added allocations for 10000 agents in 99.695723ms (**0.175**) Full sort of 1056 clients took 29729ns (**0.68**) No-op sort of 1056 clients took 704ns (**1.04**) Removed allocations for 10000 agents in 4.824389788secs (**0.85**) Removed 10000 agents in 101.319295ms (**0.66**) Removed 1056 clients in 2.480967ms (**0.35**) Thanks, Meng Zhu