Skip to content

Commit db3ce20

Browse files
committed
perf(test): Split HashJoinTest between two files for balanced CI groups
Redistribute MultiThreadedHashJoinTest tests between HashJoinTest.cpp (34 tests) and HashJoinTestExtra.cpp (20 tests + existing HashJoinTest tests from HashJoinTestSpill.cpp). This balances the two heaviest hash join test binaries (~575s and ~585s) instead of the previous 919s + 242s split. Rename HashJoinTestSpill.cpp to HashJoinTestExtra.cpp since it now contains both MultiThreadedHashJoinTest and HashJoinTest test cases. Rebalance all 8 exec test groups via greedy bin-packing with measured EC2 timings. Max group drops from ~920s to ~784s (bounded by IndexLookupJoinTest).
1 parent e35eec4 commit db3ce20

File tree

3 files changed

+2094
-2075
lines changed

3 files changed

+2094
-2075
lines changed

velox/exec/tests/CMakeLists.txt

Lines changed: 83 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -36,112 +36,110 @@ target_link_libraries(
3636
GTest::gtest_main
3737
)
3838

39-
# Sources are ordered so that heavy tests are spread across groups via greedy
40-
# bin-packing by actual CI execution time. With VELOX_TESTS_PER_GROUP=10,
41-
# CMake takes files positionally in batches of 10 (files 1-10 = group0,
42-
# 11-20 = group1, etc.), so each batch of 10 must be independently balanced.
39+
# Sources are ordered via greedy bin-packing by measured EC2 execution time.
40+
# With VELOX_TESTS_PER_GROUP=10, CMake takes files positionally in batches of
41+
# 10 (files 1-10 = group0, 11-20 = group1, etc.).
4342
#
44-
# Actual CI timings (run 23771243060): group0=882s, group1=1055s, group2=365s,
45-
# group3=408s, group4=333s, group5=768s, group6=108s, group7=810s.
43+
# Measured per-file EC2 timings (sequential, 8-core, 30GB):
44+
# IndexLookupJoinTest 783s, MultiFragmentTest 599s,
45+
# HashJoinTestExtra ~585s, SpillerTest 584s, HashJoinTest ~575s,
46+
# TableWriterTest 225s, TableScanTest 189s, IndexLookupJoinTestExtra 188s,
47+
# MergeJoinTest 111s, AggregationTest 105s, OutputBufferManagerTest 98s,
48+
# ScaleWriterLocalPartitionTest 96s, OrderByTest 71s, TopNRowNumberTest 64s,
49+
# HashTableTest 60s, StreamingAggregationTest 58s, ExchangeClientTest 54s,
50+
# RowNumberTest 42s.
4651
#
47-
# Heavy files (estimated from group timings):
48-
# HashJoinTest ~870s, IndexLookupJoinTest ~520s (split from ~1040s),
49-
# IndexLookupJoinTestExtra ~520s, TableWriterTest ~400s, TableScanTest ~350s,
50-
# HashJoinTestSpill ~340s, MultiFragmentTest ~300s, AggregationTest ~200s,
51-
# SpillerTest ~200s, WindowTest ~150s.
52-
#
53-
# Each heavy file is the sole heavyweight in its group, paired with lightweight
54-
# tests. One heavy file per group ensures no group exceeds ~880s.
52+
# Max group ~784s (bounded by IndexLookupJoinTest.cpp).
5553
set(
5654
VELOX_EXEC_TEST_SOURCES
57-
# group0: HashJoinTest (~870s) + 9 lightweight
58-
HashJoinTest.cpp
59-
PrintPlanWithStatsTest.cpp
60-
ThreadDebugInfoTest.cpp
61-
WriterFuzzerUtilTest.cpp
62-
UnorderedStreamReaderTest.cpp
63-
ProbeOperatorStateTest.cpp
64-
PlanNodeStatsTest.cpp
65-
AsyncConnectorTest.cpp
66-
PlanNodeToSummaryStringTest.cpp
67-
PlanNodeToStringTest.cpp
68-
# group1: IndexLookupJoinTest (~520s) + 9 lightweight
55+
# group0 (~784s): IndexLookupJoinTest 783 + 9 lightweight
6956
IndexLookupJoinTest.cpp
70-
MergeTest.cpp
71-
FilterProjectTest.cpp
57+
ConcatFilesSpillMergeStreamTest.cpp
58+
MixedUnionWithTableScanTest.cpp
59+
MemoryReclaimerTest.cpp
60+
EnforceDistinctTest.cpp
61+
TraceUtilTest.cpp
62+
HashPartitionFunctionTest.cpp
63+
SpatialIndexTest.cpp
64+
ValuesTest.cpp
65+
ParallelProjectTest.cpp
66+
# group1 (~599s): MultiFragmentTest 599 + 9 lightweight
67+
MultiFragmentTest.cpp
68+
EnforceSingleRowTest.cpp
69+
FilterToExpressionTest.cpp
70+
ScaledScanControllerTest.cpp
71+
HilbertIndexTest.cpp
72+
OperatorTraceTest.cpp
73+
LimitTest.cpp
74+
SplitListenerTest.cpp
75+
AddressableNonNullValueListTest.cpp
76+
ArrowStreamTest.cpp
77+
# group2 (~585s): HashJoinTestExtra ~585 + 9 lightweight
78+
HashJoinTestExtra.cpp
79+
AggregateFunctionRegistryTest.cpp
80+
RoundRobinPartitionFunctionTest.cpp
81+
ColumnStatsCollectorTest.cpp
82+
MixedUnionTest.cpp
83+
ExpandTest.cpp
84+
FunctionResolutionTest.cpp
85+
SpillStatsTest.cpp
86+
MarkSortedTest.cpp
87+
PartitionedOutputTest.cpp
88+
# group3 (~584s): SpillerTest 584 + 9 lightweight
89+
SpillerTest.cpp
90+
PlanNodeToSummaryStringTest.cpp
7291
CountingJoinTest.cpp
7392
CustomJoinTest.cpp
74-
AssignUniqueIdTest.cpp
7593
TaskListenerTest.cpp
7694
SplitTest.cpp
7795
SqlTest.cpp
7896
WindowFunctionRegistryTest.cpp
79-
# group2: IndexLookupJoinTestExtra (~520s) + 9 lightweight
80-
IndexLookupJoinTestExtra.cpp
81-
OrderByTest.cpp
82-
PrefixSortTest.cpp
83-
MarkDistinctTest.cpp
84-
MergerTest.cpp
8597
StreamingEnforceDistinctTest.cpp
8698
HashBitRangeTest.cpp
87-
AggregateFunctionRegistryTest.cpp
88-
RoundRobinPartitionFunctionTest.cpp
89-
ColumnStatsCollectorTest.cpp
90-
# group3: TableWriterTest (~400s) + 9 lightweight
99+
# group4 (~575s): HashJoinTest ~575 + 9 lightweight
100+
HashJoinTest.cpp
101+
SpillTest.cpp
102+
WindowTest.cpp
103+
PrefixSortTest.cpp
104+
MergerTest.cpp
105+
LocalPartitionTest.cpp
106+
PrintPlanWithStatsTest.cpp
107+
ProbeOperatorStateTest.cpp
108+
MarkDistinctTest.cpp
109+
MergeTest.cpp
110+
# group5 (~445s): TableWriterTest 225 + OutputBufMgr 98 + TopNRowNumber 64 + StreamingAgg 58
91111
TableWriterTest.cpp
92112
OutputBufferManagerTest.cpp
93-
NestedLoopJoinTest.cpp
94-
MixedUnionTest.cpp
95-
VectorHasherTest.cpp
113+
TopNRowNumberTest.cpp
114+
StreamingAggregationTest.cpp
96115
ContainerRowSerdeTest.cpp
97-
ExpandTest.cpp
98-
FunctionResolutionTest.cpp
99-
SpillStatsTest.cpp
100-
MarkSortedTest.cpp
101-
# group4: TableScanTest (~350s) + 9 lightweight
116+
RowContainerTest.cpp
117+
TopNTest.cpp
118+
WriterFuzzerUtilTest.cpp
119+
PlanNodeStatsTest.cpp
120+
ThreadDebugInfoTest.cpp
121+
# group6 (~467s): TableScanTest 189 + AggregationTest 105 + OrderBy 71 + HashTable 60 + RowNumber 42
102122
TableScanTest.cpp
123+
AggregationTest.cpp
124+
OrderByTest.cpp
103125
HashTableTest.cpp
104-
StreamingAggregationTest.cpp
105-
PartitionedOutputTest.cpp
106-
TopNRowNumberTest.cpp
107-
TopNTest.cpp
108-
EnforceSingleRowTest.cpp
109-
FilterToExpressionTest.cpp
110-
ScaledScanControllerTest.cpp
111-
HilbertIndexTest.cpp
112-
# group5: HashJoinTestSpill (~340s) + OperatorTraceTest + 8 lightweight
113-
HashJoinTestSpill.cpp
114-
OperatorTraceTest.cpp
115-
ScaleWriterLocalPartitionTest.cpp
116-
LimitTest.cpp
126+
RowNumberTest.cpp
117127
UnnestTest.cpp
118-
SplitListenerTest.cpp
119-
AddressableNonNullValueListTest.cpp
120-
ArrowStreamTest.cpp
121-
ConcatFilesSpillMergeStreamTest.cpp
122-
MixedUnionWithTableScanTest.cpp
123-
# group6: AggregationTest (~200s) + ExchangeClientTest + MemoryReclaimerTest + 7 lightweight
124-
AggregationTest.cpp
125-
ExchangeClientTest.cpp
126-
MemoryReclaimerTest.cpp
127-
RowContainerTest.cpp
128-
SpillTest.cpp
129-
LocalPartitionTest.cpp
128+
PlanNodeSerdeTest.cpp
130129
HashJoinBridgeTest.cpp
131-
RowNumberTest.cpp
132-
EnforceDistinctTest.cpp
133-
TraceUtilTest.cpp
134-
# group7: SpillerTest (~200s) + WindowTest (~150s) + MultiFragmentTest (~300s) + 7 lightweight
135-
MultiFragmentTest.cpp
136-
SpillerTest.cpp
137-
WindowTest.cpp
138-
MergeJoinTest.cpp
139130
SortBufferTest.cpp
140-
HashPartitionFunctionTest.cpp
141-
SpatialIndexTest.cpp
142-
ValuesTest.cpp
143-
ParallelProjectTest.cpp
144-
PlanNodeSerdeTest.cpp
131+
VectorHasherTest.cpp
132+
# group7 (~449s): IndexLookupJoinTestExtra 188 + MergeJoin 111 + ScaleWriter 96 + Exchange 54
133+
IndexLookupJoinTestExtra.cpp
134+
MergeJoinTest.cpp
135+
ScaleWriterLocalPartitionTest.cpp
136+
ExchangeClientTest.cpp
137+
NestedLoopJoinTest.cpp
138+
UnorderedStreamReaderTest.cpp
139+
PlanNodeToStringTest.cpp
140+
AssignUniqueIdTest.cpp
141+
FilterProjectTest.cpp
142+
AsyncConnectorTest.cpp
145143
)
146144

147145
set(

0 commit comments

Comments
 (0)