Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit aa7d2ef092d5a8e417fcddaf8808fb0d48f1064b:

  Added millisecond-accurate timestamp to JSON output (2016-05-27 14:26:16 -0400)

are available in the git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 385e1da6468bc951a0bf7ae60d890bb4d4a55ded:

  Documentation update (2016-06-02 16:57:20 -0600)

----------------------------------------------------------------
Jens Axboe (3):
      Enable preadv2/pwritev2 engines by default on Linux
      arch: wire up preadv2/pwritev2 for more architectures
      Documentation update

Omar Sandoval (1):
      Fix iodepth_batch=0

 HOWTO               | 11 +++++------
 arch/arch-arm.h     |  7 +++++++
 arch/arch-ia64.h    |  7 +++++++
 arch/arch-s390.h    |  7 +++++++
 arch/arch-sparc.h   |  7 +++++++
 arch/arch-sparc64.h |  7 +++++++
 arch/arch-x86.h     |  7 +++++++
 arch/arch-x86_64.h  |  8 ++++++++
 engines/sync.c      | 10 +++++-----
 fio.1               |  3 ---
 options.c           |  3 +--
 os/os-linux.h       | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 12 files changed, 113 insertions(+), 16 deletions(-)

---

Diff of recent changes:

diff --git a/HOWTO b/HOWTO
index cec4e42..1d4e46c 100644
--- a/HOWTO
+++ b/HOWTO
@@ -53,8 +53,8 @@ bottom, it contains the following basic parameters:
 
 	IO engine	How do we issue io? We could be memory mapping the
 			file, we could be using regular read/write, we
-			could be using splice, async io, syslet, or even
-			SG (SCSI generic sg).
+			could be using splice, async io, or even SG
+			(SCSI generic sg).
 
 	IO depth	If the io engine is async, how large a queuing
 			depth do we want to maintain?
@@ -706,7 +706,9 @@ ioengine=str	Defines how the job issues io to the file. The following
 
 			vsync	Basic readv(2) or writev(2) IO.
 
-			psyncv	Basic preadv(2) or pwritev(2) IO.
+			pvsync	Basic preadv(2) or pwritev(2) IO.
+
+			psync2	Basic preadv2(2) or pwritev2(2) IO.
 
 			libaio	Linux native asynchronous io. Note that Linux
 				may only support queued behaviour with
@@ -726,9 +728,6 @@ ioengine=str	Defines how the job issues io to the file. The following
 				vmsplice(2) to transfer data from user
 				space to the kernel.
 
-			syslet-rw Use the syslet system calls to make
-				regular read/write async.
-
 			sg	SCSI generic sg v3 io. May either be
 				synchronous using the SG_IO ioctl, or if
 				the target is an sg character device
diff --git a/arch/arch-arm.h b/arch/arch-arm.h
index 93268d2..57d9488 100644
--- a/arch/arch-arm.h
+++ b/arch/arch-arm.h
@@ -18,6 +18,13 @@
 #define __NR_sys_vmsplice	343
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		392
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		393
+#endif
+
 #if defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__) \
 	|| defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5E__)\
 	|| defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5TEJ__) \
diff --git a/arch/arch-ia64.h b/arch/arch-ia64.h
index 8e8dd7f..7cdeefc 100644
--- a/arch/arch-ia64.h
+++ b/arch/arch-ia64.h
@@ -18,6 +18,13 @@
 #define __NR_sys_vmsplice	1302
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		1348
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		1349
+#endif
+
 #define nop		asm volatile ("hint @pause" ::: "memory");
 #define read_barrier()	asm volatile ("mf" ::: "memory")
 #define write_barrier()	asm volatile ("mf" ::: "memory")
diff --git a/arch/arch-s390.h b/arch/arch-s390.h
index cc7a1d1..71beb7d 100644
--- a/arch/arch-s390.h
+++ b/arch/arch-s390.h
@@ -18,6 +18,13 @@
 #define __NR_sys_vmsplice	309
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		376
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		377
+#endif
+
 #define nop		asm volatile("nop" : : : "memory")
 #define read_barrier()	asm volatile("bcr 15,0" : : : "memory")
 #define write_barrier()	asm volatile("bcr 15,0" : : : "memory")
diff --git a/arch/arch-sparc.h b/arch/arch-sparc.h
index fe47b80..d0df883 100644
--- a/arch/arch-sparc.h
+++ b/arch/arch-sparc.h
@@ -18,6 +18,13 @@
 #define __NR_sys_vmsplice	25
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		358
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		359
+#endif
+
 #define nop	do { } while (0)
 
 #define read_barrier()	__asm__ __volatile__ ("" : : : "memory")
diff --git a/arch/arch-sparc64.h b/arch/arch-sparc64.h
index e793ae5..5c4e649 100644
--- a/arch/arch-sparc64.h
+++ b/arch/arch-sparc64.h
@@ -18,6 +18,13 @@
 #define __NR_sys_vmsplice	25
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		358
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		359
+#endif
+
 #define nop	do { } while (0)
 
 #define membar_safe(type) \
diff --git a/arch/arch-x86.h b/arch/arch-x86.h
index 385a912..9471a89 100644
--- a/arch/arch-x86.h
+++ b/arch/arch-x86.h
@@ -29,6 +29,13 @@ static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
 #define __NR_sys_vmsplice	316
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		378
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		379
+#endif
+
 #define	FIO_HUGE_PAGE		4194304
 
 #define nop		__asm__ __volatile__("rep;nop": : :"memory")
diff --git a/arch/arch-x86_64.h b/arch/arch-x86_64.h
index 8f33fc5..21da412 100644
--- a/arch/arch-x86_64.h
+++ b/arch/arch-x86_64.h
@@ -36,6 +36,14 @@ static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
 #define __NR_shmdt		 67
 #endif
 
+#ifndef __NR_preadv2
+#define __NR_preadv2		327
+#endif
+#ifndef __NR_pwritev2
+#define __NR_pwritev2		328
+#endif
+
+
 #define	FIO_HUGE_PAGE		2097152
 
 #define nop		__asm__ __volatile__("rep;nop": : :"memory")
diff --git a/engines/sync.c b/engines/sync.c
index 260ef66..433e4fa 100644
--- a/engines/sync.c
+++ b/engines/sync.c
@@ -32,7 +32,7 @@ struct syncio_data {
 	enum fio_ddir last_ddir;
 };
 
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 struct psyncv2_options {
 	void *pad;
 	unsigned int hipri;
@@ -121,7 +121,7 @@ static int fio_pvsyncio_queue(struct thread_data *td, struct io_u *io_u)
 }
 #endif
 
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 static int fio_pvsyncio2_queue(struct thread_data *td, struct io_u *io_u)
 {
 	struct syncio_data *sd = td->io_ops->data;
@@ -429,7 +429,7 @@ static struct ioengine_ops ioengine_pvrw = {
 };
 #endif
 
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 static struct ioengine_ops ioengine_pvrw2 = {
 	.name		= "pvsync2",
 	.version	= FIO_IOOPS_VERSION,
@@ -453,7 +453,7 @@ static void fio_init fio_syncio_register(void)
 #ifdef CONFIG_PWRITEV
 	register_ioengine(&ioengine_pvrw);
 #endif
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 	register_ioengine(&ioengine_pvrw2);
 #endif
 }
@@ -466,7 +466,7 @@ static void fio_exit fio_syncio_unregister(void)
 #ifdef CONFIG_PWRITEV
 	unregister_ioengine(&ioengine_pvrw);
 #endif
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 	unregister_ioengine(&ioengine_pvrw2);
 #endif
 }
diff --git a/fio.1 b/fio.1
index f521c9d..7f053d4 100644
--- a/fio.1
+++ b/fio.1
@@ -633,9 +633,6 @@ File is memory mapped with \fBmmap\fR\|(2) and data copied using
 \fBsplice\fR\|(2) is used to transfer the data and \fBvmsplice\fR\|(2) to
 transfer data from user-space to the kernel.
 .TP
-.B syslet-rw
-Use the syslet system calls to make regular read/write asynchronous.
-.TP
 .B sg
 SCSI generic sg v3 I/O. May be either synchronous using the SG_IO ioctl, or if
 the target is an sg character device, we use \fBread\fR\|(2) and
diff --git a/options.c b/options.c
index 3360784..7a22fe4 100644
--- a/options.c
+++ b/options.c
@@ -1548,7 +1548,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
 			    .help = "Use preadv/pwritev",
 			  },
 #endif
-#ifdef CONFIG_PWRITEV2
+#ifdef FIO_HAVE_PWRITEV2
 			  { .ival = "pvsync2",
 			    .help = "Use preadv2/pwritev2",
 			  },
@@ -1678,7 +1678,6 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
 		.help	= "Number of IO buffers to submit in one go",
 		.parent	= "iodepth",
 		.hide	= 1,
-		.minval	= 1,
 		.interval = 1,
 		.def	= "1",
 		.category = FIO_OPT_C_IO,
diff --git a/os/os-linux.h b/os/os-linux.h
index 23c16b6..b36d33c 100644
--- a/os/os-linux.h
+++ b/os/os-linux.h
@@ -38,6 +38,7 @@
 #define FIO_HAVE_BINJECT
 #define FIO_HAVE_GETTID
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
+#define FIO_HAVE_PWRITEV2
 
 #ifdef MAP_HUGETLB
 #define FIO_HAVE_MMAP_HUGE
@@ -289,4 +290,55 @@ static inline int fio_set_sched_idle(void)
 
 #define FIO_HAVE_STREAMID
 
+#ifndef RWF_HIPRI
+#define RWF_HIPRI	0x00000001
+#endif
+#ifndef RWF_DSYNC
+#define RWF_DSYNC	0x00000002
+#endif
+#ifndef RWF_SYNC
+#define RWF_SYNC	0x00000004
+#endif
+
+#ifndef CONFIG_PWRITEV2
+#ifdef __NR_preadv2
+static inline void make_pos_h_l(unsigned long *pos_h, unsigned long *pos_l,
+				off_t offset)
+{
+	*pos_l = offset & 0xffffffff;
+	*pos_h = ((uint64_t) offset) >> 32;
+
+}
+static inline ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt,
+			      off_t offset, unsigned int flags)
+{
+	unsigned long pos_l, pos_h;
+
+	make_pos_h_l(&pos_h, &pos_l, offset);
+	return syscall(__NR_preadv2, fd, iov, iovcnt, pos_l, pos_h, flags);
+}
+static inline ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,
+			       off_t offset, unsigned int flags)
+{
+	unsigned long pos_l, pos_h;
+
+	make_pos_h_l(&pos_h, &pos_l, offset);
+	return syscall(__NR_pwritev2, fd, iov, iovcnt, pos_l, pos_h, flags);
+}
+#else
+static inline ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt,
+			      off_t offset, unsigned int flags)
+{
+	errno = ENOSYS;
+	return -1;
+}
+static inline ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,
+			       off_t offset, unsigned int flags)
+{
+	errno = ENOSYS;
+	return -1;
+}
+#endif /* __NR_preadv2 */
+#endif /* CONFIG_PWRITEV2 */
+
 #endif
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux