[ 
https://issues.apache.org/jira/browse/HADOOP-10286?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Erik Krogen updated HADOOP-10286:
---------------------------------
    Status: Patch Available  (was: Open)


Since it looks like this has been abandoned, I'm going to go ahead and take it 
up ([~chrilisf] - please let me know if you have any qualms with this). I'm 
attaching a v001 patch which extends the original work:
* Adds the ability to specify different client user names to use, and how many 
threads to use for each of those user names. This allows us to emulate, for 
example, a heavy user's impact on many lighter users.
* Wraps the proxy invocation in a RetryInvocationHandler so that it is possible 
to enable IPC backoff and not have the benchmark immediately fail when a 
backoff request is received.
* Adds percentile latency information via 
[HdrHistogram|https://github.com/HdrHistogram/HdrHistogram].

I'm hoping to use something similar to this to demonstrate the viability of 
approaches similar to those proposed in HADOOP-15016. For now, I was able to 
use this benchmark to demonstrate the efficacy of IPC backoff in combination 
with {{FairCallQueue}}:

{code}
> for backoff in false true; do echo "Backoff: ${backoff}"; 
> $HADOOP_HOME/bin/hadoop org.apache.hadoop.ipc.RPCCallBenchmark 
> -Dipc.9000.callqueue.impl=org.apache.hadoop.ipc.FairCallQueue 
> -Dipc.9000.backoff.enable=${backoff} -p 9000 -r 4 -c 10 -s 5 -e protobuf -t 
> 120 -u c1,c2,c3,c4,c5,c6,c7,c8,c9,cBig -T 50,50,50,50,50,50,50,50,50,1000 
> 2>&1 | grep "Client #"; done
Backoff: false
Client #0 (c1)                :    5628.09 calls/sec       7.93ms P50 Latency   
   10.64ms P90 Latency      52.95ms P99 Latency
Client #1 (c2)                :    5639.62 calls/sec       8.11ms P50 Latency   
   10.94ms P90 Latency      59.24ms P99 Latency
Client #2 (c3)                :    5616.79 calls/sec       8.11ms P50 Latency   
   10.92ms P90 Latency      56.92ms P99 Latency
Client #3 (c4)                :    5626.38 calls/sec       7.95ms P50 Latency   
   10.63ms P90 Latency      42.66ms P99 Latency
Client #4 (c5)                :    5624.99 calls/sec       8.69ms P50 Latency   
   15.84ms P90 Latency      68.42ms P99 Latency
Client #5 (c6)                :    5665.82 calls/sec       8.12ms P50 Latency   
   10.87ms P90 Latency      23.13ms P99 Latency
Client #6 (c7)                :    5653.36 calls/sec       8.14ms P50 Latency   
   10.95ms P90 Latency      62.13ms P99 Latency
Client #7 (c8)                :    5611.25 calls/sec       8.12ms P50 Latency   
   10.90ms P90 Latency      54.53ms P99 Latency
Client #8 (c9)                :    5616.34 calls/sec       8.14ms P50 Latency   
   10.94ms P90 Latency      56.92ms P99 Latency
Client #9 (cBig)              :   99206.13 calls/sec       8.15ms P50 Latency   
   10.90ms P90 Latency      56.79ms P99 Latency
Backoff: true
Client #0 (c1)                :   14072.36 calls/sec       1.37ms P50 Latency   
    2.88ms P90 Latency       9.91ms P99 Latency
Client #1 (c2)                :   14087.66 calls/sec       1.36ms P50 Latency   
    2.70ms P90 Latency       9.86ms P99 Latency
Client #2 (c3)                :   14152.81 calls/sec       1.38ms P50 Latency   
    3.50ms P90 Latency      10.02ms P99 Latency
Client #3 (c4)                :   13889.88 calls/sec       1.37ms P50 Latency   
    2.84ms P90 Latency      10.02ms P99 Latency
Client #4 (c5)                :   14282.52 calls/sec       1.37ms P50 Latency   
    2.80ms P90 Latency       9.92ms P99 Latency
Client #5 (c6)                :   14041.97 calls/sec       1.36ms P50 Latency   
    2.72ms P90 Latency       9.85ms P99 Latency
Client #6 (c7)                :   14271.91 calls/sec       1.38ms P50 Latency   
    3.81ms P90 Latency      10.08ms P99 Latency
Client #7 (c8)                :   14073.15 calls/sec       1.37ms P50 Latency   
    2.81ms P90 Latency       9.90ms P99 Latency
Client #8 (c9)                :   13917.20 calls/sec       1.37ms P50 Latency   
    2.80ms P90 Latency      10.02ms P99 Latency
Client #9 (cBig)              :   38200.69 calls/sec       4.82ms P50 Latency   
    9.82ms P90 Latency     878.71ms P99 Latency
{code}

One currently outstanding issue is that HdrHistogram isn't copied into the 
hadoop-dist tarball so you need to manually add it to the classpath to be able 
to run {{RPCCallBenchmark}}. Since it is test-only, I don't think it makes 
sense for it to end up in the {{share/lib/hadoop/common}} directory, and I'm 
not really sure else it would belong, so I think the current approach might be 
fine. Open to suggestions here, though.

> Allow RPCCallBenchmark to benchmark calls by different users
> ------------------------------------------------------------
>
>                 Key: HADOOP-10286
>                 URL: https://issues.apache.org/jira/browse/HADOOP-10286
>             Project: Hadoop Common
>          Issue Type: Sub-task
>            Reporter: Chris Li
>            Assignee: Erik Krogen
>            Priority: Minor
>         Attachments: HADOOP-10286.001.patch, HADOOP-10286.patch
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to