105 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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;
 | |
| 
 | |
| }
 |