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 /* 18 * Format of the parsed workload files. 19 * 1) Header 20 * 2) Table of the entries, each entry describes 1 file 21 * 3) Table of IO operations to perform on the files 22 */ 23 24 #pragma pack(push, 1) 25 26 /* 27 * The parsed workload file starts off with the header, which 28 * contains the count of the total # of files that are operated on. 29 * and the total number of IO operations. 30 */ 31 struct ioshark_header { 32 #define IOSHARK_VERSION 2 33 u_int64_t version; 34 u_int64_t num_files; 35 u_int64_t num_io_operations; 36 }; 37 38 /* 39 * After the header, we have a table of #files entries. Each entry 40 * in this table describes 1 file, indexed by fileno and with the 41 * specified size. 42 * Before the tests starts, these files are pre-created. 43 */ 44 struct ioshark_file_state { 45 u_int64_t fileno; /* 1..num_files, with files name ioshark.<fileno> */ 46 u_int64_t size; 47 u_int64_t global_filename_ix; 48 }; 49 50 enum file_op { 51 IOSHARK_LSEEK = 0, 52 IOSHARK_LLSEEK, 53 IOSHARK_PREAD64, 54 IOSHARK_PWRITE64, 55 IOSHARK_READ, 56 IOSHARK_WRITE, 57 IOSHARK_MMAP, 58 IOSHARK_MMAP2, 59 IOSHARK_OPEN, 60 IOSHARK_FSYNC, 61 IOSHARK_FDATASYNC, 62 IOSHARK_CLOSE, 63 IOSHARK_MAPPED_PREAD, 64 IOSHARK_MAPPED_PWRITE, 65 IOSHARK_MAX_FILE_OP 66 }; 67 68 /* mmap prot flags */ 69 #define IOSHARK_PROT_READ 0x1 70 #define IOSHARK_PROT_WRITE 0x2 71 72 /* 73 * Next we have the table of IO operations to perform. Each 74 * IO operation is described by this entry. 75 */ 76 struct ioshark_file_operation { 77 /* delta us between previous file op and this */ 78 u_int64_t delta_us; 79 #define ioshark_io_op op_union.file_op_u 80 union { 81 enum file_op file_op_u; 82 u_int32_t enum_size; 83 } op_union; 84 u_int64_t fileno; 85 union { 86 struct lseek_args { 87 #define lseek_offset u.lseek_a.offset 88 #define lseek_action u.lseek_a.action 89 u_int64_t offset; 90 u_int32_t action; 91 } lseek_a; 92 struct prw_args { 93 #define prw_offset u.prw_a.offset 94 #define prw_len u.prw_a.len 95 u_int64_t offset; 96 u_int64_t len; 97 } prw_a; 98 #define rw_len u.rw_a.len 99 struct rw_args { 100 u_int64_t len; 101 } rw_a; 102 #define mmap_offset u.mmap_a.offset 103 #define mmap_len u.mmap_a.len 104 #define mmap_prot u.mmap_a.prot 105 struct mmap_args { 106 u_int64_t offset; 107 u_int64_t len; 108 u_int32_t prot; 109 } mmap_a; 110 #define open_flags u.open_a.flags 111 #define open_mode u.open_a.mode 112 struct open_args { 113 u_int32_t flags; 114 u_int32_t mode; 115 } open_a; 116 } u; 117 }; 118 119 #define MAX_IOSHARK_PATHLEN 512 120 121 /* 122 * Global table of all fileames 123 */ 124 struct ioshark_filename_struct 125 { 126 char path[MAX_IOSHARK_PATHLEN]; 127 }; 128 129 #pragma pack(pop) 130