Skills

Profile

Profile FalkorDB performance - generate samply flamegraphs and run the benchmark suite.

Install

npx skills add FalkorDB/FalkorDB --skill profile -g -a claude-code -y
Repository
FalkorDB/FalkorDB10.5k
Category
Engineering
Updated
3d ago
License
See repository
Context cost
Lightabout 537 tokens
Runs scripts
No, instructions only

What it does

Profile FalkorDB performance - generate samply flamegraphs and run the benchmark suite. Use when investigating a performance regression/bottleneck or comparing benchmark results. For code-coverage reports use the coverage skill.

Profile

1. Flamegraphs with samply

For finding performance bottlenecks in query execution (full reference: docs/profiling.md):

cargo install samply                              # one-time
# [profile.release] has `debug` commented out in Cargo.toml, so a plain
# --release build has no line info. Add debuginfo for readable flamegraphs:
RUSTFLAGS="-C debuginfo=2" cargo build --release

# record redis-server with the module loaded, run your query/workload
# against it, then stop the server
samply record redis-server --loadmodule ./target/release/libfalkordb.dylib

On stop, samply opens the Firefox Profiler UI in your browser. Use libfalkordb.so on Linux.

2. Benchmark suite

Use the per-query harness in bench/, see the bench skill for the full loop and bench/README.md for the details. In short:

cargo build --release
uv sync --project bench                        # once
uv run --project bench bench measure           # 317 queries -> bench/results/current.csv
uv run --project bench bench compare           # regression gate vs your own baseline

To profile one benchmark query rather than a workload you drive by hand, bench profile "<query name>" records the server with samply while that query runs in a loop, it reuses the harness's own server, so you name the query once.

In CI, labelling a PR benchmark-cov runs the same harness against the PR and its base and posts a per-query comparison, plus deterministic callgrind instruction counts (.github/workflows/benchmark-cov.yml). Those counts are PR-vs-base only, the C engine cannot be measured under callgrind, because it busy-waits on a worker thread valgrind schedules arbitrarily; the vs-C comparison runs on allocated bytes instead. It is on-demand only, so a suspected regression is compared against the PR base rather than against a stored series.

Treat samply flamegraphs above as the primary tool for locating a bottleneck and bench/ for quantifying it.

Read the whole SKILL.md on GitHub

More in Engineering