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

Yu Li commented on HBASE-17747:
-------------------------------

bq. you can run faster than the queue can be cleared and so you can OOME. Might 
want to make it configurable then but default it on.
If in embedded mode we cannot OOME, I don't think we can OOME in distributed 
mode, to be frank. But yes, make it configurable is more flexible, let me open 
another JIRA to do this. Thanks.

bq. There is no 'shrink' operation for ConcurrentHashMap, so if you put 1M 
objects into the map and then remove 0.99M, the table size will still be more 
than 1M.
So what's the harm boss? If the memory is not enough, soft reference will get 
cleared thus map cleared, or else if the memory is enough, seems to be no harm 
to let it be? If we discuss this in theory, I think javadoc description is 
strong enough, and if we discuss in practice, we already made the test against 
both embedded and distributed mode, right?

bq. Give it a try. We need to confirm that G1 can work well.
Sorry but I'm not that familiar with G1 tuning, so I'm not sure what kind of 
testing against G1 could confirm G1 could work well. And I don't think this is 
GC algorithm related, I mean, what part might have issue in G1 GC but not in 
CMS GC?

Correct me if I'm wrong, but IMHO if there's no problem in theory, we could let 
the commit in, and fix the issue if any emerged later, it seems to be the way 
we've been following. So I propose to follow stack's suggestion: make it 
configurable for {{IdReadWriteLock}} and use soft reference by default. Sounds 
good to you [~Apache9]? If we get a consensus, I will open a new JIRA and close 
this one. Thanks.

btw, allow me to emphasize the fact that even in distributed mode, we have got 
a 5%~7% performance enhancement with soft reference, with 256 clients querying 
one RS which is not a special case. So there's benefit in "real world" if you 
take embedded mode as some informal case.

> Support both weak and soft object pool
> --------------------------------------
>
>                 Key: HBASE-17747
>                 URL: https://issues.apache.org/jira/browse/HBASE-17747
>             Project: HBase
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Yu Li
>            Assignee: Yu Li
>             Fix For: 2.0
>
>         Attachments: HBASE-17747.patch, HBASE-17747.v2.patch, 
> HBASE-17747.v3.patch
>
>
> During YCSB testing on embedded mode after HBASE-17744, we found that under 
> high read load GC is quite severe even with offheap L2 cache. After some 
> investigation, we found it's caused by using weak reference in 
> {{IdReadWriteLock}}. In embedded mode the read is so quick that the lock 
> might already get promoted to the old generation when the weak reference is 
> cleared, which causes dirty card table (old reference get removed and new 
> lock object set into {{referenceCache}}, see {{WeakObjectPool#get}}) thus 
> slowing YGC. In distributed mode there'll also be more lock object created 
> with weak reference than soft reference that slowing down the processing.
> So we proposed to use soft reference for this {{IdReadWriteLock}} used in 
> cache, which won't get cleared until JVM memory is not enough, and could 
> resolve the issue mentioned above. What's more, we propose to extend the 
> {{WeakObjectPool}} to be more generate to support both weak and soft 
> reference.
> Note that the GC issue only emerges under embedded mode with DirectOperator, 
> in which case all costs on the wire is removed thus produces extremely high 
> concurrency.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to