projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update fio io engine version
[fio.git]
/
fio.h
diff --git
a/fio.h
b/fio.h
index 1fb01d9522f5f2d4bd20babd81cc227bb87238e4..1b8a66d1fdac3c0eab6ba2f55efd67f026104880 100644
(file)
--- a/
fio.h
+++ b/
fio.h
@@
-14,6
+14,7
@@
#include <getopt.h>
#include "list.h"
#include <getopt.h>
#include "list.h"
+#include "rbtree.h"
#include "md5.h"
#include "crc32.h"
#include "arch.h"
#include "md5.h"
#include "crc32.h"
#include "arch.h"
@@
-78,7
+79,10
@@
struct io_log {
* When logging io actions, this matches a single sent io_u
*/
struct io_piece {
* When logging io actions, this matches a single sent io_u
*/
struct io_piece {
- struct list_head list;
+ union {
+ struct rb_node rb_node;
+ struct list_head list;
+ };
struct fio_file *file;
unsigned long long offset;
unsigned long len;
struct fio_file *file;
unsigned long long offset;
unsigned long len;
@@
-98,6
+102,8
@@
enum {
IO_U_F_FLIGHT = 1 << 1,
};
IO_U_F_FLIGHT = 1 << 1,
};
+struct thread_data;
+
/*
* The io unit
*/
/*
* The io unit
*/
@@
-158,7
+164,7
@@
struct io_u {
/*
* Callback for io completion
*/
/*
* Callback for io completion
*/
- int (*end_io)(struct io_u *);
+ int (*end_io)(struct
thread_data *, struct
io_u *);
};
/*
};
/*
@@
-176,6
+182,7
@@
enum {
VERIFY_NONE = 0, /* no verification */
VERIFY_MD5, /* md5 sum data blocks */
VERIFY_CRC32, /* crc32 sum data blocks */
VERIFY_NONE = 0, /* no verification */
VERIFY_MD5, /* md5 sum data blocks */
VERIFY_CRC32, /* crc32 sum data blocks */
+ VERIFY_NULL, /* pretend to verify */
};
/*
};
/*
@@
-230,7
+237,9
@@
enum fio_file_flags {
FIO_FILE_OPEN = 1 << 0, /* file is open */
FIO_FILE_UNLINK = 1 << 1, /* unlink on close */
FIO_FILE_CLOSING = 1 << 2, /* file being closed */
FIO_FILE_OPEN = 1 << 0, /* file is open */
FIO_FILE_UNLINK = 1 << 1, /* unlink on close */
FIO_FILE_CLOSING = 1 << 2, /* file being closed */
- FIO_FILE_EXISTS = 1 << 3, /* no need to create */
+ FIO_FILE_EXISTS = 1 << 3, /* file there */
+ FIO_FILE_EXTEND = 1 << 4, /* needs extend */
+ FIO_FILE_NOSORT = 1 << 5, /* don't sort verify blocks */
};
/*
};
/*
@@
-247,11
+256,20
@@
struct fio_file {
unsigned long file_data;
int fd;
};
unsigned long file_data;
int fd;
};
+
+ /*
+ * filename and possible memory mapping
+ */
char *file_name;
void *mmap;
char *file_name;
void *mmap;
- unsigned long long file_size;
+
+ /*
+ * size of the file, offset into file, and io size from that offset
+ */
unsigned long long real_file_size;
unsigned long long file_offset;
unsigned long long real_file_size;
unsigned long long file_offset;
+ unsigned long long io_size;
+
unsigned long long last_pos;
unsigned long long last_completed_pos;
unsigned long long last_pos;
unsigned long long last_completed_pos;
@@
-325,6
+343,7
@@
struct thread_options {
char *opendir;
char *ioengine;
enum td_ddir td_ddir;
char *opendir;
char *ioengine;
enum td_ddir td_ddir;
+ unsigned int ddir_nr;
unsigned int iodepth;
unsigned int iodepth_low;
unsigned int iodepth_batch;
unsigned int iodepth;
unsigned int iodepth_low;
unsigned int iodepth_batch;
@@
-348,6
+367,7
@@
struct thread_options {
unsigned int end_fsync;
unsigned int sync_io;
unsigned int verify;
unsigned int end_fsync;
unsigned int sync_io;
unsigned int verify;
+ unsigned int verifysort;
unsigned int use_thread;
unsigned int unlink;
unsigned int do_disk_util;
unsigned int use_thread;
unsigned int unlink;
unsigned int do_disk_util;
@@
-385,6
+405,7
@@
struct thread_options {
unsigned int nice;
unsigned int file_service_type;
unsigned int group_reporting;
unsigned int nice;
unsigned int file_service_type;
unsigned int group_reporting;
+ unsigned int fadvise_hint;
char *read_iolog_file;
char *write_iolog_file;
char *read_iolog_file;
char *write_iolog_file;
@@
-476,7
+497,6
@@
struct thread_data {
unsigned long rate_blocks;
struct timeval lastrate;
unsigned long rate_blocks;
struct timeval lastrate;
- unsigned long long io_size;
unsigned long long total_io_size;
unsigned long io_issues[2];
unsigned long long total_io_size;
unsigned long io_issues[2];
@@
-493,6
+513,8
@@
struct thread_data {
struct timeval start; /* start of this loop */
struct timeval epoch; /* time job was started */
struct timeval start; /* start of this loop */
struct timeval epoch; /* time job was started */
+ struct timeval rw_end[2];
+ unsigned int rw_end_set[2];
/*
* read/write mixed workload state
/*
* read/write mixed workload state
@@
-501,11
+523,18
@@
struct thread_data {
unsigned long long rwmix_bytes;
struct timeval rwmix_switch;
enum fio_ddir rwmix_ddir;
unsigned long long rwmix_bytes;
struct timeval rwmix_switch;
enum fio_ddir rwmix_ddir;
+ unsigned int ddir_nr;
/*
/*
- * IO historic logs
+ * IO history logs for verification. We use a tree for sorting,
+ * if we are overwriting. Otherwise just use a fifo.
*/
*/
+ struct rb_root io_hist_tree;
struct list_head io_hist_list;
struct list_head io_hist_list;
+
+ /*
+ * For IO replaying
+ */
struct list_head io_log_list;
/*
struct list_head io_log_list;
/*
@@
-686,6
+715,8
@@
extern int fio_cmd_option_parse(struct thread_data *, const char *, char *);
extern void fio_fill_default_options(struct thread_data *);
extern int fio_show_option_help(const char *);
extern void fio_options_dup_and_init(struct option *);
extern void fio_fill_default_options(struct thread_data *);
extern int fio_show_option_help(const char *);
extern void fio_options_dup_and_init(struct option *);
+extern void options_mem_dupe(struct thread_data *);
+extern void options_mem_free(struct thread_data *);
#define FIO_GETOPT_JOB 0x89988998
#define FIO_NR_OPTIONS 128
#define FIO_GETOPT_JOB 0x89988998
#define FIO_NR_OPTIONS 128
@@
-703,6
+734,7
@@
extern void get_file(struct fio_file *);
extern void put_file(struct thread_data *, struct fio_file *);
extern int add_dir_files(struct thread_data *, const char *);
extern int init_random_map(struct thread_data *);
extern void put_file(struct thread_data *, struct fio_file *);
extern int add_dir_files(struct thread_data *, const char *);
extern int init_random_map(struct thread_data *);
+extern void dup_files(struct thread_data *, struct thread_data *);
/*
* ETA/status stuff
/*
* ETA/status stuff
@@
-732,7
+764,7
@@
enum {
*/
extern void populate_verify_io_u(struct thread_data *, struct io_u *);
extern int __must_check get_next_verify(struct thread_data *td, struct io_u *);
*/
extern void populate_verify_io_u(struct thread_data *, struct io_u *);
extern int __must_check get_next_verify(struct thread_data *td, struct io_u *);
-extern int __must_check verify_io_u(struct io_u *);
+extern int __must_check verify_io_u(struct
thread_data *, struct
io_u *);
/*
* Memory helpers
/*
* Memory helpers
@@
-804,7
+836,7
@@
struct ioengine_ops {
void *dlhandle;
};
void *dlhandle;
};
-#define FIO_IOOPS_VERSION
6
+#define FIO_IOOPS_VERSION
7
extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
extern void register_ioengine(struct ioengine_ops *);
extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
extern void register_ioengine(struct ioengine_ops *);