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

Zephyr Guo commented on HBASE-14490:
------------------------------------

{quote}
What does dumping information means?
{quote}
There are two stages(put and read).I mark "#CREATE#" and "#DSICARD#" in log.You 
can look test-v12-patch that I attached.test-v12-patch is my way that test 
BBBP.Your byteBufferPool use the same way to test.
"read create total bytes" means total of byte that was created in put stage.

15 seconds after put stage(first stage) done , I use following code to dump 
information.
{code}
#!/bin/bash

REPORT=./report.my

if [ ! -e $REPORT ]; then
        touch  $REPORT
fi

create_t=$(grep -oE '#CREATE#' $LOG_FILE | wc -l)
discard_t=$(grep -oE '#DISCARD#' $LOG_FILE | wc -l)

sed -ibk '1,$ d' $REPORT
rm ${REPORT}bk
echo "put create times:"$create_t >> $REPORT
echo "put discard times:"$discard_t >> $REPORT

cal_sum() {
        sum=0
        for i in $1; do
                sum=$(expr $sum + $i)
        done
}

cal_sum "$(grep -oE '#CREATE#\d+' $LOG_FILE | grep -oE '\d+')"
echo "put create total bytes:"$sum >> $REPORT
        
cal_sum "$(grep -oE '#DISCARD#\d+' $LOG_FILE | grep -oE '\d+')"
echo "put discard total bytes:"$sum >> $REPORT
{code}

15 seconds after read stage(second stage) done, I use following code to dump 
information.
{code}
#!/bin/bash

REPORT=./report.my

create_t=$(grep -oE 'put create times: *\d+' $REPORT | grep -oE '\d+')
discard_t=$(grep -oE 'put discard times: *\d+' $REPORT | grep -oE '\d+')

create_tot=$(grep -oE 'put create total bytes:\d+' $REPORT | grep -oE '\d+')
discard_tot=$(grep -oE 'put discard total bytes:\d+' $REPORT | grep -oE '\d+')

create_t=$(expr $(grep -oE '#CREATE#' $LOG_FILE | wc -l) - $create_t)
discard_t=$(expr $(grep -oE '#DISCARD#' $LOG_FILE | wc -l) - $discard_t)

cal_sum() {
        sum=0
        for i in $1; do
                sum=$(expr $sum + $i)
        done
}

echo "read create times:"$create_t >> $REPORT
echo "read discard times:"$discard_t >> $REPORT

cal_sum "$(grep -oE '#CREATE#\d+' $LOG_FILE | grep -oE '\d+')"
echo "read create total bytes:"$(expr $sum - $create_tot) >> $REPORT

cal_sum "$(grep -oE '#DISCARD#\d+' $LOG_FILE | grep -oE '\d+')"
echo "read discard total bytes:"$(expr $sum - $discard_tot) >> $REPORT
{code}

{quote}
Did you check the frequency of GC?
{quote}
I don't know how to test frequency of GC if the gap is small.



> [RpcServer] reuse request read buffer
> -------------------------------------
>
>                 Key: HBASE-14490
>                 URL: https://issues.apache.org/jira/browse/HBASE-14490
>             Project: HBase
>          Issue Type: Improvement
>          Components: IPC/RPC
>    Affects Versions: 2.0.0, 1.0.2
>            Reporter: Zephyr Guo
>            Assignee: Zephyr Guo
>              Labels: performance
>             Fix For: 2.0.0, 1.0.2
>
>         Attachments: ByteBufferPool.java, HBASE-14490-v1.patch, 
> HBASE-14490-v10.patch, HBASE-14490-v11.patch, HBASE-14490-v12.patch, 
> HBASE-14490-v2.patch, HBASE-14490-v3.patch, HBASE-14490-v4.patch, 
> HBASE-14490-v5.patch, HBASE-14490-v6.patch, HBASE-14490-v7.patch, 
> HBASE-14490-v8.patch, HBASE-14490-v9.patch, test-v12-patch
>
>
> Reuse buffer to read request.It's not necessary to every request free 
> buffer.The idea of optimization is to reduce the times that allocate 
> ByteBuffer.
> *Modification*
> 1. {{saslReadAndProcess}} ,{{processOneRpc}}, {{processUnwrappedData}}, 
> {{processConnectionHeader}} accept a ByteBuffer instead of byte[].They can 
> move {{ByteBuffer.position}} correctly when we have read the data.
> 2. {{processUnwrappedData}} no longer use any extra memory.
> 3. Maintaining a reused ByteBuffer in each {{Connection}}.
> a) Size is dynamic to fit specific client.
> b) If size deviate far from average size, we replace a new one.
> c) Using a SoftReference to reference the buffer.



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

Reply via email to