Crate IO workload overview.
Crate supports two types of object I/O Operations:
- Multiple threads writing/reading on/from the same object.
- Each thread writing/reading on/from different objects.
For each of the above task I/O can be generated sequentially or parallely. For example, Two threads to share the object and write randomly:
NR_THREADS: 2
THREAD_OPS: 1
RAND_IO: 1
IOSIZE: 10M
BLOCK_SIZE: 32768
It is means, that crate performs next operations:
Create a single object.
Each
thread writes 4096 bytes Randomly on a shared
object.
Crate I/O workload detailed description.
Workload has following parameters:
- WORKLOAD_TYPE: always 1 (I/O operations).
- WORKLOAD_SEED: initial value for pseudo-random generator (int or "tstamp").
- OPCODE: 0-CREATE, 1-OPEN, 2-WRITE, 3-READ, 4-DELETE.
- IOSIZE: - total size of I/O to perform per object.
- BLOCK_SIZE: For performance == parity group size.
- BLOCKS_PER_OP: - Number of blocks per Client operation.
- RAND_IO: Random (1) or sequential (0) IO?
- MAX_NR_OPS: - Max number of concurrent operations per thread.
- NR_OBJS - Each thread will create these many objects.
- NR_THREADS: - Number of threads.
- EXEC_TIME - time limit for executing (seconds or "unlimited").
- NR_ROUNDS: - How many times this workload to be executed.
Measurements
Currently, only execution time is measured during the test. It measures with m0_time*
functions. Crate prints result to stdout when test is finished.
Logging
crate has own logging system, which based on fprintf(stderr...)
. (see crlog and see cr_log).
Execution time limits
There are two ways to limit execution time. The first, is operations time limit, which checks after operation executed (as described in HLD).