> 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;
>     }
>     ```
> 
> Benjamin Mahler wrote:
>     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);
>     }
>     ```

I'll decrease the size of the port ranges until we can figure out how to 
improve the performance.


- 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
> 
>

Reply via email to