Recent changes (master)
The following changes since commit ae3a5accfdbe1fbfde6ba4ab583887a7d3d779ac:
verify: add support for the sha3 variants (2017-03-08 09:13:14 -0700)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to ca205a752c3d6ebe7de74a3dfe81808e48a502e3:
configure: Make Cygwin take regular configure path (2017-03-10 14:43:37 -0700)
----------------------------------------------------------------
Tomohiro Kusumi (17):
Add runtime handlers for 97900ebf for FreeBSD/DragonFlyBSD
HOWTO: Add platforms without fdatasync(2)
configure: Align help messages
Avoid irrelevant "offset extend ends" error message for chrdev Fix debug print format of file ->file_name
Fixup for a minor 0 byte file size case
Explicitly check td_trim(td) to detect open(2) flag Drop redundant td_rw(td) tests
Remove unassigned fio_unused variable
Drop fio_unused attribute from used variable
Fix a function name typo in debug print
Don't set FIO_FILE_extend when create_on_open= option is set Minor fixup for "Layint out IO file..." message
HOWTO: Add some details for invalidate=
Define struct file_name as a file local structure Use union for per file engine private data storage
configure: Make Cygwin take regular configure path
HOWTO | 8 +- backend.c | 2 +- configure | 320 +++++++++++++++++++++++++++++++++-------------- engines/glusterfs_sync.c | 2 +- engines/pmemblk.c | 16 +-- engines/sync.c | 2 +- file.h | 17 ++- filesetup.c | 76 ++++++++--- fio.h | 2 +- init.c | 13 +- io_u.c | 4 +- os/os-dragonfly.h | 14 ++- os/os-freebsd.h | 15 ++- os/os-linux.h | 5 + os/os-openbsd.h | 12 +- os/os.h | 7 ++ rate-submit.c | 1 - verify.c | 2 +- 18 files changed, 359 insertions(+), 159 deletions(-)
---
Diff of recent changes:
HOWTO +5 -3
@@ -1104,7 +1104,7 @@ I/O type .. option:: fdatasync=int Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and - not metadata blocks. In FreeBSD and Windows there is no + not metadata blocks. In Windows, FreeBSD, and DragonFlyBSD there is no :manpage:`fdatasync(2)`, this falls back to using :manpage:`fsync(2)`. .. option:: write_barrier=int
@@ -1426,7 +1426,9 @@ Buffers and memory .. option:: invalidate=bool Invalidate the buffer/page cache parts for this file prior to starting - I/O. Defaults to true. + I/O if the platform and file type support it. Defaults to true. + This will be ignored if :option:`pre_read` is also specified for the + same job. .. option:: sync=bool
@@ -1513,7 +1515,7 @@ I/O size Fio will divide this size between the available files determined by options such as :option:`nrfiles`, :option:`filename`, unless :option:`filesize` is specified by the job. If the result of division happens to be 0, the size is - set to the physical size of the given files or devices. + set to the physical size of the given files or devices if they exist. If this option is not specified, fio will use the full size of the given files or devices. If the files do not exist, size must be given. It is also possible to give size as a percentage between 1 and 100. If ``size=20%`` is
backend.c +1 -1
@@ -1693,7 +1693,7 @@ static void *thread_main(void *data)prune_io_piece_log (td); -if (td->o.verify_only && (td_write (td) ||td_rw (td))) +if (td->o.verify_only &&td_write (td)) verify_bytes =do_dry_run (td);else {uint64_t bytes_done[DDIR_RWDIR_CNT ];
configure +224 -96
724 lines not on this page · raw message
engines/glusterfs_sync.c +1 -1
@@ -7,7 +7,7 @@#include "gfapi.h" -#define LAST_POS (f) ((f)->engine_data) +#define LAST_POS (f) ((f)->engine_pos)static int fio_gf_prep (struct thread_data *td,struct io_u *io_u) {struct fio_file *f = io_u->file;
engines/pmemblk.c +6 -10
@@ -86,10 +86,6 @@ struct fio_pmemblk_file {size_t pmb_bsize;size_t pmb_nblocks; }; -#define FIOFILEPMBSET (_f, _v) do { \ - (_f)->engine_data = (uint64_t)(uintptr_t)(_v); \ -} while(0) -#define FIOFILEPMBGET (_f) ((fio_pmemblk_file_t)((_f)->engine_data))static fio_pmemblk_file_t Cache;
@@ -304,26 +300,26 @@ static int fio_pmemblk_open_file(struct thread_data *td, struct fio_file *f)if (!pmb)return 1 ; -FIOFILEPMBSET (f, pmb); +FILE_SET_ENG_DATA (f, pmb);return 0 ; } static int fio_pmemblk_close_file(struct thread_data fio_unused *td,struct fio_file *f) { -fio_pmemblk_file_t pmb =FIOFILEPMBGET (f); +fio_pmemblk_file_t pmb =FILE_ENG_DATA (f);if (pmb)pmb_close (pmb, false); -FIOFILEPMBSET (f,NULL ); +FILE_SET_ENG_DATA (f,NULL );return 0 ; }static int fio_pmemblk_get_file_size (struct thread_data *td,struct fio_file *f) {uint64_t flags =0 ; -fio_pmemblk_file_t pmb =FIOFILEPMBGET (f); +fio_pmemblk_file_t pmb =FILE_ENG_DATA (f);if (fio_file_size_known (f))return 0 ;
@@ -340,7 +336,7 @@ static int fio_pmemblk_get_file_size(struct thread_data *td, struct fio_file *f)fio_file_set_size_known (f); -if (!FIOFILEPMBGET (f)) +if (!FILE_ENG_DATA (f))pmb_close (pmb, true);return 0 ;
@@ -349,7 +345,7 @@ static int fio_pmemblk_get_file_size(struct thread_data *td, struct fio_file *f)static int fio_pmemblk_queue (struct thread_data *td,struct io_u *io_u) {struct fio_file *f = io_u->file; -fio_pmemblk_file_t pmb =FIOFILEPMBGET (f); +fio_pmemblk_file_t pmb =FILE_ENG_DATA (f);unsigned long long off;unsigned long len;
engines/sync.c +1 -1
@@ -18,7 +18,7 @@/* * Sync engine uses engine_data to store last offset */ -#define LAST_POS (f) ((f)->engine_data) +#define LAST_POS (f) ((f)->engine_pos)struct syncio_data {struct iovec *iovecs;
file.h +7 -10
@@ -113,9 +113,12 @@ struct fio_file {unsigned int last_write_idx;/* -* For use by the io engine +* For use by the io engine for offset or private data storage */ -uint64_t engine_data; +union { +uint64_t engine_pos; +void *engine_data; + };/* * if io is protected by a semaphore, this is set
@@ -147,14 +150,8 @@ struct fio_file {struct disk_util *du; }; -#define FILE_ENG_DATA (f) ((void *) (uintptr_t) (f)->engine_data) -#define FILE_SET_ENG_DATA (f, data) \ - ((f)->engine_data = (uintptr_t) (data)) - -struct file_name { -struct flist_head list; -char *filename; -}; +#define FILE_ENG_DATA (f) ((f)->engine_data) +#define FILE_SET_ENG_DATA (f, data) ((f)->engine_data = (data))#define FILE_FLAG_FNS (name) \ static inline void fio_file_set_##name(struct fio_file *f) \
filesetup.c +57 -19
140 lines not on this page · raw message
fio.h +1 -1
@@ -490,7 +490,7 @@ static inline int should_fsync(struct thread_data *td) {if (td->last_was_sync)return 0 ; -if (td_write (td) ||td_rw (td) || td->o.override_sync) +if (td_write (td) || td->o.override_sync)return 1 ;return 0 ;
init.c +8 -5
@@ -356,9 +356,8 @@ static int setup_thread_area(void)perror ("shmat" ); return 1; } -#ifdef FIO_HAVE_SHM_ATTACH_REMOVED -shmctl (shm_id,IPC_RMID ,NULL ); -#endif +if (shm_attach_to_open_removed ()) +shmctl (shm_id,IPC_RMID ,NULL );#endif memset (threads,0 , max_jobs *sizeof (struct thread_data ));
@@ -620,7 +619,7 @@ static int fixup_options(struct thread_data *td)/* * Reads can do overwrites, we always need to pre-create the file */ -if (td_read (td) ||td_rw (td)) +if (td_read (td)) o->overwrite =1 ;if (!o->min_bs[DDIR_READ ])
@@ -765,7 +764,11 @@ static int fixup_options(struct thread_data *td) }if (o->pre_read) { - o->invalidate_cache =0 ; +if (o->invalidate_cache) { +log_info ("fio: ignore invalidate option for %s\n" , + o->name); + o->invalidate_cache =0 ; + }if (td_ioengine_flagged (td,FIO_PIPEIO )) {log_info ("fio: cannot pre-read files with an IO engine" " that isn't seekable. Pre-read disabled.\n" );
io_u.c +2 -2
@@ -643,7 +643,7 @@ int io_u_quiesce(struct thread_data *td) }while (td->io_u_in_flight) { - int fio_unused ret; +int ret; ret =io_u_queued_complete (td,1 );if (ret >0 )
@@ -1960,7 +1960,7 @@ int io_u_queued_complete(struct thread_data *td, int min_evts)int ret, ddir;struct timespec ts = { .tv_sec =0 , .tv_nsec =0 , }; -dprint (FD_IO ,"io_u_queued_completed: min=%d\n" , min_evts); +dprint (FD_IO ,"io_u_queued_complete: min=%d\n" , min_evts);if (!min_evts) tvp = &ts;
os/os-dragonfly.h +12 -2
@@ -24,8 +24,7 @@#define FIO_HAVE_GETTID #define FIO_HAVE_CPU_AFFINITY #define FIO_HAVE_IOPRIO -/* Only have attach-to-open-removed when kern.ipc.shm_allow_removed is 1 */ -#undef FIO_HAVE_SHM_ATTACH_REMOVED +#define FIO_HAVE_SHM_ATTACH_REMOVED #define OS_MAP_ANON MAP_ANON
@@ -234,4 +233,15 @@ static inline int os_trim(int fd, unsigned long long start,#define FIO_MADV_FREE MADV_FREE#endif +static inline int shm_attach_to_open_removed (void ) +{ +int x; +size_t len =sizeof (x); + +if (sysctlbyname ("kern.ipc.shm_allow_removed" , &x, &len,NULL ,0 ) <0 ) +return 0 ; + +return x >0 ?1 :0 ; +} +#endif
os/os-freebsd.h +12 -3
@@ -22,9 +22,7 @@#define FIO_HAVE_TRIM #define FIO_HAVE_GETTID #define FIO_HAVE_CPU_AFFINITY -/* Only have attach-to-open-removed when kern.ipc.shm_allow_removed is 1 */ -#undef FIO_HAVE_SHM_ATTACH_REMOVED - +#define FIO_HAVE_SHM_ATTACH_REMOVED #define OS_MAP_ANON MAP_ANON
@@ -136,4 +134,15 @@ static inline int os_trim(int fd, unsigned long long start,#define FIO_MADV_FREE MADV_FREE#endif +static inline int shm_attach_to_open_removed (void ) +{ +int x; +size_t len =sizeof (x); + +if (sysctlbyname ("kern.ipc.shm_allow_removed" , &x, &len,NULL ,0 ) <0 ) +return 0 ; + +return x >0 ?1 :0 ; +} +#endif
os/os-linux.h +5 -0
@@ -350,4 +350,9 @@ static inline ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,#endif /* __NR_preadv2 */ #endif /* CONFIG_PWRITEV2 */ +static inline int shm_attach_to_open_removed (void ) +{ +return 1 ; +} +#endif
os/os-openbsd.h +9 -3
@@ -22,12 +22,10 @@#define FIO_USE_GENERIC_INIT_RANDOM_STATE #define FIO_HAVE_FS_STAT #define FIO_HAVE_GETTID +#define FIO_HAVE_SHM_ATTACH_REMOVED #undef FIO_HAVE_CPU_AFFINITY/* XXX notyet */ -/* Only OpenBSD 5.1 and above have attach-to-open-removed semantics */ -#undef FIO_HAVE_SHM_ATTACH_REMOVED -#define OS_MAP_ANON MAP_ANON#ifndef PTHREAD_STACK_MIN
@@ -90,4 +88,12 @@ static inline unsigned long long get_fs_free_size(const char *path)#define FIO_MADV_FREE MADV_FREE#endif +static inline int shm_attach_to_open_removed (void ) +{ +/* +* XXX: Return 1 if >= OpenBSD 5.1 according to 97900ebf. +*/ +return 0 ; +} +#endif
os/os.h +7 -0
@@ -386,4 +386,11 @@ static inline int gettid(void) }#endif +#ifndef FIO_HAVE_SHM_ATTACH_REMOVED +static inline int shm_attach_to_open_removed (void ) +{ +return 0 ; +} +#endif +#endif
rate-submit.c +0 -1
@@ -98,7 +98,6 @@ static int io_workqueue_init_worker_fn(struct submit_worker *sw) {struct thread_data *parent = sw->wq->td;struct thread_data *td = sw->priv; - int fio_unused ret;memcpy (&td->o, &parent->o,sizeof (td->o));memcpy (&td->ts, &parent->ts,sizeof (td->ts));
verify.c +1 -1
@@ -851,7 +851,7 @@ static int verify_header(struct io_u *io_u, struct thread_data *td,* state of numberio, that would have been written to each block * in a previous run of fio, has been reached. */ -if ((td_write (td) ||td_rw (td)) && (td_min_bs (td) ==td_max_bs (td)) && +if (td_write (td) && (td_min_bs (td) ==td_max_bs (td)) && !td->o.time_based)if (!td->o.verify_only || td->o.loops ==0 )if (hdr->numberio != io_u->numberio) {