Skip to content

Commit

Permalink
Devirtualize benchmark innerloop
Browse files Browse the repository at this point in the history
  • Loading branch information
dain committed Dec 4, 2012
1 parent d4b9be1 commit 0d93e37
Show file tree
Hide file tree
Showing 21 changed files with 371 additions and 39 deletions.
Expand Up @@ -52,15 +52,9 @@ protected String getDefaultResult()

protected abstract Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider);

@Override
protected Map<String, Long> runOnce()
protected long execute(TpchBlocksProvider blocksProvider)
{
long start = System.nanoTime();

StatsTpchBlocksProvider statsTpchBlocksProvider = new StatsTpchBlocksProvider(TPCH_DATA_PROVIDER);
MetricRecordingTpchBlocksProvider metricRecordingTpchBlocksProvider = new MetricRecordingTpchBlocksProvider(statsTpchBlocksProvider);

Operator operator = createBenchmarkedOperator(metricRecordingTpchBlocksProvider);
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
Expand All @@ -69,6 +63,18 @@ protected Map<String, Long> runOnce()
outputRows++;
}
}
return outputRows;
}

@Override
protected Map<String, Long> runOnce()
{
long start = System.nanoTime();

StatsTpchBlocksProvider statsTpchBlocksProvider = new StatsTpchBlocksProvider(TPCH_DATA_PROVIDER);
MetricRecordingTpchBlocksProvider metricRecordingTpchBlocksProvider = new MetricRecordingTpchBlocksProvider(statsTpchBlocksProvider);

long outputRows = execute(metricRecordingTpchBlocksProvider);

Duration totalDuration = Duration.nanosSince(start);
Duration dataGenerationDuration = metricRecordingTpchBlocksProvider.getDataFetchElapsedTime();
Expand All @@ -81,7 +87,7 @@ protected Map<String, Long> runOnce()
double executionSeconds = executionMillis / TimeUnit.SECONDS.toMillis(1);

DataSize totalDataSize = metricRecordingTpchBlocksProvider.getCumulativeDataSize();

checkState(!statsTpchBlocksProvider.getStats().isEmpty(), "no columns were fetched");
// Use the first column fetched as the indicator of the number of rows
long inputRows = statsTpchBlocksProvider.getStats().get(0).getRowCount();
Expand All @@ -96,5 +102,4 @@ protected Map<String, Long> runOnce()
.put("input_megabytes_per_second", (long) (totalDataSize.getValue(DataSize.Unit.MEGABYTE) / executionSeconds))
.build();
}

}
@@ -1,9 +1,11 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.block.BlockIterable;
import com.facebook.presto.operator.AggregationOperator;
import com.facebook.presto.operator.AlignmentOperator;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.serde.BlocksFileEncoding;
import com.facebook.presto.tpch.TpchBlocksProvider;
import com.facebook.presto.tpch.TpchColumnHandle;
Expand Down Expand Up @@ -35,6 +37,21 @@ protected Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider)
return new AggregationOperator(alignmentOperator, ImmutableList.of(singleNodeAggregation(countAggregation(0, 0))), ImmutableList.of(singleColumn(Type.FIXED_INT_64, 0, 0)));
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new CountAggregationBenchmark().runBenchmark(
Expand Down
@@ -1,5 +1,10 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.tpch.TpchBlocksProvider;

public class CountAggregationSqlBenchmark
extends AbstractSqlBenchmark
{
Expand All @@ -8,6 +13,21 @@ public CountAggregationSqlBenchmark()
super("sql_count_agg", 10, 100, "select count(*) from orders");
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new CountAggregationSqlBenchmark().runBenchmark(new SimpleLineBenchmarkResultWriter(System.out));
Expand Down
@@ -1,5 +1,10 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.tpch.TpchBlocksProvider;

public class CountWithFilterSqlBenchmark
extends AbstractSqlBenchmark
{
Expand All @@ -8,6 +13,21 @@ public CountWithFilterSqlBenchmark()
super("sql_count_with_filter", 10, 100, "SELECT count(*) from orders where orderstatus = 'F'");
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new CountWithFilterSqlBenchmark().runBenchmark(new SimpleLineBenchmarkResultWriter(System.out));
Expand Down
@@ -1,9 +1,11 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.block.BlockIterable;
import com.facebook.presto.operator.AggregationOperator;
import com.facebook.presto.operator.AlignmentOperator;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.serde.BlocksFileEncoding;
import com.facebook.presto.tpch.TpchBlocksProvider;
import com.facebook.presto.tpch.TpchColumnHandle;
Expand Down Expand Up @@ -37,6 +39,21 @@ protected Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider)
ImmutableList.of(singleColumn(Type.DOUBLE, 0, 0)));
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new DoubleSumAggregationBenchmark().runBenchmark(
Expand Down
@@ -1,5 +1,10 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.tpch.TpchBlocksProvider;

public class GroupByAggregationSqlBenchmark
extends AbstractSqlBenchmark
{
Expand All @@ -8,6 +13,21 @@ public GroupByAggregationSqlBenchmark()
super("sql_groupby_agg", 5, 25, "select orderstatus, sum(totalprice) from orders group by orderstatus");
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new GroupByAggregationSqlBenchmark().runBenchmark(new SimpleLineBenchmarkResultWriter(System.out));
Expand Down
@@ -1,5 +1,10 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.tpch.TpchBlocksProvider;

public class GroupBySumWithArithmeticSqlBenchmark
extends AbstractSqlBenchmark
{
Expand All @@ -8,6 +13,21 @@ public GroupBySumWithArithmeticSqlBenchmark()
super("sql_groupby_agg_with_arithmetic", 1, 4, "select linestatus, sum(orderkey - partkey) from lineitem group by linestatus");
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new GroupBySumWithArithmeticSqlBenchmark().runBenchmark(new SimpleLineBenchmarkResultWriter(System.out));
Expand Down
@@ -1,9 +1,11 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.block.BlockIterable;
import com.facebook.presto.operator.AlignmentOperator;
import com.facebook.presto.operator.HashAggregationOperator;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.serde.BlocksFileEncoding;
import com.facebook.presto.tpch.TpchBlocksProvider;
import com.facebook.presto.tpch.TpchColumnHandle;
Expand Down Expand Up @@ -43,6 +45,21 @@ protected Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider)

}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new HashAggregationBenchmark().runBenchmark(
Expand Down
@@ -1,9 +1,11 @@
package com.facebook.presto.benchmark;

import com.facebook.presto.block.BlockCursor;
import com.facebook.presto.block.BlockIterable;
import com.facebook.presto.operator.AlignmentOperator;
import com.facebook.presto.operator.HashJoinOperator;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.operator.SourceHashProvider;
import com.facebook.presto.serde.BlocksFileEncoding;
import com.facebook.presto.tpch.TpchBlocksProvider;
Expand Down Expand Up @@ -39,6 +41,21 @@ protected Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider)
return new HashJoinOperator(sourceHashProvider, lineItemTableScan, 0);
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
Operator operator = createBenchmarkedOperator(blocksProvider);

long outputRows = 0;
for (Page page : operator) {
BlockCursor cursor = page.getBlock(0).cursor();
while (cursor.advanceNextPosition()) {
outputRows++;
}
}
return outputRows;
}

public static void main(String[] args)
{
new HashBuildAndJoinBenchmark().runBenchmark(
Expand Down
Expand Up @@ -3,15 +3,9 @@
import com.facebook.presto.block.BlockIterable;
import com.facebook.presto.operator.AlignmentOperator;
import com.facebook.presto.operator.Operator;
import com.facebook.presto.operator.Page;
import com.facebook.presto.operator.SourceHashProvider;
import com.facebook.presto.serde.BlocksFileEncoding;
import com.facebook.presto.tpch.TpchBlocksProvider;
import com.facebook.presto.tuple.TupleInfo;
import com.google.common.collect.ImmutableList;

import java.util.Iterator;
import java.util.List;

public class HashBuildBenchmark
extends AbstractOperatorBenchmark
Expand All @@ -21,37 +15,21 @@ public HashBuildBenchmark()
super("hash_build", 4, 5);
}

/*
select orderkey, quantity, totalprice
from lineitem join orders using (orderkey)
*/
@Override
protected Operator createBenchmarkedOperator(TpchBlocksProvider blocksProvider)
{
return null;
}

@Override
protected long execute(TpchBlocksProvider blocksProvider)
{
BlockIterable orderOrderKey = getBlockIterable(blocksProvider, "orders", "orderkey", BlocksFileEncoding.RAW);
BlockIterable totalPrice = getBlockIterable(blocksProvider, "orders", "totalprice", BlocksFileEncoding.RAW);
AlignmentOperator ordersTableScan = new AlignmentOperator(orderOrderKey, totalPrice);
SourceHashProvider sourceHashProvider = new SourceHashProvider(ordersTableScan, 0, 1_500_000);
sourceHashProvider.get();
return new Operator() {
@Override
public int getChannelCount()
{
return 0;
}

@Override
public List<TupleInfo> getTupleInfos()
{
return ImmutableList.of();
}

@Override
public Iterator<Page> iterator()
{
return ImmutableList.<Page>of().iterator();
}
};
return 0;
}

public static void main(String[] args)
Expand Down

0 comments on commit 0d93e37

Please sign in to comment.