Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 3.3 KB

io-tester.md

File metadata and controls

81 lines (62 loc) · 3.3 KB

I/O Tester utility

The I/O Tester utility, io_tester generates a user-defined I/O pattern spanning one of multiple shards that is designed to simulate the I/O behavior of a complex Seastar application.

Running I/O tester:

I/O tester takes the same options as Seastar, and those options may be used to test the behavior of I/O under the circumnstances established by those options. For instance, one may adjust the --task-quota-ms option to see if that affects higher percentile latencies.

Aside from the usual seastar options, I/O tester accepts the following options:

  • duration: for how long to run the evaluation,
  • directory: a directory where to run the evaluation,
  • conf: the path to a YAML file describing the evaluation.

Describing the evaluation

The evaluation is described in a YAML file that contains multiple classes. Each class spans jobs of similar characteristics in different shards and (for now) all jobs run concurrently.

The YAML file contains a list of maps where each element of the list describes a class. A class has some properties that are common to all elements of the class, and a nested map that contain properties of a job (class instance in a shard)

For example:

- name: big_writes
  type: seqread
  shards: all
  shard_info:
    parallelism: 10
    reqsize: 256kB
    shares: 10
    think_time: 0
  • name: mandatory property, a string that identifies jobs of this class
  • type: mandatory property, one of seqread, seqwrite, randread, randwrite, append, cpu
  • shards: mandatory property, either the string "all" or a list of shards where this class should place jobs.

The properties under shard_info represent properties of the job that will be replicated to each shard. All properties under shard_info are optional, and in case not specified, defaults are used.

  • parallelism: the amount of parallel requests this job will generate in a specific shard. Requests can be either active or thinking (see think_time)
  • reqsize : (I/O loads only) the size of requests generated by this job
  • shares : how many shares requests in this job will have in the scheduler
  • think_time: how long to wait before submitting another request in this job once one finishes.
  • execution_time: (cpu loads only) for how long to execute a CPU loop

Example output

      Creating initial files...
      Starting evaluation...
      Shard  0
       Class 0(big_writes: 10 shares, 262144-byte SEQ WRITE, 10 concurrent requests, NO think time)
        Throughput         :   436556 KB/s
        Lat average        :     5847 usec
        Lat quantile=  0.5 :     2678 usec
        Lat quantile= 0.95 :    13029 usec
        Lat quantile= 0.99 :    20835 usec
        Lat quantile=0.999 :   246090 usec
        Lat max            :   450785 usec

Future

Some ideas for extending I/O tester:

  • allow properties like think time, request size, etc, to be specified as distributions instead of a fixed number
  • allow classes to have class-wide properties. For instance, we could define a class with parallelism of 100, and distribute those 100 requests over all shards in which this class is placed
  • allow some jobs to be executed sequentially in relationship to others, so we can have preparation jobs.
  • support other types, like delete, fsync, etc.
  • provide functionality similar to diskplorer.