> On Oct. 21, 2016, 8:23 p.m., Benjamin Mahler wrote: > > Ship It! > > Guangya Liu wrote: > Do you have any comments on the test result? Shall we use a small range > to reduce the time of this? The `contains` for a boundry case is using 38+s. > > ``` > [ RUN ] > ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/5 > Took 38.23282secs to perform 1 'superset.contains(subset)' operations on > superset resources ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > contains subset resources ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > [ OK ] > ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/5 (38279 ms) > ``` > > Checked the API of `operator<=` for `Value::Ranges`, and found it is > already doing some optimization for this: return false if got one non matched > range, but as my case is a boundry case, so the elapse time is a bit long. > > ``` > bool operator<=(const Value::Ranges& _left, const Value::Ranges& _right) > { > Value::Ranges left; > coalesce(&left, {_left}); > > Value::Ranges right; > coalesce(&right, {_right}); > > for (int i = 0; i < left.range_size(); i++) { > // Make sure this range is a subset of a range in right. > bool matched = false; > for (int j = 0; j < right.range_size(); j++) { > if (left.range(i).begin() >= right.range(j).begin() && > left.range(i).end() <= right.range(j).end()) { > matched = true; > break; > } > } > if (!matched) { > return false; > } > } > > return true; > } > ```
How about the following? ``` bool operator<=(const Value::Ranges& _left, const Value::Ranges& _right) { Value::Ranges left; coalesce(&left, {_left}); Value::Ranges right; coalesce(&right, {_right}); IntervalSet<uint64_t> leftSet = rangesToIntervalSet(left); IntervalSet<uint64_t> rightSet = rangesToIntervalSet(right); return rightSet.contains(leftSet); } ``` - Benjamin ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/50551/#review153595 ----------------------------------------------------------- On Oct. 21, 2016, 11:27 p.m., Guangya Liu wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/50551/ > ----------------------------------------------------------- > > (Updated Oct. 21, 2016, 11:27 p.m.) > > > Review request for mesos, Benjamin Mahler, Klaus Ma, and Jiang Yan Xu. > > > Bugs: MESOS-5700 > https://issues.apache.org/jira/browse/MESOS-5700 > > > Repository: mesos > > > Description > ------- > > Added benchmark test for `Resources::contains`. > > > Diffs > ----- > > src/tests/resources_tests.cpp 27c52e72764fc6db0a510c367a9659596e723504 > > Diff: https://reviews.apache.org/r/50551/diff/ > > > Testing > ------- > > make > make check > > ``` > ./bin/mesos-tests.sh --benchmark > --gtest_filter="*Resources_Contains_BENCHMARK_Test.Contains/*" > [==========] Running 9 tests from 1 test case. > [----------] Global test environment set-up. > [----------] 9 tests from ResourcesContains/Resources_Contains_BENCHMARK_Test > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/0 > Took 16723us to perform 5000 'superset.contains(subset)' operations on > superset resources cpus(*):1; gpus(*):1; mem(*):128; disk(*):256 contains > subset resources cpus(*):1; mem(*):128 > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/0 > (17 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/1 > Took 9675us to perform 5000 'superset.contains(subset)' operations on > superset resources cpus(*):1; mem(*):128 contains subset resources cpus(*):1; > gpus(*):1; mem(*):128; disk(*):256 > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/1 > (9 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/2 > Took 10428us to perform 5000 'superset.contains(subset)' operations on > superset resources cpus(*):1; mem(*):128 contains subset resources cpus(*):1; > mem(*):128 > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/2 > (11 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/3 > Took 2.016892secs to perform 100 'superset.contains(subset)' operations on > superset resources ports(*):[1-64000] contains subset resources > ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/3 > (2041 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/4 > Took 1.322314secs to perform 50 'superset.contains(subset)' operations on > superset resources ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > contains subset resources ports(*):[1-64000] > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/4 > (1343 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/5 > Took 38.23282secs to perform 1 'superset.contains(subset)' operations on > superset resources ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > contains subset resources ports(*):[1-1, 3-3, 5-5, 7-7, 9-9, 11-11, 13-13... > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/5 > (38279 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/6 > Took 2.087117secs to perform 100 'superset.contains(subset)' operations on > superset resources cpus(*):1; gpus(*):1; mem(*):128; disk(*):256; ... > contains subset resources cpus(*):1; mem(*):128; ports(*):[1-1, 3-3, 5-5,... > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/6 > (2111 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/7 > Took 327807us to perform 50 'superset.contains(subset)' operations on > superset resources cpus(*):1; mem(*):128; ports(*):[1-1, 3-3, 5-5,... > contains subset resources cpus(*):1; gpus(*):1; mem(*):128; disk(*):256; ... > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/7 > (351 ms) > [ RUN ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/8 > Took 38.7907secs to perform 1 'superset.contains(subset)' operations on > superset resources cpus(*):1; mem(*):128; ports(*):[1-1, 3-3, 5-5,... > contains subset resources cpus(*):1; mem(*):128; ports(*):[1-1, 3-3, 5-5,... > [ OK ] ResourcesContains/Resources_Contains_BENCHMARK_Test.Contains/8 > (38839 ms) > [----------] 9 tests from ResourcesContains/Resources_Contains_BENCHMARK_Test > (83002 ms total) > > [----------] Global test environment tear-down > [==========] 9 tests from 1 test case ran. (83017 ms total) > [ PASSED ] 9 tests. > ``` > > > Thanks, > > Guangya Liu > >