[ 
https://issues.apache.org/jira/browse/HBASE-15536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15219295#comment-15219295
 ] 

stack commented on HBASE-15536:
-------------------------------

Running this compare from HBASE-10156

{code}
$ for i in 1 3 5 10 25 50 100 200; do for j in 1; do perf stat ./bin/hbase 
--config /home/stack/conf_hbase 
org.apache.hadoop.hbase.wal.WALPerformanceEvaluation -threads $i   -iterations 
1000000 -keySize 50 -valueSize 100  &> "/tmp/nopatch2${i}.${j}.txt"; done; done
{code}

Here is table of completion times (I mangled recording 200 threads w/ no patch):

||Threads||Defaul||Async||Diff||
|1|837|228|3.7x|
|3|647|274|2.4x|
|5|609|310|2x|
|10|916|376|2.5x|
|25|1177|556|2.1x|
|50|1463|828|1.8x|
|100|1902|1382|1.4x|
|200|-|2445|-|

Comparing perf stat for ten threads, you can see the async is doing less work. 
Here is the default WAL provider stat output:
{code}
4016  Performance counter stats for './hbase/bin/hbase --config 
/home/stack/conf_hbase org.apache.hadoop.hbase.wal.WALPerformanceEvaluation 
-threads 10 -iterations 1000000 -keySize 50 -valueSize 100':
4017
4018     3473402.908284 task-clock (msec)         #    3.791 CPUs utilized
4019         79,614,165 context-switches          #    0.023 M/sec
4020          4,927,049 cpu-migrations            #    0.001 M/sec
4021          1,390,882 page-faults               #    0.400 K/sec
4022  7,457,646,572,542 cycles                    #    2.147 GHz
4023    <not supported> stalled-cycles-frontend
4024    <not supported> stalled-cycles-backend
4025  2,088,450,796,192 instructions              #    0.28  insns per cycle
4026    340,979,920,761 branches                  #   98.169 M/sec
4027      5,330,989,389 branch-misses             #    1.56% of all branches
4028
4029      916.241768049 seconds time elapsed
{code}

Here is running with async enabled:
{code}
1050  Performance counter stats for './hbase/bin/hbase --config 
/home/stack/conf_hbase org.apache.hadoop.hbase.wal.WALPerformanceEvaluation 
-threads 10 -iterations 1000000 -keySize 50 -valueSize 100':
1051
1052     2624320.161261 task-clock (msec)         #    6.964 CPUs utilized
1053         13,097,786 context-switches          #    0.005 M/sec
1054            202,869 cpu-migrations            #    0.077 K/sec
1055            968,708 page-faults               #    0.369 K/sec
1056  6,814,056,657,994 cycles                    #    2.597 GHz
1057    <not supported> stalled-cycles-frontend
1058    <not supported> stalled-cycles-backend
1059  1,577,447,250,139 instructions              #    0.23  insns per cycle
1060    244,194,003,573 branches                  #   93.050 M/sec
1061      2,927,181,625 branch-misses             #    1.20% of all branches
1062
1063      376.825234068 seconds time elapsed
{code}

80M context-switches vs 13M, 7.5B cycles vs 6.8B. There is loads of work to be 
done in here -- our numbers for ins per cycle are pretty abysmal -- but seems 
like clear benefit to running async provider though it doesn't look much when 
you look at macro-level with YCSB load with 50 threads.

> Make AsyncFSWAL as our default WAL
> ----------------------------------
>
>                 Key: HBASE-15536
>                 URL: https://issues.apache.org/jira/browse/HBASE-15536
>             Project: HBase
>          Issue Type: Sub-task
>            Reporter: Duo Zhang
>
> As it should be predicated on passing basic cluster ITBLL



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to