119 lines
2.8 KiB
C
119 lines
2.8 KiB
C
/*
|
|
* 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];
|
|
};
|