1 IOshark is a repeatable application workload storage benchmark. You 2 can find more documentation on IOshark at : 3 https://docs.google.com/a/google.com/document/d/1Bhq7iNPVc_JzwRrkmZqcPjMvWgpHX0r3Ncq-ZsRNOBA/edit?usp=sharing 4 5 The short summary of what IOshark is : IOshark has 2 components, one 6 is a strace+ftrace compiler that takes straces and select ftraces fed 7 into it and compiles this into bytecodes (stored in *.wl files). The 8 compiler runs on a Linux host. The second component (which runs on the 9 device) is the tester that takes as input the bytecode files (*.wl 10 files) and executes them on the device. 11 12 How to Run : 13 ---------- 14 - First collect straces and compile these into bytecodes. The wrapper 15 script provided (collect-straces.sh) collects straces, ships them to 16 the host where the script runs, compiles and packages up the bytecode 17 files into a wl.tar file. 18 - Ship the wl.tar file and the iostark_bench binaries to the target 19 device (on /data/local/tmp say). Explode the tarfile. 20 - Run the tester. "ioshark_bench *.wl" runs the test with default 21 options. Supported ioshark_bench options : 22 -b : Explicitly specify a blockdev (to get IO stats from from 23 /proc/diskstats). 24 -d : Preserve the delays between successive filesystem syscalls as 25 seen in the original straces. 26 -n <N> : Run for N iterations 27 -t <N> : Limit to N threads. By default (without this option), IOshark 28 will launch as many threads as there are input files, so 1 thread/file. 29 -v : verbose. Chatty mode. 30 -s : One line summary. 31 -q : Don't create the files in read-only partitions like /system and 32 /vendor. Instead do reads on those files. 33 34 FILE FORMAT : 35 ----------- 36 37 Each IOshark workload file is composed of the following 38 39 Header 40 File State : Table of File Entries. Each entry describes a file 41 File Op : Table of File Operations. One entry describes one operation 42 43 Each of the above is described below : 44 45 Note : Everything is in Big Endian byte order. 46 47 Header { 48 /* IOshark version number */ 49 u_int64_t ioshark_version; 50 /* Total number of files used in this IOshark workload file */ 51 u_int64_t num_files; 52 /* Total number of IO operations in this IOshark workload file */ 53 u_int64_t num_io_operations; 54 } 55 56 File State { 57 u_int64_t fileno; 58 u_int64_t size; 59 u_int64_t global_filename_ix; 60 } 61 62 File Op { 63 /* delta us between previous file op and this */ 64 u_int64_t delta_us; 65 #define file_op file_op_union.file_op_u 66 union { 67 enum file_op file_op_u; 68 int32_t enum_size; 69 } file_op_union; 70 u_int64_t fileno; 71 union { 72 struct lseek_args { 73 #define lseek_offset u.lseek_a.offset 74 #define lseek_action u.lseek_a.action 75 u_int64_t offset; 76 int32_t action; 77 } lseek_a; 78 struct prw_args { 79 #define prw_offset u.prw_a.offset 80 #define prw_len u.prw_a.len 81 u_int64_t offset; 82 u_int64_t len; 83 } prw_a; 84 #define rw_len u.rw_a.len 85 struct rw_args { 86 u_int64_t len; 87 } rw_a; 88 #define mmap_offset u.mmap_a.offset 89 #define mmap_len u.mmap_a.len 90 #define mmap_prot u.mmap_a.prot 91 struct mmap_args { 92 u_int64_t offset; 93 u_int64_t len; 94 int32_t prot; 95 } mmap_a; 96 #define open_flags u.open_a.flags 97 #define open_mode u.open_a.mode 98 struct open_args { 99 int32_t flags; 100 int32_t mode; 101 } open_a; 102 } u; 103 104 } 105