亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tiotest.c

?? Linux Distributed Replication Block Device
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *    Threaded io test * *  Copyright (C) 1999-2000 Mika Kuoppala <miku@iki.fi> * *  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, or (at your option) *  any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   * * */#include "tiotest.h"#include "crc32.h"static const char* versionStr = "tiotest v0.3.3 (C) 1999-2000 Mika Kuoppala <miku@iki.fi>";/*    This is global for easier usage. If you put changing data   in here from threads, be sure to protect it with mutexes.*/ArgumentOptions args;static void * aligned_alloc(ssize_t size){	caddr_t a;	a = mmap((caddr_t )0, size, 	         PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);	if (a == MAP_FAILED)		return NULL;	return a;}static int aligned_free(caddr_t a, ssize_t size){	return munmap(a, size);}int main(int argc, char *argv[]){	ThreadTest test;	int i;	strcpy(args.path[0], DEFAULT_DIRECTORY );	args.pathsCount = 1;	args.fileSizeInMBytes = DEFAULT_FILESIZE;	args.blockSize = DEFAULT_BLOCKSIZE;	args.numThreads = DEFAULT_THREADS;	args.numRandomOps = DEFAULT_RANDOM_OPS;	args.debugLevel = DEFAULT_DEBUG_LEVEL;	args.verbose = 0;	args.terse = 0;	args.consistencyCheckData = 0;	args.syncWriting = 0;	args.rawDrives = 0;	args.showLatency = 1;	args.threadOffset = DEFAULT_RAW_OFFSET;	args.useThreadOffsetForFirstThread = 0;		for(i = 0; i < TESTS_COUNT; i++)		args.testsToRun[i] = 1;	#if (LARGEFILES && USE_MMAP)	printf("warning: LARGEFILES with MMAP needs mmap64 support which is not working yet in tiotest!\n");#endif	parse_args( &args, argc, argv );    	initialize_test( &test );		do_tests( &test );	print_results( &test );	cleanup_test( &test );	return 0;}inline void checkIntZero(int value, char *mess){	if (value <= 0) 	{		printf(mess);		printf("Try 'tiotest -h' for more information.\n");		exit(1);	}}inline void checkLong(long value, char *mess){	if (value < 0) 	{		printf(mess);		printf("Try 'tiotest -h' for more information\n");		exit(1);	}}void parse_args( ArgumentOptions* args, int argc, char *argv[] ){	int c;	int once = 0;	while (1)	{		c = getopt( argc, argv, "f:b:d:t:r:D:k:o:hLRTWSOc");		if (c == -1)			break;			switch (c)		{		case 'f':			args->fileSizeInMBytes = atoi(optarg);			checkIntZero(args->fileSizeInMBytes, "Wrong file size\n");			break;	    		case 'b':			args->blockSize = atoi(optarg);			checkIntZero(args->blockSize, "Wrong block size\n");			break;	    		case 'd':			if (args->pathsCount < MAX_PATHS) 			{				if (!once) 				{					args->pathsCount = 0;           					once = 1;				}				strcpy(args->path[args->pathsCount++], optarg);			}			break;	    		case 't':			args->numThreads = atoi(optarg);			checkIntZero(args->numThreads, "Wrong number of threads\n");			break;	    		case 'r':			args->numRandomOps = atoi(optarg);			checkIntZero(args->numRandomOps, "Wrong number of random I/O operations\n");			break;	    	    	case 'L':			args->showLatency = FALSE;			break;	    		case 'T':			args->terse = TRUE;			break;		case 'W':			args->sequentialWriting = TRUE;			break;					case 'S':			args->syncWriting = TRUE;			break;					case 'R':			args->rawDrives = TRUE;			break;		case 'c':			args->consistencyCheckData = TRUE;			break;		case 'h':			print_help_and_exit();			break;				case 'D':			args->debugLevel = atoi(optarg);			break;				case 'o':			args->threadOffset = atol(optarg);			checkLong(args->threadOffset, "Wrong offset between threads\n");			break;					case 'O':			args->useThreadOffsetForFirstThread = TRUE;			break;					case 'k':		{			int i = atoi(optarg);			if (i < TESTS_COUNT) 			{				args->testsToRun[i] = 0;				break;			}			else				printf("Wrong test number %d\n", i);			/* Go through */		}		case '?':		default:			printf("Try 'tiotest -h' for more information\n");			exit(1);			break;		}	}}void initialize_test( ThreadTest *d ){	int i;	int pathLoadBalIdx = 0;	toff_t offs, cur_offs[KBYTE] = {0};	memset( d, 0, sizeof(ThreadTest) );    	d->numThreads = args.numThreads; 	for(i = 0; i < d->numThreads; i++)	{		d->threads = calloc( d->numThreads, sizeof(ThreadData) );		if( d->threads == NULL )		{			perror("Error allocating memory");			exit(-1);		}	}	/* Initializing thread data */	if (args.rawDrives) 	{		if (args.threadOffset != 0) 		{			offs = (args.threadOffset + args.fileSizeInMBytes) * MBYTE;			if (args.useThreadOffsetForFirstThread) 			{				int k;				for(k = 0; k < KBYTE; k++)					cur_offs[k] = args.threadOffset * MBYTE;			}		}		else			offs = args.fileSizeInMBytes * MBYTE;	}	else		offs = 0;	for(i = 0; i < d->numThreads; i++)	{		d->threads[i].myNumber = i;		d->threads[i].blockSize = args.blockSize;		d->threads[i].numRandomOps = args.numRandomOps;		d->threads[i].fileSizeInMBytes = args.fileSizeInMBytes;		if (args.rawDrives)		{			d->threads[i].fileOffset = cur_offs[pathLoadBalIdx];			cur_offs[pathLoadBalIdx] += offs;			sprintf(d->threads[i].fileName, "%s",				args.path[pathLoadBalIdx++]);		}		else		{			d->threads[i].fileOffset = 0;			sprintf(d->threads[i].fileName, "%s/_%d_tiotest.%d",				args.path[pathLoadBalIdx++], getpid(), i);		}				if( pathLoadBalIdx >= args.pathsCount )			pathLoadBalIdx = 0;		pthread_attr_init( &(d->threads[i].thread_attr) );		pthread_attr_setscope(&(d->threads[i].thread_attr),				      PTHREAD_SCOPE_SYSTEM);		d->threads[i].buffer = aligned_alloc( d->threads[i].blockSize );		if( d->threads[i].buffer == NULL )		{			perror("Error allocating memory");			exit(-1);		}		if( args.consistencyCheckData )		{			int j;			const unsigned long bsize = d->threads[i].blockSize;			unsigned char *b = d->threads[i].buffer;			for(j = 0; j < bsize; j++)				b[j] = rand() & 0xFF;			d->threads[i].bufferCrc = crc32(b, bsize, 0);		}	}}void print_option(const char* s, 		  const char* desc, 		  const char* def){	printf("  %s          %s", s, desc);    	if(def)		printf(" (default: %s)", def);	printf("\n");   }char *my_int_to_string(int a){	static char tempBuffer[128];	sprintf(tempBuffer, "%d", a);	return tempBuffer;}void print_help_and_exit(){	printf("%s\n", versionStr);	printf("Usage: tiotest [options]\n");	print_option("-f", "Filesize per thread in MBytes",		     my_int_to_string(DEFAULT_FILESIZE));	print_option("-b", "Blocksize to use in bytes",		     my_int_to_string(DEFAULT_BLOCKSIZE));	print_option("-d", "Directory for test files", 		     DEFAULT_DIRECTORY);	print_option("-t", "Number of concurrent test threads",		     my_int_to_string(DEFAULT_THREADS));	print_option("-r", "Random I/O operations per thread", 		     my_int_to_string(DEFAULT_RANDOM_OPS));		     	print_option("-o", "Offset in Mb on disk between threads. Use with -R option",		     0);		print_option("-k", "Skip test number n. Could be used several times.", 0);	  		print_option("-L", "Hide latency output", 0);	  		print_option("-R", "Use raw devices. Set device name with -d option", 0);	print_option("-T", "More terse output", 0);	print_option("-W", "Do writing phase sequentially", 0);		print_option("-S", "Do writing synchronously", 0);		print_option("-O", "Use offset from -o option for first thread. Use with -R option",		     0);	print_option("-c", 		     "Consistency check data (will slow io and raise cpu%)",		     0);		print_option("-D", "Debug level",		     my_int_to_string(DEFAULT_DEBUG_LEVEL));	print_option("-h", "Print this help and exit", 0);	exit(1);}void cleanup_test( ThreadTest *d ){	int i;	for(i = 0; i < d->numThreads; i++)	{		if (!args.rawDrives)		unlink(d->threads[i].fileName);		aligned_free( d->threads[i].buffer, d->threads[i].blockSize );		d->threads[i].buffer = 0;			pthread_attr_destroy( &(d->threads[i].thread_attr) );	}	free(d->threads);    	d->threads = 0;}void wait_for_threads( ThreadTest *d ){	int i;	for(i = 0; i < d->numThreads; i++)		pthread_join(d->threads[i].thread, NULL);	}void do_tests( ThreadTest *thisTest ){	Timings *timeWrite       = &(thisTest->totalTimeWrite);	Timings *timeRandomWrite = &(thisTest->totalTimeRandomWrite);	Timings *timeRead        = &(thisTest->totalTimeRead);	Timings *timeRandomRead  = &(thisTest->totalTimeRandomRead);	timer_init( timeWrite );	timer_init( timeRandomWrite );	timer_init( timeRead );	timer_init( timeRandomRead );	/*	  Write testing 	*/    	if (args.testsToRun[WRITE_TEST])		do_test( thisTest, WRITE_TEST, args.sequentialWriting,			timeWrite,  "Waiting write threads to finish...");	/*	  RandomWrite testing 	*/    	if (args.testsToRun[RANDOM_WRITE_TEST])		do_test( thisTest, RANDOM_WRITE_TEST, FALSE, timeRandomWrite,			"Waiting random write threads to finish...");	/*	  Read testing 	*/    	if (args.testsToRun[READ_TEST])		do_test( thisTest, READ_TEST, FALSE, timeRead,			"Waiting read threads to finish..." );	/*	  RandomRead testing 	*/	if (args.testsToRun[RANDOM_READ_TEST])		do_test( thisTest, RANDOM_READ_TEST, FALSE, timeRandomRead,			"Waiting random read threads to finish...");}typedef struct {	volatile int *child_status;	TestFunc fn;	ThreadData *d;	volatile int *pstart;} StartData;void* start_proc( void *data ){	StartData *sd = (StartData*)data;	*sd->child_status = getpid();	if (sd->pstart != NULL)		while (*sd->pstart == 0) sleep(0);	return sd->fn(sd->d);}void do_test( ThreadTest *test, int testCase, int sequential,	Timings *t, char *debugMessage ){	int i;	volatile int *child_status;	StartData *sd;	int synccount;	volatile int start = 0;		child_status = (volatile int *)calloc(test->numThreads, sizeof(int));	if (child_status == NULL) 	{		perror("Error allocating memory");		return;	}		sd = (StartData*)calloc(test->numThreads, sizeof(StartData));	if (sd == NULL) 	{		perror("Error allocating memory");		free((int*)child_status);		return;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产自产视频一区二区三区| 欧美三区在线观看| 91丨porny丨最新| 欧美巨大另类极品videosbest| 2021国产精品久久精品| 一区二区三区四区在线播放| 精品亚洲免费视频| 日本大香伊一区二区三区| 2024国产精品| 亚洲国产欧美在线| 成人福利视频网站| 精品伦理精品一区| 日本欧美肥老太交大片| 91丨porny丨户外露出| 精品国产91乱码一区二区三区| 亚洲精品久久嫩草网站秘色| 国产精品白丝jk白祙喷水网站 | 亚洲成人免费视频| 懂色av噜噜一区二区三区av| 精品第一国产综合精品aⅴ| 亚洲h精品动漫在线观看| 91香蕉视频污| 国产精品久久久久久久久免费丝袜 | 色综合久久66| 欧美极品xxx| 精品无人码麻豆乱码1区2区 | 国产精品综合网| 日韩欧美一级片| 日本女人一区二区三区| 51午夜精品国产| 三级不卡在线观看| 欧美一区二区三区视频在线观看| 亚洲国产视频网站| 欧美男生操女生| 丝袜国产日韩另类美女| 欧美精品久久久久久久多人混战| 性久久久久久久| 在线不卡免费av| 免费成人在线观看| 久久男人中文字幕资源站| 精品在线观看免费| 国产色一区二区| 国产黄色成人av| 国产精品国产三级国产a| 色综合久久六月婷婷中文字幕| 亚洲人妖av一区二区| 色婷婷av一区二区三区之一色屋| 玉足女爽爽91| 3d成人h动漫网站入口| 老司机精品视频线观看86 | 久久99精品久久久久久动态图| 日韩片之四级片| 精品在线一区二区三区| 国产日韩欧美麻豆| 99这里只有久久精品视频| 亚洲乱码国产乱码精品精可以看| 欧美综合一区二区| 日韩激情av在线| 国产午夜三级一区二区三| 9i在线看片成人免费| 天堂一区二区在线免费观看| 欧美va日韩va| 成人av网在线| 天堂在线亚洲视频| 久久久久国产精品厨房| 91农村精品一区二区在线| 午夜精品一区二区三区免费视频 | 婷婷激情综合网| 337p日本欧洲亚洲大胆精品| www.亚洲精品| 免费一区二区视频| 亚洲丝袜另类动漫二区| 欧美肥妇bbw| 成人美女视频在线看| 亚洲国产精品天堂| 久久午夜色播影院免费高清| 在线日韩一区二区| 国产麻豆精品在线观看| 一区二区成人在线观看| 久久久久久久综合日本| 在线亚洲+欧美+日本专区| 麻豆成人91精品二区三区| 亚洲手机成人高清视频| 欧美成人女星排行榜| 欧美天堂一区二区三区| 久久国产精品99久久人人澡| 亚洲欧美日韩一区| 久久久蜜桃精品| 91精品在线观看入口| www.日韩在线| 国产在线视频精品一区| 亚洲123区在线观看| 亚洲欧美日韩综合aⅴ视频| 欧美精品一区二区久久久| 欧美日韩一区二区三区在线| av在线不卡免费看| 国产精品1024| 久久精品国产亚洲高清剧情介绍| 亚洲精品国久久99热| 亚洲国产高清aⅴ视频| 欧美tk—视频vk| 7777精品伊人久久久大香线蕉的| 国产99精品在线观看| 精品一区二区三区在线观看| 亚洲精品国产a久久久久久| 日本一区二区高清| 亚洲国产精品ⅴa在线观看| 久久综合久久久久88| 欧美不卡视频一区| 日韩美女在线视频| 91精选在线观看| 91麻豆精品国产综合久久久久久| 日本乱人伦aⅴ精品| 91视频一区二区三区| 成人精品亚洲人成在线| 成人综合在线网站| 国产99久久久国产精品免费看 | 亚洲一区二区三区在线播放| 17c精品麻豆一区二区免费| 亚洲国产成人午夜在线一区| 国产夜色精品一区二区av| 久久久一区二区三区| 久久久国际精品| 亚洲国产激情av| 亚洲品质自拍视频| 性做久久久久久免费观看| 日本午夜精品视频在线观看| 久久电影网站中文字幕| 国内精品嫩模私拍在线| 国产精品一区二区在线播放| 国产99久久久国产精品免费看| av在线播放一区二区三区| 日本道色综合久久| 欧美一区日韩一区| 久久尤物电影视频在线观看| 欧美国产精品中文字幕| 亚洲乱码国产乱码精品精小说 | 天堂蜜桃91精品| 看国产成人h片视频| 久久99国产精品久久99果冻传媒| 国产在线视频不卡二| 成人激情小说网站| 色av成人天堂桃色av| 日韩一区和二区| 国产日韩av一区| 亚洲黄色录像片| 国内偷窥港台综合视频在线播放| 懂色av一区二区夜夜嗨| 在线观看成人免费视频| 欧美mv日韩mv国产网站| 中文字幕乱码日本亚洲一区二区 | 91在线免费看| 欧美精品高清视频| 国产欧美久久久精品影院| 亚洲国产精品自拍| 成人一区二区三区视频| 欧美午夜电影一区| 亚洲欧美日韩国产另类专区 | 成人福利电影精品一区二区在线观看| 国产精品一区二区免费不卡| 91福利在线观看| 精品国产免费久久| 国产欧美日韩另类视频免费观看 | 国产成人丝袜美腿| 国产精品日韩精品欧美在线| 日韩欧美激情一区| 成人欧美一区二区三区1314| 亚洲电影中文字幕在线观看| 国产专区欧美精品| 欧美日韩午夜影院| 欧美韩日一区二区三区| 日韩和欧美的一区| 日本久久电影网| 精品处破学生在线二十三| 伊人色综合久久天天人手人婷| 黄色小说综合网站| 欧美日韩亚洲综合一区| 国产精品久久777777| 国产另类ts人妖一区二区| 制服.丝袜.亚洲.中文.综合| 亚洲精品综合在线| 风间由美中文字幕在线看视频国产欧美| 色婷婷综合久久久中文一区二区| 久久久久久一级片| 激情五月激情综合网| 欧美日韩精品一区二区三区四区 | 91福利国产成人精品照片| 久久久亚洲国产美女国产盗摄 | 九一久久久久久| 欧美日韩国产高清一区二区| 一区二区三区四区av| 成人av在线电影| wwww国产精品欧美| 毛片av中文字幕一区二区| 欧美男生操女生| 五月婷婷激情综合| 欧美浪妇xxxx高跟鞋交| 亚洲一线二线三线视频| 在线一区二区三区四区五区| 亚洲免费毛片网站|