FIO_POSIXAIO = 1 << 3,
FIO_SGIO = 1 << 4,
FIO_SPLICEIO = 1 << 5 | FIO_SYNCIO,
+ FIO_CPUIO = 1 << 6,
};
/*
unsigned char use_thread;
unsigned char do_disk_util;
unsigned char override_sync;
+ unsigned char rand_repeatable;
unsigned int bs;
unsigned int min_bs;
unsigned int thinktime;
unsigned int fsync_blocks;
unsigned int start_delay;
- unsigned int timeout;
+ unsigned long timeout;
enum fio_iotype io_engine;
unsigned int overwrite;
unsigned int bw_avg_time;
unsigned int numjobs;
unsigned int iodepth;
os_cpu_mask_t cpumask;
- unsigned int jobnum;
unsigned int iolog;
unsigned int read_iolog;
unsigned int write_iolog;
unsigned long *file_map;
unsigned int num_maps;
+ /*
+ * CPU "io" cycle burner
+ */
+ unsigned int cpuload;
+ unsigned int cpucycle;
+
/*
* bandwidth and latency stats
*/
struct list_head io_log_list;
};
-#define td_verror(td, err) \
+#define __td_verror(td, err, msg) \
do { \
int e = (err); \
(td)->error = e; \
- snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, error=%s", __FILE__, __LINE__, strerror(e)); \
+ snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, error=%s", __FILE__, __LINE__, (msg)); \
} while (0)
+
+#define td_verror(td, err) __td_verror((td), (err), strerror((err)))
+#define td_vmsg(td, err, msg) __td_verror((td), (err), (msg))
+
extern struct io_u *__get_io_u(struct thread_data *);
extern void put_io_u(struct thread_data *, struct io_u *);
extern int thread_number;
extern int shm_id;
extern int groupid;
+extern int terse_output;
extern FILE *f_out;
extern FILE *f_err;
extern unsigned long mtime_since(struct timeval *, struct timeval *);
extern unsigned long mtime_since_now(struct timeval *);
extern unsigned long time_since_now(struct timeval *);
+extern void __usec_sleep(unsigned int);
extern void usec_sleep(struct thread_data *, unsigned long);
extern void rate_throttle(struct thread_data *, unsigned long, unsigned int);
* Naturally this would not work for any type of contended semaphore or
* for real locking.
*/
-static inline void fio_sem_init(volatile int volatile *sem, int val)
+static inline void fio_sem_init(volatile int *sem, int val)
{
*sem = val;
}
-static inline void fio_sem_down(volatile int volatile *sem)
+static inline void fio_sem_down(volatile int *sem)
{
while (*sem == 0)
usleep(10000);
(*sem)--;
}
-static inline void fio_sem_up(volatile int volatile *sem)
+static inline void fio_sem_up(volatile int *sem)
{
(*sem)++;
}
+/*
+ * If logging output to a file, stderr should go to both stderr and f_err
+ */
+#define log_err(args...) do { \
+ fprintf(f_err, ##args); \
+ if (f_err != stderr) \
+ fprintf(stderr, ##args); \
+ } while (0)
+
#endif