You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
IOshark is a repeatable application workload storage benchmark. You
|
|
can find more documentation on IOshark at :
|
|
https://docs.google.com/a/google.com/document/d/1Bhq7iNPVc_JzwRrkmZqcPjMvWgpHX0r3Ncq-ZsRNOBA/edit?usp=sharing
|
|
|
|
The short summary of what IOshark is : IOshark has 2 components, one
|
|
is a strace+ftrace compiler that takes straces and select ftraces fed
|
|
into it and compiles this into bytecodes (stored in *.wl files). The
|
|
compiler runs on a Linux host. The second component (which runs on the
|
|
device) is the tester that takes as input the bytecode files (*.wl
|
|
files) and executes them on the device.
|
|
|
|
How to Run :
|
|
----------
|
|
- First collect straces and compile these into bytecodes. The wrapper
|
|
script provided (collect-straces.sh) collects straces, ships them to
|
|
the host where the script runs, compiles and packages up the bytecode
|
|
files into a wl.tar file.
|
|
- Ship the wl.tar file and the iostark_bench binaries to the target
|
|
device (on /data/local/tmp say). Explode the tarfile.
|
|
- Run the tester. "ioshark_bench *.wl" runs the test with default
|
|
options. Supported ioshark_bench options :
|
|
-b : Explicitly specify a blockdev (to get IO stats from from
|
|
/proc/diskstats).
|
|
-d : Preserve the delays between successive filesystem syscalls as
|
|
seen in the original straces.
|
|
-n <N> : Run for N iterations
|
|
-t <N> : Limit to N threads. By default (without this option), IOshark
|
|
will launch as many threads as there are input files, so 1 thread/file.
|
|
-v : verbose. Chatty mode.
|
|
-s : One line summary.
|
|
-q : Don't create the files in read-only partitions like /system and
|
|
/vendor. Instead do reads on those files.
|
|
|
|
FILE FORMAT :
|
|
-----------
|
|
|
|
Each IOshark workload file is composed of the following
|
|
|
|
Header
|
|
File State : Table of File Entries. Each entry describes a file
|
|
File Op : Table of File Operations. One entry describes one operation
|
|
|
|
Each of the above is described below :
|
|
|
|
Note : Everything is in Big Endian byte order.
|
|
|
|
Header {
|
|
/* IOshark version number */
|
|
u_int64_t ioshark_version;
|
|
/* Total number of files used in this IOshark workload file */
|
|
u_int64_t num_files;
|
|
/* Total number of IO operations in this IOshark workload file */
|
|
u_int64_t num_io_operations;
|
|
}
|
|
|
|
File State {
|
|
u_int64_t fileno;
|
|
u_int64_t size;
|
|
u_int64_t global_filename_ix;
|
|
}
|
|
|
|
File Op {
|
|
/* delta us between previous file op and this */
|
|
u_int64_t delta_us;
|
|
#define file_op file_op_union.file_op_u
|
|
union {
|
|
enum file_op file_op_u;
|
|
int32_t enum_size;
|
|
} file_op_union;
|
|
u_int64_t fileno;
|
|
union {
|
|
struct lseek_args {
|
|
#define lseek_offset u.lseek_a.offset
|
|
#define lseek_action u.lseek_a.action
|
|
u_int64_t offset;
|
|
int32_t action;
|
|
} lseek_a;
|
|
struct prw_args {
|
|
#define prw_offset u.prw_a.offset
|
|
#define prw_len u.prw_a.len
|
|
u_int64_t offset;
|
|
u_int64_t len;
|
|
} prw_a;
|
|
#define rw_len u.rw_a.len
|
|
struct rw_args {
|
|
u_int64_t len;
|
|
} rw_a;
|
|
#define mmap_offset u.mmap_a.offset
|
|
#define mmap_len u.mmap_a.len
|
|
#define mmap_prot u.mmap_a.prot
|
|
struct mmap_args {
|
|
u_int64_t offset;
|
|
u_int64_t len;
|
|
int32_t prot;
|
|
} mmap_a;
|
|
#define open_flags u.open_a.flags
|
|
#define open_mode u.open_a.mode
|
|
struct open_args {
|
|
int32_t flags;
|
|
int32_t mode;
|
|
} open_a;
|
|
} u;
|
|
|
|
}
|