ports/129606: iozone port does not support O_DIRECT

Ping Mai pingmai at yahoo.com
Sat Dec 13 09:30:02 UTC 2008


>Number:         129606
>Category:       ports
>Synopsis:       iozone port does not support O_DIRECT
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Dec 13 09:30:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Ping Mai
>Release:        6R, 7R
>Organization:
>Environment:
FreeBSD agra.pinelake.stepnet.com 6.4-PRERELEASE FreeBSD 6.4-PRERELEASE #7: Tue Dec  2 14:00:15 PST 2008     root at agra.pinelake.stepnet.com:/usr/src/sys/i386/compile/AGRA  i386
>Description:
iozone does not support O_DIRECT (-I) in freebsd.

>How-To-Repeat:
iozone -I does not use O_DIRECT I/O

>Fix:
fix based on port iozone-3.283_1

see patch-makefile and patch-iozone.c

see attached patch files.
they will make iozone use O_DIRECT when "-I" switch is supplied on cmd line.

ping at agra /usr/ports/benchmarks/iozone/files$ diff -u patch-makefile.orig patch-makefile
--- patch-makefile.orig 2008-12-13 01:17:41.000000000 -0800
+++ patch-makefile      2008-12-11 11:49:41.000000000 -0800
@@ -1,6 +1,6 @@
---- makefile.orig      Sat Oct 28 22:48:00 2006
-+++ makefile   Thu Jan 11 21:41:17 2007
-@@ -389,7 +389,7 @@
+--- makefile.orig      2007-02-19 09:12:18.000000000 -0800
++++ makefile   2008-12-11 11:48:52.000000000 -0800
+@@ -400,7 +400,7 @@
  #
  
  freebsd:      iozone_freebsd.o libbif.o fileop_freebsd.o libasync.o
@@ -9,3 +9,20 @@
                -o iozone
        $(CC)  -O fileop_freebsd.o -o fileop
  
+@@ -1089,13 +1089,13 @@
+       @echo ""
+       @echo "Build iozone for FreeBSD"
+       @echo ""
+-      $(CC) -c ${CFLAGS}  -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
++      $(CC) -c ${CFLAGS} -Dfreebsd -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
+               -DHAVE_PREAD -DNAME='"freebsd"' -DSHARED_MEM \
+               $(CFLAGS) iozone.c -o iozone_freebsd.o
+-      $(CC) -c ${CFLAGS} -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
++      $(CC) -c ${CFLAGS} -Dfreebsd -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
+               -DSHARED_MEM -DHAVE_PREAD $(CFLAGS) libbif.c \
+               -o libbif.o
+-      $(CC) -c ${CFLAGS} -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
++      $(CC) -c ${CFLAGS} -Dfreebsd -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
+               -DSHARED_MEM -DHAVE_PREAD $(CFLAGS) libasync.c \
+               -o libasync.o
+ 

Patch attached with submission follows:

--- iozone.c.orig	2007-02-19 09:12:18.000000000 -0800
+++ iozone.c	2008-12-13 01:07:56.000000000 -0800
@@ -268,6 +268,12 @@
 #endif
 #endif
 
+#if defined (__FreeBSD__)
+#ifndef O_RSYNC
+#define O_RSYNC O_FSYNC
+#endif
+#endif
+
 #if ((defined(solaris) && defined(__LP64__)) || defined(__s390x__))
 /* If we are building for 64-bit Solaris, all functions that return pointers
  * must be declared before they are used; otherwise the compiler will assume
@@ -741,7 +747,7 @@
 /* At 16 Meg switch to large records */
 #define CROSSOVER (16*1024)		
 /* Maximum buffer size*/
-#define MAXBUFFERSIZE (16*1024*1024)		
+#define MAXBUFFERSIZE (32*1024*1024)		
 #endif
 
 /* Maximum number of children. Threads/procs/clients */
@@ -1652,7 +1658,7 @@
 			break;
 #endif
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 			direct_flag++;
 			sprintf(splash[splash_line++],"\tO_DIRECT feature enabled\n");
 			break;
@@ -6401,7 +6407,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		file_flags |=O_DIRECT;
 #endif
@@ -7353,7 +7359,7 @@
 		open_flags |=O_RSYNC|O_SYNC;
 #endif
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		open_flags |=O_DIRECT;
 #endif
@@ -7830,7 +7836,7 @@
 	numrecs64 = (kilo64*1024)/reclen;
 	flags = O_RDWR;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -8258,7 +8264,7 @@
 	maddr=wmaddr=0;
 	open_flags=O_RDONLY;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		open_flags |=O_DIRECT;
 #endif
@@ -8542,7 +8548,7 @@
 /*	flags = O_RDWR|O_CREAT|O_TRUNC;*/
 	flags = O_RDWR|O_CREAT;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -8846,7 +8852,7 @@
 	nbuff=maddr=wmaddr=0;
 	open_flags=O_RDONLY;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		open_flags |=O_DIRECT;
 #endif
@@ -9174,7 +9180,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags_here |=O_DIRECT;
 #endif
@@ -9445,7 +9451,7 @@
 	nbuff=mainbuffer;
 	open_flags=O_RDONLY;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		open_flags |=O_DIRECT;
 #endif
@@ -9691,7 +9697,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags_here |=O_DIRECT;
 #endif
@@ -10021,7 +10027,7 @@
 
 	open_flags=O_RDONLY;
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		open_flags |=O_DIRECT;
 #endif
@@ -11314,7 +11320,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -11952,7 +11958,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -12510,7 +12516,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -13010,7 +13016,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -13538,7 +13544,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -14033,7 +14039,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -14545,7 +14551,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -15018,7 +15024,7 @@
 		flags |=O_RSYNC|O_SYNC;
 #endif
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -15560,7 +15566,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -16091,7 +16097,7 @@
 #endif
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 	if(direct_flag)
 		flags |=O_DIRECT;
 #endif
@@ -17006,7 +17012,7 @@
 	 	file_flags=fcntl(fd,F_GETFL);
 
 #if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64)
+#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(freebsd)
 		dflag = O_DIRECT;
 #endif
 #if defined(TRU64)


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list