Skip to content

CAPI RowCache Performance

Rei Odaira edited this page Jul 21, 2017 · 3 revisions

This page shows the performance results of CAPI-RowCache. We ran read-100% and read-80%/update-20% workloads in the Yahoo! Cloud Serving Benchmark. The data set was stored in a NVMe flash card and was 200-GB large. The machine had 64-GB main memory, so Cassandra's original RowCache did not help because it could not cache the entire data set. We used 820 GB in a CAPI Flash card for CAPI-RowCache.

This figure shows the results of read 100%. CAPI-RowCache was 84% faster than the original Cassandra. CAPI-RowCache YCSB results of read 100%

This figure shows the results of read 80%/update 20%. CAPI-RowCache was 65% faster. CAPI-RowCache YCSB results of read 80%/update20%

In the original Cassandra, almost all of the read requests went to SSTables on the NVMe flash card. With CAPI-RowCache, after the warm-up, almost all of the read requests were served from CAPI-RowCache, which also internally uses NVMe flash storage but provides lower-overhead access.

Experimental settings

YCSB

  • YCSB 0.12.0
  • 400,000,000 operation count
  • 200 YCSB client threads in total
  • 10 YCSB client instances

Apache Cassandra

  • trunk commit 1d7466425b96dcf4e1ebf68eceed4858fbbd6e29
  • concurrent_reads: 512
  • concurrent_writes: 512
  • concurrent_counter_writes: 512
  • memtable_flush_writers: 32
  • src/java/org/apache/cassandra/transport/RequestThreadPoolExecutor.java#MAX_QUEUED_REQUESTS = 512
  • native_transport_max_threads: 512
  • row_cache_size_in_mb: 128
  • 18-GB Java heap

Machine

  • POWER8 8335-GCA (3.5GHz)
  • 64GB DDR4 main memory
  • SMT8
  • One NUMA node (10 cores) dedicated for Apache Cassandra, the other NUMA node dedicated for YCSB clients
  • performance CPU governor used
  • Ubuntu 16.04.1
  • HGST Ultrastar SN100 NVMe SSD

CAPI Flash and CAPI-RowCache

  • NVMe edition (EJ1K)
  • -Dcapi.devices=/dev/sg0:0:410,/dev/sg1:0:410
  • -Dcapi.hash=org.apache.cassandra.cache.capi.YCSBKeyHashFunction
Clone this wiki locally