converted all backends to new common format
[tridge/dbench.git] / dbench.h
index a13d9c1c4228828fe042f311d5bd48994b5fb275..c9aada6841fc034acdb21171031088b4ca2e3e27 100644 (file)
--- a/dbench.h
+++ b/dbench.h
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <stddef.h>
 #include <signal.h>
 #include <unistd.h>
 #include <string.h>
 #include <sys/ipc.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
+
+#ifdef HAVE_SYS_VFS_H
 #include <sys/vfs.h>
+#endif
+
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+
+#include <sys/param.h>
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
 #include <utime.h>
 #include <errno.h>
 #include <strings.h>
+#ifdef HAVE_STDINT_H
 #include <stdint.h>
+#endif
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <netdb.h>
 #include <sys/attributes.h>
 #endif
 
+#ifdef HAVE_SYS_EXTATTR_H
+#include <sys/extattr.h>
+#endif
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
 #ifndef MSG_WAITALL
 #define MSG_WAITALL 0x100
 #endif
 
 #define PRINT_FREQ 1
 
+#ifndef MIN
 #define MIN(x,y) ((x)<(y)?(x):(y))
+#endif
 
 #define TCP_PORT 7003
 #define TCP_OPTIONS "TCP_NODELAY SO_REUSEADDR"
 #define False 0
 #define uint32 unsigned
 
+struct op {
+       unsigned count;
+       double total_time;
+       double max_latency;
+};
+
+#define ZERO_STRUCT(x) memset(&(x), 0, sizeof(x))
+
+#define MAX_OPS 100
+
 struct child_struct {
        int id;
-       int nprocs;
-       int status;
        int failed;
        int line;
        int done;
        int cleanup;
+       int cleanup_finished;
        const char *directory;
        double bytes;
        double bytes_done_warmup;
+       double max_latency;
+       double worst_latency;
+       struct timeval starttime;
+       struct timeval lasttime;
+       off_t bytes_since_fsync;
+       char *cname;
+       struct {
+               double last_bytes;
+               struct timeval last_time;
+       } rate;
+       struct op ops[MAX_OPS];
+       void *private;
+};
+
+struct options {
+       int nprocs;
+       int sync_open;
+       int sync_dirs;
+       int do_fsync;
+       int no_resolve;
+       int fsync_frequency;
+       char *tcp_options;
+       int timelimit;
+       int warmup;
+       const char *directory;
+       char *loadfile;
+       double targetrate;
+       int ea_enable;
+       const char *server;
+       int clients_per_process;
+       int one_byte_write_fix;
+       int stat_check;
+       int fake_io;
+       int skip_cleanup;
+       int per_client_results;
+       const char *export;
+       const char *protocol;
 };
 
 
+struct dbench_op {
+       struct child_struct *child;
+       const char *op;
+       const char *fname;
+       const char *fname2;
+       const char *status;
+       int params[10];
+};
+
+struct backend_op {
+       const char *name;
+       void (*fn)(struct dbench_op *);
+};
+
+struct nb_operations {
+       const char *backend_name;       
+       struct backend_op *ops;
+       void (*setup)(struct child_struct *child);
+       void (*cleanup)(struct child_struct *child);
+};
+extern struct nb_operations nb_ops;
+
 /* CreateDisposition field. */
 #define FILE_SUPERSEDE 0
 #define FILE_OPEN 1
@@ -104,5 +196,8 @@ struct child_struct {
 #define O_DIRECTORY    0200000
 #endif
 
+struct nfsio;
+
 #include "proto.h"
 
+extern struct options options;