Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions PerformanceTesting/TestSummary.rst
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ These tests create lots of records, and test how different sources work
| 01bf - write xml to a disk file, uncompressed
| 01bg - write variable size to disk, compressed
| 01bh - write large variable size to disk, compressed
| 01bi - write very large variable size to disk, compressed

01c - Raw disk read speed [class: diskread]
-------------------------------------------
Expand All @@ -100,6 +101,7 @@ These tests create lots of records, and test how different sources work
| 01cf - read xml to a disk file, uncompressed
| 01cg - read variable size from disk, compressed
| 01ch - read large variable size from disk, compressed
| 01ci - read very large variable size from disk, compressed

01d - Parallel disk write speed [class: diskread,parallel]
----------------------------------------------------------
Expand Down Expand Up @@ -207,6 +209,7 @@ TBD:01h - Limits on index reads [class: indexread]
| 03bd - Distribute all rows to node self+CLUSTERSIZE/2.
| 03be - Distribute variable size rows
| 03bf - Distribute large variable size rows
| 03bg - Distribute very large variable size rows

03c - Parallel Distribution [class: distribute]
-----------------------------------------------
Expand Down
14 changes: 14 additions & 0 deletions PerformanceTesting/ecl/01bi_writevlarge.ecl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//class=disk
//class=diskwrite
//class=setup

#option ('hthorMemoryLimit', '4000');
#option ('hthorDiskWriteSizeLimit', 100000000000);

import $ as suite;
import suite.perform.config;
import suite.perform.format;
import suite.perform.files;

ds := DATASET(config.vlargeRecordCount, format.createGrandParent(COUNTER, 1000 + COUNTER, 900 + COUNTER), DISTRIBUTED);
OUTPUT(ds,,files.simpleName+'_vlarge',overwrite,compressed);
15 changes: 15 additions & 0 deletions PerformanceTesting/ecl/01ci_countvlarge.ecl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//class=disk
//class=quick
//class=diskread

//noroxie - almost certainly will cause timeout issues due to sending remote rows. Should revisit.

#option ('hthorMemoryLimit', '4000');
import ^ as root;
import $ as suite;
import suite.perform.config;
import suite.perform.files;
import suite.perform.format;

ds := DATASET(files.simpleName+'_vlarge', format.grandParentRec, FLAT);
OUTPUT(COUNT(NOFOLD(ds)) = config.vlargeRecordCount);
15 changes: 15 additions & 0 deletions PerformanceTesting/ecl/03bg_distributevlarge.ecl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//class=memory
//class=distribute
//nohthor
//noroxie

import $ as suite;
import suite.perform.config;
import suite.perform.format;
import suite.perform.files;

ds := DATASET(config.vlargeRecordCount, format.createGrandParent(COUNTER, 1000 + COUNTER, 900 + COUNTER), DISTRIBUTED);

d := distribute(ds, hash32(id));

output(COUNT(NOFOLD(d)) = config.vlargeRecordCount);
2 changes: 2 additions & 0 deletions PerformanceTesting/ecl/key/01bi_writevlarge.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<Dataset name='Result 1'>
</Dataset>
3 changes: 3 additions & 0 deletions PerformanceTesting/ecl/key/01ci_countvlarge.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Dataset name='Result 1'>
<Row><Result_1>true</Result_1></Row>
</Dataset>
3 changes: 3 additions & 0 deletions PerformanceTesting/ecl/key/03bg_distributevlarge.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Dataset name='Result 1'>
<Row><Result_1>true</Result_1></Row>
</Dataset>
1 change: 1 addition & 0 deletions PerformanceTesting/ecl/perform/config.ecl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export config := MODULE
export largeRecordCountPerSlave := 100; // Total serialized memory ~4GB
export largeRecordCount := largeRecordCountPerSlave * numSlaves;
export largeRecordChildren := 500000; // Total size approx 40MB per row
export vlargeRecordCount := 100 * numSlaves;
export variableRecordCount := largeRecordCount * 10000;
export variableRecordChildren := largeRecordChildren / 10000; // Total size approx 4K per row

Expand Down
15 changes: 15 additions & 0 deletions PerformanceTesting/ecl/perform/format.ecl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ export format := MODULE
DATASET(paddedRec) children;
END;

export grandParentRec := RECORD
unsigned id;
DATASET(parentRec) c1;
DATASET(parentRec) c2;
END;

export simpleRec mkSimple(unsigned8 id1, unsigned8 id2, unsigned8 id3, unsigned8 id4) := TRANSFORM
SELF.id1 := id1;
SELF.id2 := id2;
Expand Down Expand Up @@ -52,4 +58,13 @@ export format := MODULE
SELF.children := DATASET(numChildren, createPadded(id + startChild));
END;

export grandParentRec createGrandParent(unsigned8 id, unsigned4 numChildren1, unsigned4 numChildren2) := TRANSFORM
id2 := HASH64(id);
id3 := HASH64(id2);
id4 := HASH64(id3);
SELF.id := id;
SELF.c1 := DATASET(numChildren1, createParent(id, 800, id2));
SELF.c2 := DATASET(numChildren2, createParent(id, 1000, id3));
Comment on lines +66 to +67
Copy link

Copilot AI Jan 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The createParent transform expects 3 parameters (id, numChildren, startChild) but is being called with mismatched semantics. The second parameter should be numChildren but 800 and 1000 appear to be constants rather than child counts. This will create parent records with 800 and 1000 children respectively, ignoring the numChildren1 and numChildren2 parameters passed to createGrandParent.

Suggested change
SELF.c1 := DATASET(numChildren1, createParent(id, 800, id2));
SELF.c2 := DATASET(numChildren2, createParent(id, 1000, id3));
SELF.c1 := DATASET(numChildren1, createParent(id, numChildren1, 800));
SELF.c2 := DATASET(numChildren2, createParent(id, numChildren2, 1000));

Copilot uses AI. Check for mistakes.
END;

END;