Benchmark for Intel Optane SSD, towards an unwritten contract of Intel Optane SSD
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:
- First init 10% of space with fill_all.fio
- Use fio-mix.fio.template to issue mixed workloads
- 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
- ./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
- 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)
- 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)