Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-11425 Cell/DBB end-to-end on the read-path
  3. HBASE-14120

ByteBufferUtils#compareTo small optimization

    XMLWordPrintableJSON

    Details

    • Type: Sub-task
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.0.0
    • Component/s: regionserver, Scanners
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      We have it like

      if (UnsafeAccess.isAvailable()) {
        long offset1Adj, offset2Adj;
        Object refObj1 = null, refObj2 = null;
        if (buf1.hasArray()) {
      	offset1Adj = o1 + buf1.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;
      	refObj1 = buf1.array();
        } else {
      	offset1Adj = o1 + ((DirectBuffer) buf1).address();
        }
        if (buf2.hasArray()) {
      

      Instead of hasArray() check we can have isDirect() check and reverse the if else block. Because we will be making BB backed cells when it is offheap BB. So when code reaches here for comparison, it will be direct BB.

      Doing JMH test proves it.

      Benchmark                            Mode  Cnt         Score         Error  Units
      OnHeapVsOffHeapComparer.offheap     thrpt    4  50516432.643 ±  651828.103  ops/s
      OnHeapVsOffHeapComparer.offheapOld  thrpt    4  37696698.093 ± 1121685.293  ops/s
      

        Attachments

        1. HBASE-14120.patch
          2 kB
          Anoop Sam John

          Activity

            People

            • Assignee:
              anoop.hbase Anoop Sam John
              Reporter:
              anoop.hbase Anoop Sam John
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: