[ https://issues.apache.org/jira/browse/HBASE-14613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
stack updated HBASE-14613: -------------------------- Attachment: writes.png gc.png Here are some diagrams. 25 clients YCSB writing a single regionserver. I ran four test runs. The first and last were WITHOUT memstorechunkpool. The second and third were WITH memstorechunkpool enabled. I set it to be .25 the size of memstore and I set initial size to 0. The diagrams are GC and write rates (the fourth write run is missing from the diagram...) So, high-level, write rates are same with or without patch. No surprise. The CMS GCs are less when the pool is in place. No surprise given we are not recreating chunks but reusing them. What is surprising is that the new gen seems to be doing more collections. I'd have to dig in why.... (Guess would be that this pool is throwing off the ergonomic sizing of new vs old... would have to check). The pool prints stats and the stats look nice: {code} 2015-10-21 11:04:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=9,created chunk count=39,reused chunk count=3170,reuseRatio=98.78% 2015-10-21 11:09:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=8,created chunk count=39,reused chunk count=3322,reuseRatio=98.84% 2015-10-21 11:14:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=14,created chunk count=39,reused chunk count=3584,reuseRatio=98.92% 2015-10-21 11:19:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=30,created chunk count=39,reused chunk count=3829,reuseRatio=98.99% 2015-10-21 11:24:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=37,created chunk count=39,reused chunk count=4092,reuseRatio=99.06% 2015-10-21 11:29:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=12,created chunk count=39,reused chunk count=4352,reuseRatio=99.11% 2015-10-21 11:34:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=14,created chunk count=39,reused chunk count=4609,reuseRatio=99.16% 2015-10-21 11:39:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=20,created chunk count=39,reused chunk count=4865,reuseRatio=99.20% 2015-10-21 11:44:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=17,created chunk count=39,reused chunk count=5128,reuseRatio=99.25% 2015-10-21 11:49:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=20,created chunk count=39,reused chunk count=5377,reuseRatio=99.28% 2015-10-21 11:54:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=17,created chunk count=39,reused chunk count=5630,reuseRatio=99.31% 2015-10-21 11:59:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=23,created chunk count=39,reused chunk count=5871,reuseRatio=99.34% 2015-10-21 12:04:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=22,created chunk count=39,reused chunk count=6122,reuseRatio=99.37% 2015-10-21 12:09:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=36,created chunk count=39,reused chunk count=6216,reuseRatio=99.38% 2015-10-21 12:14:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=36,created chunk count=39,reused chunk count=6216,reuseRatio=99.38% 2015-10-21 12:19:07,026 DEBUG [StoreOpener-590f2ef9a43c9fe507f0f1fb415ca50e-1-MemStoreChunkPool Statistics] regionserver.MemStoreChunkPool: Stats: current pool size=36,created chunk count=39,reused chunk count=6216,reuseRatio=99.38% {code} The reuse is impressive. So, the pool could be good. I'd change it so the stats ran out of an executor rather than as a dedicated thread as a Chore. We'd have to figure the sizing too. The initial sizing can be zero. Thats fine. Let it ramp up even if it means chunks have to traverse survivor space a few times.... (would be sweet if could allocated direct on old gen but that seems hard to do reliably -- could spend some more time digging in on this). What for the max size? Currently it is a proportion of memstore size. Could study running machine to see how many chunks are outstanding when a write load going on. Could then set the pool to be this size. But, we need to have a pool that can grow and shrink. There is the ergonomic resize of the memstore that will resize memstore if we are doing many more writes than reads. The pool should adjust accordingly. The pool should also adjust if it has not been accessed in a long time. We do not want the case where we have all memstores holding on to big pools because we just underwent a furious write load but now it has abated... > Remove MemStoreChunkPool? > ------------------------- > > Key: HBASE-14613 > URL: https://issues.apache.org/jira/browse/HBASE-14613 > Project: HBase > Issue Type: Brainstorming > Reporter: Lars Hofhansl > Priority: Minor > Attachments: 14613-0.98.txt, gc.png, writes.png > > > I just stumbled across MemStoreChunkPool. The idea behind is to reuse chunks > of allocations rather than letting the GC handle this. > Now, it's off by default, and it seems to me to be of dubious value. I'd > recommend just removing it. -- This message was sent by Atlassian JIRA (v6.3.4#6332)