Benchmark Guide
This guide covers the benchmark scripts shipped in the Curvine reference repository. The scripts live in build/tests/ in the source tree and are copied to build/dist/tests/ by build/build.sh.
Before You Startâ
Build the distribution and point CURVINE_HOME at it:
git clone https://github.com/CurvineIO/curvine.git
cd curvine
make all
export CURVINE_HOME=$PWD/build/dist
The benchmark scripts expect:
- a running Curvine cluster
CURVINE_HOME/conf/curvine-cluster.tomlCURVINE_HOME/lib/to contain the required binaries or jars
You can either run scripts from the repository root as build/tests/... after exporting CURVINE_HOME, or cd build/dist and run the copied scripts as tests/....
Benchmark Familiesâ
meta-bench.sh: Java metadata benchmarkcurvine-bench.sh: Rust throughput benchmarkjava-bench.sh: Java throughput benchmarkfio-test.sh: FIO benchmark against a mounted FUSE path
Metadata Benchmarkâ
build/tests/meta-bench.sh runs io.curvine.bench.NNBenchWithoutMR with these built-in defaults:
-threads 10-baseDir cv://default/fs-meta-numFiles 1000-bytesToWrite 0
Supported operations from the script are createWrite, openRead, rename, delete, and rmdir.
build/tests/meta-bench.sh createWrite
build/tests/meta-bench.sh openRead
Or from the built distribution:
cd build/dist
tests/meta-bench.sh createWrite
This benchmark requires the Java SDK jar under lib/curvine-hadoop-*shade.jar, which is produced by the normal make all flow.
Throughput Benchmarksâ
Rust client benchmarkâ
build/tests/curvine-bench.sh shells into lib/curvine-bench with these defaults:
--checksum true--client-threads 10--buf-size 128KB--file-size 100MB--file-num 10
If no directory is provided, the script uses /fs-bench for fs.* actions and /curvine-fuse/fs-bench for fuse.* actions.
build/tests/curvine-bench.sh fs.write /fs-bench
build/tests/curvine-bench.sh fs.read /fs-bench
build/tests/curvine-bench.sh fuse.write /curvine-fuse/fs-bench
build/tests/curvine-bench.sh fuse.read /curvine-fuse/fs-bench
Or from the built distribution:
cd build/dist
tests/curvine-bench.sh fs.write /fs-bench
Java client benchmarkâ
build/tests/java-bench.sh runs io.curvine.bench.CurvineBenchV2 with:
-threads 10-bufferSize 128kb-fileSize 100mb-fileNum 10-checksum true-clearDir false
build/tests/java-bench.sh fs.write /fs-bench
build/tests/java-bench.sh fs.read /fs-bench
build/tests/java-bench.sh fuse.write /curvine-fuse/fs-bench
build/tests/java-bench.sh fuse.read /curvine-fuse/fs-bench
FIO Benchmarkâ
build/tests/fio-test.sh runs FIO against a mounted FUSE directory. The script defaults are:
- test directory:
/curvine-fuse/fio-test - size:
500m - runtime:
30s - jobs:
1 - direct I/O:
1 - verification:
1 - cleanup:
1
The script checks that the parent directory is an active mount point and that fio is installed before running.
build/tests/fio-test.sh
build/tests/fio-test.sh -t /curvine-fuse/fio-test --size 1G --runtime 60s --numjobs 4
build/tests/fio-test.sh --json-output /tmp/fio-test-results.json
Or from build/dist:
cd build/dist
tests/fio-test.sh
Practical Notesâ
make allis the simplest path because it buildscurvine-bench, the Java SDK jar, launch wrappers, and the copiedtests/directory together.- If you customize the FUSE mount path with
bin/curvine-fuse.sh --mnt-path ..., pass the same path tocurvine-bench.shorfio-test.sh -t. - Benchmark scripts source
conf/curvine-env.sh, soCURVINE_HOMEmust point to the install root rather than the repository root.
Troubleshootingâ
- Missing
curvine-bench: rebuild withmake allor include thetestspackage. - Missing
curvine-hadoop-*shade.jar: rebuild without--skip-java-sdk. - FIO says the path is not mounted: start FUSE first and verify with
mount | grep curvine. - Cluster connection failures: verify
conf/curvine-cluster.tomland use the checks in Debugging Guide.