0
6
Login
Code
Issues
1
Pull requests
Events
Packages
main

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 : Run for N iterations -t : 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;

}