Mohan Srinivasan | b707f30 | 2017-01-19 16:40:52 -0800 | [diff] [blame] | 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 |
Mohan Srinivasan | 9d00a12 | 2017-03-09 11:24:38 -0800 | [diff] [blame] | 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. |
Mohan Srinivasan | b707f30 | 2017-01-19 16:40:52 -0800 | [diff] [blame] | 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 : |
Mohan Srinivasan | b9d4b52 | 2017-07-12 14:03:16 -0700 | [diff] [blame] | 22 | -b : Explicitly specify a blockdev (to get IO stats from from |
| 23 | /proc/diskstats). |
Mohan Srinivasan | b707f30 | 2017-01-19 16:40:52 -0800 | [diff] [blame] | 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. |
Mohan Srinivasan | 9d00a12 | 2017-03-09 11:24:38 -0800 | [diff] [blame] | 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. |
Mohan Srinivasan | 9dd7870 | 2017-07-19 15:26:57 -0700 | [diff] [blame] | 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 | } |