• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 /*
20  * Format of the parsed workload files.
21  * 1) Header
22  * 2) Table of the entries, each entry describes 1 file
23  * 3) Table of IO operations to perform on the files
24  */
25 
26 #pragma pack(push, 1)
27 
28 /*
29  * The parsed workload file starts off with the header, which
30  * contains the count of the total # of files that are operated on.
31  * and the total number of IO operations.
32  */
33 struct ioshark_header {
34 #define IOSHARK_VERSION			2
35 	u_int64_t	version;
36 	u_int64_t	num_files;
37 	u_int64_t	num_io_operations;
38 };
39 
40 /*
41  * After the header, we have a table of #files entries. Each entry
42  * in this table describes 1 file, indexed by fileno and with the
43  * specified size.
44  * Before the tests starts, these files are pre-created.
45  */
46 struct ioshark_file_state {
47 	u_int64_t	fileno;	/* 1..num_files, with files name ioshark.<fileno> */
48 	u_int64_t	size;
49 	u_int64_t	global_filename_ix;
50 };
51 
52 enum file_op {
53 	IOSHARK_LSEEK = 0,
54 	IOSHARK_LLSEEK,
55 	IOSHARK_PREAD64,
56 	IOSHARK_PWRITE64,
57 	IOSHARK_READ,
58 	IOSHARK_WRITE,
59 	IOSHARK_MMAP,
60 	IOSHARK_MMAP2,
61 	IOSHARK_OPEN,
62 	IOSHARK_FSYNC,
63 	IOSHARK_FDATASYNC,
64 	IOSHARK_CLOSE,
65 	IOSHARK_MAPPED_PREAD,
66 	IOSHARK_MAPPED_PWRITE,
67 	IOSHARK_MAX_FILE_OP
68 };
69 
70 /* mmap prot flags */
71 #define IOSHARK_PROT_READ	0x1
72 #define IOSHARK_PROT_WRITE	0x2
73 
74 /*
75  * Next we have the table of IO operations to perform. Each
76  * IO operation is described by this entry.
77  */
78 struct ioshark_file_operation {
79 	/* delta us between previous file op and this */
80 	u_int64_t			delta_us;
81 #define ioshark_io_op			op_union.file_op_u
82 	union {
83 		enum file_op		file_op_u;
84 		u_int32_t		enum_size;
85 	} op_union;
86 	u_int64_t			fileno;
87 	union {
88 		struct lseek_args {
89 #define lseek_offset	u.lseek_a.offset
90 #define lseek_action	u.lseek_a.action
91 			u_int64_t	offset;
92 			u_int32_t	action;
93 		} lseek_a;
94 		struct prw_args {
95 #define prw_offset	u.prw_a.offset
96 #define prw_len		u.prw_a.len
97 			u_int64_t	offset;
98 			u_int64_t	len;
99 		} prw_a;
100 #define rw_len		u.rw_a.len
101 		struct rw_args {
102 			u_int64_t	len;
103 		} rw_a;
104 #define mmap_offset	u.mmap_a.offset
105 #define mmap_len	u.mmap_a.len
106 #define mmap_prot	u.mmap_a.prot
107 		struct mmap_args {
108 			u_int64_t	offset;
109 			u_int64_t	len;
110 			u_int32_t	prot;
111 	} mmap_a;
112 #define open_flags	u.open_a.flags
113 #define open_mode	u.open_a.mode
114 		struct open_args {
115 			u_int32_t	flags;
116 			u_int32_t	mode;
117 		} open_a;
118 	} u;
119 };
120 
121 #define MAX_IOSHARK_PATHLEN	512
122 
123 /*
124  * Global table of all fileames
125  */
126 struct ioshark_filename_struct
127 {
128 	char path[MAX_IOSHARK_PATHLEN];
129 };
130 
131 #pragma pack(pop)
132