COSBench Benchmarks

COSBencharrow-up-right is Intel's distributed object-storage benchmark — a Controller + Drivers cluster that executes staged XML workloads. Use it for complex, multi-stage read/write workloads, distributed across multiple driver nodes, with mixed operation types.

For when to pick COSBench over Warp or httpbench, see Choosing a Benchmark Tool. For reference throughput from a 4-driver COSBench cluster, see Reference Performance Baselines.

Prerequisites

  • Operating System: CentOS 7 (kernel 3.10) or later. COSBench has known compatibility issues on Ubuntu and is not recommended.

  • Pre-loaded data: For hot-read benchmarks (cache hit), ensure your test dataset is fully loaded into the Alluxio cache. Use bin/alluxio job load --path /path --submit to load data and bin/alluxio fs check-cached /path to verify.

Installation

On all COSBench controller and driver nodes:

  1. Install dependencies:

    sudo yum install nmap-ncat curl java-1.8.0-openjdk-devel -y
  2. Disable MD5 validation — edit cosbench-start.sh and add the following Java property. This is necessary for compatibility with Alluxio's S3 API:

    -Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true
  3. Start the controller and all drivers from the COSBench root directory:

    sudo bash start-all.sh

Usage

Running any scenario below follows the same three steps. Pick an XML workload (see subsections below or write your own), save it under conf/, then:

A COSBench workload is made up of these stages:

Stage
Purpose

init

Creates the test buckets

prepare

Writes the initial data for testing

main

Runs the read/write operations for a set duration

cleanup

Deletes the objects created during the test

dispose

Deletes the buckets

circle-info

If you are using Alluxio mount points, you cannot create new buckets via the S3 API. Skip the init and dispose stages and use pre-existing buckets that match your mount configuration.

COSBench config syntax:

  • r(1,10)range: sequentially iterates over items 1 through 10. Used in init, prepare, cleanup, and dispose stages.

  • u(1,10)uniform random: randomly selects an item between 1 and 10. Used in main stage for realistic access patterns.

  • c(64)KBconstant: fixed size of 64KB per object.

circle-info

Bucket naming: COSBench appends a numeric suffix to cprefix. For example, cprefix=my-bucket;containers=r(1,1) creates a bucket named my-bucket1, not my-bucket. When using pre-existing buckets (e.g., Alluxio mount points), set cprefix so the generated names match exactly — for a bucket named my-bucket1, use cprefix=my-bucket with containers=r(1,1).

Scenario: Basic Read/Write Workload

Goal: Verify basic S3 read/write functionality with a small dataset.

Creates two buckets, writes 10 objects of 64 KB to each, runs a 30-second test with an 80/20 read-write ratio, and then cleans up.

circle-info

The accesskey and secretkey below are placeholder values. Replace them with your Alluxio S3 API credentials.

Scenario: High-Concurrency Read Test

Goal: Measure maximum read IOPS/throughput under heavy concurrency. Key difference from the basic example: uses 4 distributed drivers with 128 threads each.

Prepares 10,000 small objects (100 KB) and uses four drivers, each with 128 worker threads, to read concurrently for 300 seconds.

circle-info

Each <work> block is repeated per driver because COSBench requires explicit driver assignment for distributed workloads. Each block sends traffic from a separate driver node to maximize aggregate concurrency.

Troubleshooting

  • init stage fails against Alluxio — Alluxio mount points do not support bucket creation via S3 API. Skip init/dispose stages and use pre-existing buckets.

For cross-tool troubleshooting (redirect-mode behavior, kernel tuning, cache-hit verification), see Performance Tuning and Troubleshooting on the hub page.

See Also

Last updated