Skip to content

Commit f484932

Browse files
committed
add testcase and add double/single buffer switch support
1 parent 2a10965 commit f484932

File tree

15 files changed

+915
-8
lines changed

15 files changed

+915
-8
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
[submodule "cpp/third-party/googletest"]
88
path = cpp/third-party/googletest
99
url = [email protected]:google/googletest.git
10+
[submodule "cpp/FlameGraph"]
11+
path = cpp/FlameGraph
12+
url = [email protected]:brendangregg/FlameGraph.git

cpp/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ plot
55
**/cmake-build-debug
66
**/CMakeCache.txt
77
**/CMakeFiles
8+
# remove perf svg
9+
cpp/testcase/perf-*/*.svg/*.svg
10+
*.csv
11+
*.txt
12+
*.svg

cpp/FlameGraph

Submodule FlameGraph added at 41fee1f

cpp/pixels-common/include/physical/BufferPool.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class BufferPool
6565
static thread_local bool isInitialized;
6666
static thread_local std::map<uint32_t, std::shared_ptr < ByteBuffer>>
6767
buffers[2];
68-
static std::shared_ptr <DirectIoLib> directIoLib;
68+
static thread_local std::shared_ptr <DirectIoLib> directIoLib;
6969
static thread_local int currBufferIdx;
7070
static thread_local int nextBufferIdx;
7171
friend class DirectUringRandomAccessFile;

cpp/pixels-common/lib/physical/BufferPool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ BufferPool::buffers[2];
3434
// since we call switch function first.
3535
thread_local int BufferPool::currBufferIdx = 1;
3636
thread_local int BufferPool::nextBufferIdx = 0;
37-
std::shared_ptr <DirectIoLib> BufferPool::directIoLib;
37+
thread_local std::shared_ptr <DirectIoLib> BufferPool::directIoLib;
3838

3939
void BufferPool::Initialize(std::vector <uint32_t> colIds, std::vector <uint64_t> bytes,
4040
std::vector <std::string> columnNames)

cpp/pixels-cpp.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,7 @@ column.chunk.alignment=32
4444

4545
# for DuckDB, it is only effective when column.chunk.alignment also meets the alignment of the isNull bitmap
4646
isnull.bitmap.alignment=8
47+
48+
49+
# pixels.doublebuffer
50+
pixels.doublebuffer=false

cpp/pixels-duckdb/PixelsScanFunction.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
namespace duckdb
3030
{
3131

32-
bool PixelsScanFunction::enable_filter_pushdown = false;
32+
bool PixelsScanFunction::enable_filter_pushdown = true;
3333

3434
static idx_t PixelsScanGetBatchIndex(ClientContext &context, const FunctionData *bind_data_p,
3535
LocalTableFunctionState *local_state,
@@ -63,8 +63,8 @@ TableFunctionSet PixelsScanFunction::GetFunctionSet()
6363
TableFunction table_function("pixels_scan", {LogicalType::VARCHAR}, PixelsScanImplementation, PixelsScanBind,
6464
PixelsScanInitGlobal, PixelsScanInitLocal);
6565
table_function.projection_pushdown = true;
66-
// table_function.filter_pushdown = true;
67-
//table_function.filter_prune = true;
66+
table_function.filter_pushdown = true;
67+
// table_function.filter_prune = true;
6868
enable_filter_pushdown = table_function.filter_pushdown;
6969
MultiFileReader::AddParameters(table_function);
7070
table_function.cardinality = PixelsCardinality;
@@ -501,14 +501,25 @@ bool PixelsScanFunction::PixelsParallelStateNext(ClientContext &context, const P
501501
scan_data.currReader->close();
502502
}
503503

504-
::BufferPool::Switch();
504+
if (ConfigFactory::Instance().getProperty("pixels.doublebuffer")=="true")
505+
{
506+
::BufferPool::Switch();
507+
}
508+
// double/single buffer
509+
505510
scan_data.currReader = scan_data.nextReader;
506511
scan_data.currPixelsRecordReader = scan_data.nextPixelsRecordReader;
507512
// asyncReadComplete is not invoked in the first run (is_init_state = true)
508513
if (scan_data.currPixelsRecordReader != nullptr)
509514
{
510515
auto currPixelsRecordReader = std::static_pointer_cast<PixelsRecordReaderImpl>(
511516
scan_data.currPixelsRecordReader);
517+
if (ConfigFactory::Instance().getProperty("pixels.doublebuffer")=="false")
518+
{
519+
//single buffer
520+
currPixelsRecordReader->read();
521+
}
522+
512523
currPixelsRecordReader->asyncReadComplete((int) scan_data.column_names.size());
513524
}
514525
if (scan_data.next_file_index < StorageInstance->getFileSum(scan_data.deviceID))
@@ -526,7 +537,13 @@ bool PixelsScanFunction::PixelsParallelStateNext(ClientContext &context, const P
526537
scan_data.nextPixelsRecordReader = scan_data.nextReader->read(option);
527538
auto nextPixelsRecordReader = std::static_pointer_cast<PixelsRecordReaderImpl>(
528539
scan_data.nextPixelsRecordReader);
529-
nextPixelsRecordReader->read();
540+
541+
if (ConfigFactory::Instance().getProperty("pixels.doublebuffer")==true)
542+
{
543+
//double buffer
544+
// nextPixelsRecordReader->read();
545+
}
546+
530547
} else
531548
{
532549
scan_data.nextReader = nullptr;

cpp/pixels-duckdb/duckdb

Submodule duckdb updated 228 files

cpp/testcase/README-zh.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# 测试
2+
本目录存放了所有测试
3+
4+
## 运行脚本
5+
`process_sqls.py` 运行查询,需要传入benchmark参数指定要运行的benchmark,也需要指定要运行的查询
6+
```bash
7+
usage: process_sqls.py [-h] [--runs RUNS] [--duckdb-bin DUCKDB_BIN] [--sql-dir SQL_DIR]
8+
[--output-csv OUTPUT_CSV] [--wait-after-run WAIT_AFTER_RUN]
9+
[--threads THREADS] [--benchmark BENCHMARK] [--benchmark-json BENCHMARK_JSON]
10+
11+
DuckDB ClickBench Batch Test Script (Multi-column CSV, ensures resource release)
12+
13+
options:
14+
-h, --help show this help message and exit
15+
--runs RUNS Number of runs per SQL file (default: 3)
16+
--duckdb-bin DUCKDB_BIN
17+
Path to duckdb executable
18+
--sql-dir SQL_DIR Directory containing SQL files (only processes .sql files starting with 'q')
19+
--output-csv OUTPUT_CSV
20+
Path to output result CSV
21+
--wait-after-run WAIT_AFTER_RUN
22+
Seconds to wait after each run (ensures resource release, default: 2s)
23+
--threads THREADS Number of threads to use in DuckDB (default: 96)
24+
--benchmark BENCHMARK
25+
Name of benchmark to use (must exist in benchmark JSON, e.g. clickbench-
26+
pixels-e0)
27+
--benchmark-json BENCHMARK_JSON
28+
Path to benchmark configuration JSON file (default: ./benchmark.json)
29+
30+
```
31+
32+
## I/O粒度测试
33+
`blk_stat.py`在执行`process_sqls.py`的同时,调用blktrace和blkprase读取底层块设备的I/O粒度,同时也需要注意运行的查询由`process_sql.py`内置
34+
35+
## 单/双buffer性能测试
36+
`single_doublebuffer_async_sync_test.py` 设置运行参数,执行单双buffer测试
37+
38+
## perf实验
39+

cpp/testcase/benchmark.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"tpch-pixels-e0":"",
3+
"tpch-pixels-e1":"",
4+
"tpch-pixels-e2":"",
5+
"tpch-parquet-e0":"",
6+
"tpch-parquet-e2":"",
7+
"clickbench-parquet-e2":"",
8+
"clickbench-parquet-e0":"CREATE VIEW hits AS SELECT * FROM parquet_scan([\n \"/data/9a3-01/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-02/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-03/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-04/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-05/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-06/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-07/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-08/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-09/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-10/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-11/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-12/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-13/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-14/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-15/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-16/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-17/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-18/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-19/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-20/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-21/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-22/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-23/clickbench/parquet-e0/hits/*\",\n \"/data/9a3-24/clickbench/parquet-e0/hits/*\"\n ]\n);",
9+
"clickbench-pixels-e2":"",
10+
"clickbench-pixels-e0-24ssd":"CREATE VIEW hits AS SELECT * FROM pixels_scan([\n \"/data/9a3-01/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-02/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-03/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-04/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-05/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-06/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-07/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-08/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-09/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-10/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-11/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-12/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-13/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-14/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-15/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-16/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-17/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-18/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-19/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-20/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-21/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-22/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-23/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-24/clickbench/pixels-e0/hits/v-0-ordered/*\"\n ]\n);",
11+
"clickbench-pixels-e1":"",
12+
"clickbench-pixels-e0-1ssd": "CREATE VIEW hits AS SELECT * FROM pixels_scan([\"/data/9a3-01/clickbench/pixels-e0/hits/v-0-ordered/*\"]);\n",
13+
"clickbench-pixels-e0-6ssd": "CREATE VIEW hits AS SELECT * FROM pixels_scan([\n \"/data/9a3-01/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-02/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-03/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-04/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-05/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-06/clickbench/pixels-e0/hits/v-0-ordered/*\"\n ]\n);",
14+
"clickbench-pixels-e0-12ssd": "CREATE VIEW hits AS SELECT * FROM pixels_scan([\n \"/data/9a3-01/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-02/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-03/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-04/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-05/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-06/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-07/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-08/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-09/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-10/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-11/clickbench/pixels-e0/hits/v-0-ordered/*\",\n \"/data/9a3-12/clickbench/pixels-e0/hits/v-0-ordered/*\"\n ]\n);"
15+
}

0 commit comments

Comments
 (0)