/OptaneBench

(Ongoing)Benchmark for Intel Optane SSD, towards an unwritten contract of Intel Optane SSD

Primary LanguageC++GNU General Public License v3.0GPL-3.0

OptaneBench

Benchmark for Intel Optane SSD, towards an unwritten contract of Intel Optane SSD

Microworkloads

Random/Sequential workloads: (Figure 1, 4, 5, 7, 8, 10)

We control workloads with FIO. variables mainly include 0) I/O pattern 2) Queue depth and 3) request size. rand read template: fio/fio-randread.fio.template sequential read template: fio/fio-seqread.fio.template

trim_all.fio before each write workload (to avoid influence from garbage collection) rand write template: fio/fio-randread.fio.template sequential write template: fio/fio-seqread.fio.template

To note: overall queue depth = numjobs * iodepth (we use numjobs = 4 when overall QD >= 4, numjobs = 1 when overall QD < 4)

Mix:

  1. First init 10% of space with fill_all.fio
  2. Use fio-mix.fio.template to issue mixed workloads

Detecting Interleaving Degree (Figure 3)

  • reference: HPDC
  • inititialize the device:
    • trim all data: fio trim_all.fio
    • fill the storage space using sequential writes with a request size of 256KB: ./init device_name device_size(in sector) 512
  • test with different stride:
    • ./multi_thread_aio /dev/nvme0n1 8 2 8 jump 16
    • dev_name D(offset to jump, in unit of sector) j(num_parallel_jobs to submit IO) d(stride/io_size in sector) read_type(random/seq/jump) queue_depth

Parallel Sectors (Figure 6)

  • ./chunk_multi_thread_aio /dev/nvme0n1 0 2 1 randomread 4
  • chunk_multi_thread_aio dev_name D(not useful) j(num_parallel_jobs to submit IO) d(io_size in sector) read_type(random/seq/jump) queue_depth(how many parallel sector reads to a 4KB chunk)
  • blktrace is recommended to track latency of each request

Identifying Alignment Influence (Figure 9)

  • reference: HPDC
  • identify_chunk dev_name M(Estimated Max chunk size) n(req_size) k(offset)
  • M = 64 during the test. vary n and k to test (both in unit of sector)

Detecting Mapping Policy (Figure 11)

  • init with different written order
    • init: sequential write
    • random write: random_overwrite dev_name S(overwritten zone in GB, start from 0) n(req_size in sector)
  • read according to different order:
    • identify_mapping dev_name D(Estimated Max interleave degree) j(num_parallel_jobs) d(stride in chunk(16 sectors)) write_order(write order file name)