📄 iozone.c
字号:
} VOLATILE *child_stat;/* * Used for cpu time statistics. */struct runtime { float walltime; float cputime; float cpuutil;};#ifdef __convex_spp#include <sys/cnx_ail.h>#endif#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>/* * Messages the controlling process sends to children. * Internal representation that is arch specific. * This is used when using the network distributed mode. */struct client_command { char c_host_name[100]; char c_client_name[100]; char c_working_dir[200]; char c_file_name[200]; char c_path_dir[200]; char c_execute_name[200]; char c_write_traj_filename[200]; char c_read_traj_filename[200]; int c_oflag; int c_mfflag; int c_unbuffered; int c_noretest; int c_read_sync; int c_jflag; int c_async_flag; int c_k_flag; int c_h_flag; int c_mflag; int c_pflag; int c_stride_flag; int c_verify; int c_sverify; int c_odsync; int c_diag_v; int c_dedup; int c_Q_flag; int c_L_flag; int c_OPS_flag; int c_mmapflag; int c_mmapasflag; int c_mmapnsflag; int c_mmapssflag; int c_no_copy_flag; int c_include_close; int c_include_flush; int c_disrupt_flag; int c_compute_flag; int c_xflag; int c_MS_flag; int c_mmap_mix; int c_Kplus_flag; int c_stop_flag; int c_w_traj_flag; int c_r_traj_flag; int c_direct_flag; int c_cpuutilflag; int c_seq_mix; int c_client_number; int c_command; int c_testnum; int c_no_unlink; int c_file_lock; int c_rec_lock; int c_Kplus_readers; int c_multiplier; int c_share_file; int c_pattern; int c_version; int c_base_time; int c_num_child; int c_pct_read; int c_advise_op; int c_advise_flag; int c_restf; long long c_stride; long long c_rest_val; long long c_delay; long long c_purge; long long c_fetchon; long long c_numrecs64; long long c_reclen; long long c_child_flag; long long c_delay_start; long long c_depth; float c_compute_time;}; /* * All data in this is in string format for portability in a * hetrogeneous environment. * * Messages that the master will send to the clients * over the socket. This provides neutral format * so that heterogeneous clusters will work. * This is used when using the network distributed mode. * WARNING !!! This data structure MUST not be bigger * than 1448 bytes or fragmentation will kick your butt. */struct client_neutral_command { char c_host_name[40]; char c_client_name[100]; char c_working_dir[100]; char c_file_name[100]; char c_path_dir[100]; char c_execute_name[100]; char c_write_traj_filename[100]; char c_read_traj_filename[100]; char c_oflag[2]; char c_mfflag[2]; char c_unbuffered[2]; char c_noretest[2]; char c_read_sync[2]; char c_jflag[2]; char c_async_flag[2]; char c_k_flag[2]; char c_h_flag[2]; char c_mflag[2]; char c_pflag[2]; char c_stride_flag[2]; char c_verify[2]; char c_sverify[2]; char c_odsync[2]; char c_diag_v[2]; char c_dedup[2]; char c_Q_flag[2]; char c_L_flag[2]; char c_OPS_flag[2]; char c_mmapflag[2]; char c_mmapasflag[2]; char c_mmapnsflag[2]; char c_mmapssflag[2]; char c_no_copy_flag[2]; char c_include_close[2]; char c_include_flush[2]; char c_disrupt_flag[2]; char c_compute_flag[2]; char c_stop_flag[2]; char c_xflag[2]; char c_MS_flag[2]; char c_mmap_mix[2]; char c_Kplus_flag[2]; char c_w_traj_flag[2]; /* small int */ char c_r_traj_flag[2]; /* small int */ char c_direct_flag[2]; /* small int */ char c_cpuutilflag[2]; /* small int */ char c_seq_mix[2]; /* small int */ char c_stride[10]; /* small long long */ char c_rest_val[10]; /* small long long */ char c_purge[10]; /* very small long long */ char c_fetchon[10]; /* very small long long */ char c_multiplier[10]; /* small int */ char c_share_file[10]; /* small int */ char c_file_lock[10]; /* small int */ char c_rec_lock[10]; /* small int */ char c_Kplus_readers[10]; /* small int */ char c_client_number[20]; /* int */ char c_command[20]; /* int */ char c_testnum[20]; /* int */ char c_no_unlink[20]; /* int */ char c_pattern[20]; /* int */ char c_version[20]; /* int */ char c_base_time[20]; /* int */ char c_num_child[20]; /* int */ char c_pct_read[6]; /* small int */ char c_advise_op[4]; /* small int */ char c_advise_flag[4]; /* small int */ char c_restf[4]; /* small int */ char c_depth[20]; /* small long long */ char c_child_flag[40]; /* small long long */ char c_delay[80]; /* long long */ char c_numrecs64[80]; /* long long */ char c_reclen[80]; /* long long */ char c_delay_start[80]; /* long long */ char c_compute_time[80]; /* float */}; /* * Messages the clients will send to the master. * Internal representation on each client and the master. * This is used when using the network distributed mode. */struct master_command { char m_host_name[100]; char m_client_name[100]; char m_stop_flag; int m_client_number; int m_child_port; int m_child_async_port; int m_command; int m_testnum; int m_version; float m_throughput; float m_cputime; float m_walltime; float m_actual; long long m_child_flag;}; /* * Messages that the clients will send to the master * over the socket. This provides neutral format * so that heterogeneous clusters will work. * This is used when using the network distributed mode. */struct master_neutral_command { char m_host_name[100]; char m_client_name[100]; char m_client_number[20]; /* int */ char m_stop_flag[4]; /* char +space */ char m_child_port[20]; /* int */ char m_child_async_port[20]; /* int */ char m_command[20]; /* int */ char m_testnum[20]; /* int */ char m_version[20]; /* int */ char m_throughput[80]; /* float */ char m_cputime[80]; /* float */ char m_walltime[80]; /* float */ char m_actual[80]; /* float */ char m_child_flag[80]; /* long long */}; /* * Possible values for the commands sent to the master */#define R_CHILD_JOIN 1#define R_STAT_DATA 2#define R_FLAG_DATA 3/* * Possible values for the master's commands sent to a client * * The R_FLAG_DATA is also used by the master to tell the * client to update its flags. */#define R_JOIN_ACK 4#define R_STOP_FLAG 5#define R_TERMINATE 6#define R_DEATH 7/* These are the defaults for the processor. They can be * over written by the command line options. */#define CACHE_LINE_SIZE 32#define CACHE_SIZE ( 1024 * 1024 )#define MEG (1024 * 1024)/* * For stride testing use a prime number to avoid stripe * wrap hitting the same spindle. */#define STRIDE 17/************************************************************************//* *//* DEFINED CONSTANTS *//* *//* Never add a comment to the end of a #define. Some compilers will *//* choke and fail the compile. *//************************************************************************//* * Size of buffer for capturing the machine's name. */#define IBUFSIZE 100/* * How many I/Os before a non-uniform access. */#define DISRUPT 100/* * Set the crossover size. This is where the small transfers * are skipped to save time. There is an option to * disable the skipping. */#define LARGE_REC 65536/* Default number of kilobytes in file */#define KILOBYTES 512 /* Default number of bytes in a record */#define RECLEN 1024 /* Default size of file in bytes*/#define FILESIZE (KILOBYTES*1024) /* Default number of records */#define NUMRECS FILESIZE/RECLEN #ifdef __bsdi__/* At 8 Meg switch to large records */#define CROSSOVER (8*1024) /*maximum buffer size*/#define MAXBUFFERSIZE (8*1024*1024) #else/* At 16 Meg switch to large records */#define CROSSOVER (16*1024) /* Maximum buffer size*/#define MAXBUFFERSIZE (16*1024*1024) #endif/* Maximum number of children. Threads/procs/clients */#define MAXSTREAMS 256 /* Minimum buffer size */#define MINBUFFERSIZE 128/* If things ran way too fast */#define TOOFAST 10/* Set the maximum number of types of tests */#define MAXTESTS 10/* Default fill pattern for verification */#define PATTERN get_pattern();#define PATTERN1 0xBB/* Used for Excel internal tables */#define MAX_X 100 /* Used for Excel internal tables */#define MAX_Y 512 #define USAGE "\tUsage: For usage information type iozone -h \n\n"/* Maximum number of characters in filename */#define MAXNAMESIZE 1000 /* * Define the typical output that the user will see on their * screen. */#ifdef NO_PRINT_LLD#ifdef HAVE_PREAD#include <sys/times.h>#if defined(HAVE_PREAD) && defined(HAVE_PREADV)#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld%9ld%10ld%10ld%9ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s%8s%9s%7s%10s%10s%10s%9s%9s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#else#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s%8s%9s%7s%10s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#endif#else#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#endif#endif#ifndef NO_PRINT_LLD#ifdef HAVE_PREAD#include <sys/times.h>#if defined(HAVE_PREAD) && defined(HAVE_PREADV)#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld%9ld%10ld%10ld%9ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s%8s%9s%7s%10s%10s%10s%9s%9s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#else#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s%8s%9s%7s%10s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#endif#else#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%9ld%9ld\n"#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s%8s%8s%9s%9s%8s%9s\n"#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"#endif#endif/* For 'auto mode', these defines determine the number of iterations to perform for both the file size and the record length.*/ /* Start with 64 kbyte minimum file size by default */#define KILOBYTES_START 64/* Default maximum file size. This is 512 Mbytes */#define KILOBYTES_END (1024*512)/* Default starting record size */#define RECLEN_START 4096/* Default maximum record size */#define RECLEN_END (MAXBUFFERSIZE)/* Multiplier for each itteration on file and record size */#define MULTIPLIER 2/* * Assign numeric values to each of the tests. */#define WRITER_TEST 0#define READER_TEST 1#define RANDOM_RW_TEST 2#define REVERSE_TEST 3#define REWRITE_REC_TEST 4#define STRIDE_READ_TEST 5#define FWRITER_TEST 6#define FREADER_TEST 7#define RANDOM_MIX_TEST 8#ifdef HAVE_PREAD#define PWRITER_TEST 9#define PREADER_TEST 10 #endif /* HAVE_PREAD */#ifdef HAVE_PREADV#define PWRITEV_TEST 11#define PREADV_TEST 12#endif /* HAVE_PREADV */#define WRITER_MASK (1 << WRITER_TEST)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -