You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Dayue Gao (JIRA)" <ji...@apache.org> on 2016/10/11 13:28:21 UTC

[jira] [Commented] (KYLIN-2083) more RAM estimation test for MeasureAggregator and GTAggregateScanner

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

Dayue Gao commented on KYLIN-2083:
----------------------------------

Play with it for a while, refactored AggregationCacheMemSizeTest
* use [jamm|https://github.com/jbellis/jamm] to replace the previous way for obtaining object's actual heap usage
* move estimation test for individual aggregators to AggregatorMemEstimateTest
* test different setups for aggregation cache
* test different setups for bitmap aggregator
* test both +UseCompressedOops and -UseCompressedOops

Below is how to run the test and what I've found.

Group 1: CompressedOops Enabled
--------------------------------------------------
{noformat}
$ mvn test -Dtest=AggregationCacheMemSizeTest#testEstimateMemSize -pl 'core-cube' -DargLine='-Xms2g -Xmx2g' -Dscale=10
{noformat}

1)WITHOUT_MEM_HUNGRY:contain three basic aggregators: longSum, doubleSum and bigdecimalSum
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
        100,000      32,400,000      31,200,080               1           1,174
        200,000      64,800,000      62,400,080               1           2,899
        300,000      97,200,000      93,600,080               1           5,779
        400,000     129,600,000     124,800,080               1           9,338
        500,000     162,000,000     156,000,080               1          13,547
        600,000     194,400,000     187,200,080               1          19,555
        700,000     226,800,000     218,400,080               1          26,240
        800,000     259,200,000     249,600,080               1          33,895
        900,000     291,600,000     280,800,080               1          42,416
      1,000,000     324,000,000     312,000,080               1          50,853
{noformat}

2) WITH_HLLC: contain three basic aggregators and one HyperLogLog(14) aggregator
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
          5,000      83,840,000      83,840,096               0              51
         10,000     167,680,000     167,680,096               0             148
         15,000     251,520,000     251,520,096               0             303
         20,000     335,360,000     335,360,096               0             486
         25,000     419,200,000     419,200,096               0             717
         30,000     503,040,000     503,040,096               0           1,008
         35,000     586,880,000     586,880,096               0           1,334
         40,000     670,720,000     670,720,096               0           1,711
         45,000     754,560,000     754,560,096               0           2,120
         50,000     838,400,000     838,400,096               0           2,648
{noformat}

3) WITH_LOW_CARD_BITMAP: contain three basic aggregators and one sparse bitmap aggregator (1 million bits but only 100 bits on).
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
         10,000       5,920,000      23,200,080               1             452
         20,000      11,840,000      46,400,080               1           1,330
         30,000      17,760,000      69,600,080               1           2,716
         40,000      23,680,000      92,800,080               1           4,531
         50,000      29,600,000     116,000,080               1           6,973
         60,000      35,520,000     139,200,080               1           9,915
         70,000      41,440,000     162,400,080               1          13,289
         80,000      47,360,000     185,600,080               1          17,037
         90,000      53,280,000     208,800,080               1          21,923
        100,000      59,200,000     232,000,080               1          28,140
{noformat}

4) WITH_HIGH_CARD_BITMAP: contain three basic aggregators and one dense bitmap aggregator (1 million bits, 99.99% on)
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
          1,000     131,464,000     133,096,080               0              49
          2,000     262,928,000     266,192,080               0             138
          3,000     394,392,000     399,288,080               0             319
          4,000     525,856,000     532,384,080               0             503
          5,000     657,320,000     665,480,080               0             739
          6,000     788,784,000     798,576,080               0           1,101
          7,000     920,248,000     931,672,080               0           1,473
          8,000   1,051,712,000   1,064,768,080               0           1,895
          9,000   1,183,176,000   1,197,864,080               0           2,311
         10,000   1,314,640,000   1,330,960,080               0           2,969
{noformat}

Group 2: CompressedOops Disabled
--------------------------------------------------
{noformat}
$ mvn test -Dtest=AggregationCacheMemSizeTest#testEstimateMemSize -pl 'core-cube' -DargLine='-Xms4g -Xmx4g -XX:-UseCompressedOops' -Dscale=10
{noformat}

1)WITHOUT_MEM_HUNGRY:contain three basic aggregators: longSum, doubleSum and bigdecimalSum
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
        100,000      32,400,000      40,800,120               1           1,568
        200,000      64,800,000      81,600,120               1           3,667
        300,000      97,200,000     122,400,120               1           6,940
        400,000     129,600,000     163,200,120               1          11,375
        500,000     162,000,000     204,000,120               1          16,953
        600,000     194,400,000     244,800,120               1          24,452
        700,000     226,800,000     285,600,120               1          32,738
        800,000     259,200,000     326,400,120               1          41,785
        900,000     291,600,000     367,200,120               1          54,307
      1,000,000     324,000,000     408,000,120               1          64,795
{noformat}

2) WITH_HLLC: contain three basic aggregators and one HyperLogLog(14) aggregator
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
          5,000      83,840,000      84,520,144               0              55
         10,000     167,680,000     169,040,144               0             170
         15,000     251,520,000     253,560,144               0             346
         20,000     335,360,000     338,080,144               0             602
         25,000     419,200,000     422,600,144               0             939
         30,000     503,040,000     507,120,144               0           1,341
         35,000     586,880,000     591,640,144               0           1,765
         40,000     670,720,000     676,160,144               0           2,214
         45,000     754,560,000     760,680,144               0           2,688
         50,000     838,400,000     845,200,144               0           3,334
{noformat}

3) WITH_LOW_CARD_BITMAP: contain three basic aggregators and one sparse bitmap aggregator (1 million bits but only 100 bits on).
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
         10,000       5,880,000      28,240,120               0             515
         20,000      11,760,000      56,480,120               0           1,599
         30,000      17,640,000      84,720,120               0           3,286
         40,000      23,520,000     112,960,120               0           5,528
         50,000      29,400,000     141,200,120               0           8,530
         60,000      35,280,000     169,440,120               0          12,170
         70,000      41,160,000     197,680,120               0          16,241
         80,000      47,040,000     225,920,120               0          20,841
         90,000      52,920,000     254,160,120               0          25,741
        100,000      58,800,000     282,400,120               0          32,102
{noformat}

4) WITH_HIGH_CARD_BITMAP: contain three basic aggregators and one dense bitmap aggregator (1 million bits, 99.99% on)
{noformat}
           Size Estimate(bytes)   Actual(bytes)    Estimate(ms)      Actual(ms)
          1,000     131,464,000     133,760,120               0              54
          2,000     262,928,000     267,520,120               0             178
          3,000     394,392,000     401,280,120               0             449
          4,000     525,856,000     535,040,120               0             696
          5,000     657,320,000     668,800,120               0             997
          6,000     788,784,000     802,560,120               0           1,377
          7,000     920,248,000     936,320,120               0           1,835
          8,000   1,051,712,000   1,070,080,120               0           2,317
          9,000   1,183,176,000   1,203,840,120               0           2,845
         10,000   1,314,640,000   1,337,600,120               0           3,444
{noformat}

Conclusions:
# when CompressedOops is on, the current estimation is pretty close to the actual usage
# when CompressedOops is off, RAM of basic aggregators are underestimated by 25%, due to reference size increasing from 4 to 8. Memory Hungry aggregators are not affected too much 
# sparse bitmap is underestimated by 4x, needs improvement there
# use jamm to count heap usage of a big object graph is accurate but slow, use with caution

> more RAM estimation test for MeasureAggregator and GTAggregateScanner
> ---------------------------------------------------------------------
>
>                 Key: KYLIN-2083
>                 URL: https://issues.apache.org/jira/browse/KYLIN-2083
>             Project: Kylin
>          Issue Type: Sub-task
>          Components: Tools, Build and Test
>    Affects Versions: v1.5.4.1
>            Reporter: Dayue Gao
>            Assignee: Dayue Gao
>             Fix For: v1.6.0
>
>
> Current RAM estimations for MeasureAggregator and GTAggregateScanner are based on test results from AggregationCacheMemSizeTest. I'd like to see if there is room for improvement, and if there is, how much we can improve.
> Points I'm interested in are:
> # *CompressedOops ON v.s OFF*: when CompressedOops is off on large heap, each reference takes 8 bytes. I was wondering how much it will affect the RAM of AggregationCache.
> # *Variable Length Aggregator*: does the current estimation works well on varlen aggregator like BitmapAggregator?
> # *Real Heap Usage Count via Instrumentation*: the current approach to obtain the actual heap usage of objects looks fine, however, I was wondering if using Java instrumentation agent will give us a more precise number.



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