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

stack commented on HBASE-20236:
-------------------------------

Hmm... No. Semaphore is slightly faster (3-4%) even though it has this 
crazy-looking locking profile:
{code}
   1 Started [lock] profiling
   2 --- Execution profile ---
   3 Total samples:         2388092
   4 Skipped:               608 (0.03%)
   5
   6 Frame buffer usage:    0.2034%
   7
   8 Total: 730190050914 (97.47%)  samples: 2367078
   9   [ 0] java.util.concurrent.Semaphore$NonfairSync
  10   [ 1] sun.misc.Unsafe.park
  11   [ 2] java.util.concurrent.locks.LockSupport.park
  12   [ 3] 
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt
  13   [ 4] 
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly
  14   [ 5] 
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly
  15   [ 6] java.util.concurrent.Semaphore.acquire
  16   [ 7] 
org.apache.hadoop.hbase.ipc.FastPathBalancedQueueRpcExecutor$FastPathHandler.getCallRunner
  17   [ 8] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
  18
  19 Total: 15140093209 (2.02%)  samples: 1
  20   [ 0] java.lang.Object
  21   [ 1] sun.nio.ch.ServerSocketChannelImpl.accept
  22   [ 2] org.eclipse.jetty.server.ServerConnector.accept
  23   [ 3] org.eclipse.jetty.server.AbstractConnector$Acceptor.run
  24   [ 4] org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
  25   [ 5] org.eclipse.jetty.util.thread.QueuedThreadPool$2.run
  26   [ 6] java.lang.Thread.run
  27
  28 Total: 1256664266 (0.17%)  samples: 4945
  29   [ 0] java.util.concurrent.ConcurrentHashMap
  30   [ 1] 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>
  31   [ 2] 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>
  32   [ 3] 
org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.<init>
  33   [ 4] 
org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner
  34   [ 5] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  35   [ 6] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  36   [ 7] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  37   [ 8] org.apache.hadoop.hbase.regionserver.RSRpcServices.get
  38   [ 9] org.apache.hadoop.hbase.regionserver.RSRpcServices.get
  39   [10] 
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod
  40   [11] org.apache.hadoop.hbase.ipc.RpcServer.call
  41   [12] org.apache.hadoop.hbase.ipc.CallRunner.run
  42   [13] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
  43   [14] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
  44
  45 Total: 662087825 (0.09%)  samples: 3570
  46   [ 0] org.apache.hadoop.hdfs.PeerCache
  47   [ 1] com.google.common.collect.LinkedListMultimap.size
  48   [ 2] org.apache.hadoop.hdfs.PeerCache.putInternal
  49   [ 3] org.apache.hadoop.hdfs.PeerCache.put
  50   [ 4] org.apache.hadoop.hdfs.RemoteBlockReader2.close
  51   [ 5] org.apache.hadoop.hdfs.DFSInputStream.actualGetFromOneDataNode
  52   [ 6] org.apache.hadoop.hdfs.DFSInputStream.fetchBlockByteRange
  53   [ 7] org.apache.hadoop.hdfs.DFSInputStream.pread
  54   [ 8] org.apache.hadoop.hdfs.DFSInputStream.read
  55   [ 9] org.apache.hadoop.fs.FSDataInputStream.read
  56   [10] org.apache.hadoop.hbase.io.hfile.HFileBlock.positionalReadWithExtra
  57   [11] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readAtOffset
  58   [12] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockDataInternal
  59   [13] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockData
  60   [14] org.apache.hadoop.hbase.io.hfile.HFileReaderImpl.readBlock
  61   [15] 
org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$CellBasedKeyBlockIndexReader.loadDataBlockWithScanInfo
  62   [16] 
org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo
  63   [17] 
org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo
  64   [18] org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter
  65   [19] org.apache.hadoop.hbase.regionserver.StoreFileScanner.seek
  66   [20] org.apache.hadoop.hbase.regionserver.StoreScanner.seekScanners
  67   [21] org.apache.hadoop.hbase.regionserver.StoreScanner.<init>
  68   [22] org.apache.hadoop.hbase.regionserver.HStore.createScanner
  69   [23] org.apache.hadoop.hbase.regionserver.HStore.getScanner
  70   [24] 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.initializeScanners
  71   [25] 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>
  72   [26] 
org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner
  73   [27] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  74   [28] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  75   [29] org.apache.hadoop.hbase.regionserver.HRegion.getScanner
  76   [30] org.apache.hadoop.hbase.regionserver.RSRpcServices.get
  77   [31] org.apache.hadoop.hbase.regionserver.RSRpcServices.get
  78   [32] 
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod
  79   [33] org.apache.hadoop.hbase.ipc.RpcServer.call
  80   [34] org.apache.hadoop.hbase.ipc.CallRunner.run
  81   [35] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
  82   [36] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
  83
  84 Total: 497826090 (0.07%)  samples: 3176
  85   [ 0] org.apache.hadoop.hdfs.PeerCache
  86   [ 1] 
com.google.common.collect.LinkedListMultimap$ValueForKeyIterator.remove
  87   [ 2] org.apache.hadoop.hdfs.PeerCache.getInternal
  88   [ 3] org.apache.hadoop.hdfs.PeerCache.get
  89   [ 4] org.apache.hadoop.hdfs.BlockReaderFactory.nextTcpPeer
  90   [ 5] 
org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReaderFromTcp
  91   [ 6] org.apache.hadoop.hdfs.BlockReaderFactory.build
  92   [ 7] org.apache.hadoop.hdfs.DFSInputStream.actualGetFromOneDataNode
  93   [ 8] org.apache.hadoop.hdfs.DFSInputStream.fetchBlockByteRange
  94   [ 9] org.apache.hadoop.hdfs.DFSInputStream.pread
  95   [10] org.apache.hadoop.hdfs.DFSInputStream.read
  96   [11] org.apache.hadoop.fs.FSDataInputStream.read
  97   [12] org.apache.hadoop.hbase.io.hfile.HFileBlock.positionalReadWithExtra
  98   [13] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readAtOffset
  99   [14] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockDataInternal
 100   [15] 
org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockData
 101   [16] org.apache.hadoop.hbase.io.hfile.HFileReaderImpl.readBlock
 102   [17] 
org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$CellBasedKeyBlockIndexReader.loadDataBlockWithScanInfo
 103   [18] 
org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo
 104   [19] 
org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo
 105   [20] org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter
...{code}

YCSB numbers:

{
  "metric" : "OVERALL",
  "measurement" : "RunTime(ms)",
  "value" : 1200122
}, {
  "metric" : "OVERALL",
  "measurement" : "Throughput(ops/sec)",
  "value" : 81001.45818508451
}

Let me attach pictures.

> [locking] Write-time worst offenders
> ------------------------------------
>
>                 Key: HBASE-20236
>                 URL: https://issues.apache.org/jira/browse/HBASE-20236
>             Project: HBase
>          Issue Type: Sub-task
>          Components: Performance
>    Affects Versions: 2.0.0-beta-2
>            Reporter: stack
>            Priority: Major
>         Attachments: no_semaphore_vs_semaphore.png
>
>
> Messing w/ my new toy, here are worst offenders locking; they must be bad if 
> they show up in this sampling profiler:
> {code}
>  7 Total: 769321884622 (99.24%)  samples: 2965
>   8   [ 0] java.util.concurrent.Semaphore$NonfairSync
>   9   [ 1] sun.misc.Unsafe.park
>  10   [ 2] java.util.concurrent.locks.LockSupport.park
>  11   [ 3] 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt
>  12   [ 4] 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly
>  13   [ 5] 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly
>  14   [ 6] java.util.concurrent.Semaphore.acquire
>  15   [ 7] 
> org.apache.hadoop.hbase.ipc.FastPathBalancedQueueRpcExecutor$FastPathHandler.getCallRunner
>  16   [ 8] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
>  17
>  18 Total: 4284274263 (0.55%)  samples: 23543
>  19   [ 0] org.apache.hadoop.hbase.regionserver.MutableSegment
>  20   [ 1] org.apache.hadoop.hbase.ByteBufferKeyValue.getSequenceId
>  21   [ 2] org.apache.hadoop.hbase.regionserver.Segment.updateMetaInfo
>  22   [ 3] org.apache.hadoop.hbase.regionserver.Segment.internalAdd
>  23   [ 4] org.apache.hadoop.hbase.regionserver.MutableSegment.add
>  24   [ 5] org.apache.hadoop.hbase.regionserver.AbstractMemStore.internalAdd
>  25   [ 6] org.apache.hadoop.hbase.regionserver.AbstractMemStore.add
>  26   [ 7] org.apache.hadoop.hbase.regionserver.AbstractMemStore.add
>  27   [ 8] org.apache.hadoop.hbase.regionserver.HStore.add
>  28   [ 9] org.apache.hadoop.hbase.regionserver.HRegion.applyToMemStore
>  29   [10] org.apache.hadoop.hbase.regionserver.HRegion.access$600
>  30   [11] 
> org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation.applyFamilyMapToMemStore
>  31   [12] 
> org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation.lambda$writeMiniBatchOperationsToMemStore$0
>  32   [13] 
> org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation$$Lambda$442.1445825895.visit
>  33   [14] 
> org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation.visitBatchOperations
>  34   [15] 
> org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation.writeMiniBatchOperationsToMemStore
>  35   [16] 
> org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation.writeMiniBatchOperationsToMemStore
>  36   [17] org.apache.hadoop.hbase.regionserver.HRegion.doMiniBatchMutate
>  37   [18] org.apache.hadoop.hbase.regionserver.HRegion.batchMutate
>  38   [19] org.apache.hadoop.hbase.regionserver.HRegion.batchMutate
>  39   [20] org.apache.hadoop.hbase.regionserver.RSRpcServices.doBatchOp
>  40   [21] 
> org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAtomicBatchOp
>  41   [22] 
> org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAtomicRegionMutation
>  42   [23] org.apache.hadoop.hbase.regionserver.RSRpcServices.multi
>  43   [24] 
> org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod
>  44   [25] org.apache.hadoop.hbase.ipc.RpcServer.call
>  45   [26] org.apache.hadoop.hbase.ipc.CallRunner.run
>  46   [27] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
>  47   [28] org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run
>  48
>  49 Total: 717708856 (0.09%)  samples: 214
>  50   [ 0] java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
>  51   [ 1] sun.misc.Unsafe.park
>  52   [ 2] java.util.concurrent.locks.LockSupport.park
>  53   [ 3] 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt
>  54   [ 4] java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued
>  55   [ 5] java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire
>  56   [ 6] java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock
>  57   [ 7] org.apache.hadoop.hbase.regionserver.HRegion.blockUpdates
>  58   [ 8] 
> org.apache.hadoop.hbase.regionserver.RegionServicesForStores.blockUpdates
>  59   [ 9] 
> org.apache.hadoop.hbase.regionserver.CompactingMemStore.flushInMemory
>  60   [10] 
> org.apache.hadoop.hbase.regionserver.CompactingMemStore$InMemoryFlushRunnable.run
>  61   [11] java.util.concurrent.ThreadPoolExecutor.runWorker
>  62   [12] java.util.concurrent.ThreadPoolExecutor$Worker.run
>  63   [13] java.lang.Thread.run
> ...
> {code}



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

Reply via email to