Overview
Micro Benchmark
Performance Profiling
Perf_Events tool
Caputure HotSpots
Performance Optimization
Avoid if-else branch
Inline function
Utilize CPU cache
Use AVX-512
First Row Second Column Pattern
Micro Benchmark
Implement one micro benchmark based on Google Benchmark
https://github.com/oap-project/gazelle_plugin/blob/main/native-sql-engine/cpp/src/benchmarks/row_to_columnar_converter_benchmark.cc
Google Benchmark is a C++ microbenchmark support library.
Read huge data, run iteratively.
Data preprocess once, code benchmark many.
Performance Profiling
Perf_Events
An event-oriented observability tool.
Part of the Linux kernel, under tools/perf.
Types of Events
Hardware Events: CPU performance monitoring counters.
Software Events: These are low level events based on kernel counters.
For example, CPU migrations, minor faults, major faults, etc.
…
Event Sampling
When the sampling period expires, it generates an interrupt.
Perf command
src/benchmarks/BenchmarkRowToColumnar --iterations 10 --threads 1 --file /mnt/DP_disk1/part-00095-356249a2-c285-42b9-8a18-5b10be61e0c4-c000.snappy.parquet --cpu 0 &
perf record -e cycles:ppp -C 0 sleep 5
perf report
add_compile_options(-g)
without -g
with -g
Find HotSpot
Zoom in IsNull() HotSpot