You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.8 KiB
119 lines
2.8 KiB
/* |
|
* Copyright (C) 2016 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
/* |
|
* Format of the parsed workload files. |
|
* 1) Header |
|
* 2) Table of the entries, each entry describes 1 file |
|
* 3) Table of IO operations to perform on the files |
|
*/ |
|
|
|
/* |
|
* The parsed workload file starts off with the header, which |
|
* contains the count of the total # of files that are operated on. |
|
* and the total number of IO operations. |
|
*/ |
|
struct ioshark_header { |
|
int num_files; |
|
int num_io_operations; |
|
}; |
|
|
|
/* |
|
* After the header, we have a table of #files entries. Each entry |
|
* in this table describes 1 file, indexed by fileno and with the |
|
* specified size. |
|
* Before the tests starts, these files are pre-created. |
|
*/ |
|
struct ioshark_file_state { |
|
int fileno; /* 1..num_files, with files name ioshark.<fileno> */ |
|
size_t size; |
|
int global_filename_ix; |
|
}; |
|
|
|
enum file_op { |
|
IOSHARK_LSEEK = 0, |
|
IOSHARK_LLSEEK, |
|
IOSHARK_PREAD64, |
|
IOSHARK_PWRITE64, |
|
IOSHARK_READ, |
|
IOSHARK_WRITE, |
|
IOSHARK_MMAP, |
|
IOSHARK_MMAP2, |
|
IOSHARK_OPEN, |
|
IOSHARK_FSYNC, |
|
IOSHARK_FDATASYNC, |
|
IOSHARK_CLOSE, |
|
IOSHARK_MAPPED_PREAD, |
|
IOSHARK_MAPPED_PWRITE, |
|
IOSHARK_MAX_FILE_OP |
|
}; |
|
|
|
/* mmap prot flags */ |
|
#define IOSHARK_PROT_READ 0x1 |
|
#define IOSHARK_PROT_WRITE 0x2 |
|
|
|
/* |
|
* Next we have the table of IO operatiosn to perform. Each |
|
* IO operation is described by this entry. |
|
*/ |
|
struct ioshark_file_operation { |
|
/* delta us between previous file op and this */ |
|
u_int64_t delta_us; |
|
enum file_op file_op; |
|
int fileno; |
|
union { |
|
struct lseek_args { |
|
#define lseek_offset u.lseek_a.offset |
|
#define lseek_action u.lseek_a.action |
|
off_t offset; |
|
int action; |
|
} lseek_a; |
|
struct prw_args { |
|
#define prw_offset u.prw_a.offset |
|
#define prw_len u.prw_a.len |
|
off_t offset; |
|
size_t len; |
|
} prw_a; |
|
#define rw_len u.rw_a.len |
|
struct rw_args { |
|
size_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 { |
|
off_t offset; |
|
size_t len; |
|
int prot; |
|
} mmap_a; |
|
#define open_flags u.open_a.flags |
|
#define open_mode u.open_a.mode |
|
struct open_args { |
|
int flags; |
|
mode_t mode; |
|
} open_a; |
|
} u; |
|
}; |
|
|
|
#define MAX_IOSHARK_PATHLEN 512 |
|
|
|
/* |
|
* Global table of all fileames |
|
*/ |
|
struct ioshark_filename_struct |
|
{ |
|
char path[MAX_IOSHARK_PATHLEN]; |
|
};
|
|
|