> On Aug. 1, 2018, 12:42 a.m., Benjamin Mahler wrote:
> > A couple of comments on the benchmark information before looking at the 
> > code, these probably belong on the previous review, but since the numbers 
> > are only shown in this one I'll leave these here:
> > 
> > * Can we compare percentiles (e.g. min, q1, q3, max) across the approaches 
> > instead of averages? i.e. how much better does min,q1,q3,max get? Averages 
> > are generally a poor fit for performance data because it doesn't tell us 
> > about the distribution (e.g. if we make p90 3x worse for a 10% benefit to 
> > average that's not ok), we can include p50 if we're interested in the 
> > half-way point.
> > * Can you include the cpu model of the box you ran this on? I'm interested 
> > in how many physical/virtual cores there are.
> > * Can you also include the regular state query benchmark measurements to 
> > make sure we're not regressing too much on the single request case? (no 
> > need to get the non-optimized build numbers).
> > * Some of the numbers don't look very good, e.g. Before `[min: 
> > 1.578161651secs, max: 8.789315237secs]` After: `[4.047655443secs, 
> > 6.00752698secs]`. Can we see the distribution here? Do you understand 
> > exactly why the lowest measurement is so much higher? Looking at the 
> > non-optimized numbers, the minimum didn't get worse? Is the data highly 
> > variable between runs?
> > * Can you also include perf data for the optimized run? 
> > http://mesos.apache.org/documentation/latest/performance-profiling/
> 
> Alexander Rukletsov wrote:
>     * Sure. Updated https://reviews.apache.org/r/68131/ (see also preparatory 
> work in https://reviews.apache.org/r/68224/ and 
> https://reviews.apache.org/r/68225/).
>     * Done.
>     * Will do, stay tuned.
>     * This is fine and expected. Due to the batching there is an extra defer 
> in the master queue, which affects the response time of the first request. 
> Nothing to worry about, IMO.
>     * Will do, stay tuned.

> This is fine and expected. Due to the batching there is an extra defer in the 
> master queue, which affects the response time of the first request. Nothing 
> to worry about, IMO.

Looking at the numbers for the single request benchmark case (thanks for 
posting those), the batching overhead only seems to be 0.15% or 150ms (10.946s 
-> 11.096s). This means that it's not just the extra defer that's causing an 
85% or 1.5 second slowdown (1.512s -> 2.820s) in the minimum request processing 
time. It must be something else, like the request is now ending up in a batch 
(probably with more than 4 requests so that we're entering hyperthreading 
territory). Let's make sure we understand why it's happening.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/68132/#review206711
-----------------------------------------------------------


On Aug. 7, 2018, 12:11 p.m., Alexander Rukletsov wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/68132/
> -----------------------------------------------------------
> 
> (Updated Aug. 7, 2018, 12:11 p.m.)
> 
> 
> Review request for mesos, Benno Evers and Benjamin Mahler.
> 
> 
> Bugs: MESOS-9122
>     https://issues.apache.org/jira/browse/MESOS-9122
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> With this patch handlers for '/state' requests are not scheduled
> directly after authorization, but are accumulated and then scheduled
> for later parallel processing.
> 
> This approach allows, if there are N '/state' requests in the Master's
> mailbox and T is the request response time, to block the Master actor
> only once for time O(T) instead of blocking it for time N*T prior to
> this patch.
> 
> This batching technique reduces both the time Master is spending
> answering '/state' requests and the average request response time
> in presence of multiple requests in the Master's mailbox. However,
> for seldom '/state' requests that don't accumulate in the Master's
> mailbox, the response time might increase due to an added trip
> through the mailbox.
> 
> The change preserves the read-your-writes consistency model.
> 
> 
> Diffs
> -----
> 
>   src/master/http.cpp d43fbd689598612ec5946b46e2fa5e7f5e22cfa8 
>   src/master/master.hpp 209b998db8d2bad7a3812df44f0939458f48eb11 
> 
> 
> Diff: https://reviews.apache.org/r/68132/diff/2/
> 
> 
> Testing
> -------
> 
> `make check` on Mac OS 10.13.5 and various Linux distros.
> 
> Run `MasterStateQueryLoad_BENCHMARK_Test.v0State` benchmark and 
> `MasterStateQuery_BENCHMARK_Test.GetState`, see below.
> 
> **Setup**
> Processor: Intel i7-4980HQ 2.8 GHz with 6 MB on-chip L3 cache and 128 MB L4 
> cache (Crystalwell)
> Total Number of Cores: 4
> Total Number of Cores: 8
> L2 Cache (per Core): 256 KB  
> 
> Compiler: Apple LLVM version 9.1.0 (clang-902.0.39.2)
> Optimization: -O2
> 
> **MasterStateQuery_BENCHMARK_Test.GetState, v0 '/state' response time**
> 
> setup                                                    | no batching | 
> batching
> ---------------------------------------------------------|-------------|----------
>  1000 agents,  10000 running, and  10000 completed tasks | 146.496ms   | 
> 158.319ms
> 10000 agents, 100000 running, and 100000 completed tasks | 1.795s      | 
> 1.899s
> 20000 agents, 200000 running, and 200000 completed tasks | 3.742s      | 
> 4.427s
> 40000 agents, 400000 running, and 400000 completed tasks | 10.946s     | 
> 11.096s
> 
> **MasterStateQueryLoad_BENCHMARK_Test.v0State, setup 1**
> Test setup 1: 100 agents with a total of 10000 running tasks and 10000 
> completed tasks; 50 '/state' and '/flags' requests will be sent in parallel 
> with 200ms interval, i.e., total **50 measurements** per endpoint.
> 
> /flags | no batching | batching       /state | no batching | batching
> -------------------------------   *   --------------------------------
>    min |  1.598ms    | 1.475ms           min | 100.627ms   | 105.383ms
>    p25 |  2.370ms    | 2.452ms           p25 | 102.206ms   | 107.184ms
>    p50 |  2.520ms    | 2.562ms           p50 | 103.213ms   | 108.468ms
>    p75 |  2.623ms    | 2.665ms           p75 | 104.100ms   | 109.808ms
>    p90 |  2.803ms    | 2.731ms           p90 | 106.079ms   | 111.043ms
>    max | 84.957ms    | 2.934ms           max | 153.438ms   | 154.636ms
> 
> **MasterStateQueryLoad_BENCHMARK_Test.v0State, setup 2**
> Test setup 2: 1000 agents with a total of 100000 running tasks and 100000 
> completed tasks; 10 '/state' and '/flags' requests will be sent in parallel 
> with 200ms interval, i.e., total **10 measurements** per endpoint.
> 
> /flags | no batching | batching       /state | no batching | batching
> --------------------------------  *   -------------------------------
>    min | 2.309ms     |   1.579ms         min | 1.512s      | 2.820s
>    p25 | 1.547s      | 373.609ms         p25 | 3.262s      | 3.588s
>    p50 | 3.189s      | 831.261ms         p50 | 5.052s      | 4.253s
>    p75 | 5.346s      |   2.215s          p75 | 6.846s      | 4.510s
>    p90 | 5.854s      |   2.351s          p90 | 7.883s      | 4.705s
>    max | 7.237s      |   2.444s          max | 8.517s      | 4.934s
> 
> 
> Thanks,
> 
> Alexander Rukletsov
> 
>

Reply via email to