⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsfil.c

📁 Mysql for Windows最新源码
💻 C
字号:
/************************************************************************The test module for the file system(c) 1995 Innobase OyCreated 10/29/1995 Heikki Tuuri*************************************************************************/#include "os0thread.h"#include "os0file.h"#include "ut0ut.h"#include "sync0sync.h"#include "mem0mem.h"#include "..\fil0fil.h"ulint	last_thr = 1;byte	global_buf[10000000];byte	global_buf2[20000];os_file_t	files[1000];os_event_t	gl_ready;mutex_t		ios_mutex;ulint		ios;/*********************************************************************Test for synchronous file io. */void test1(void)/*=======*/{	ulint			i, j;	void*			mess;	bool			ret;	void*			buf;	ulint			rnd, rnd3;	ulint			tm, oldtm;	        printf("-------------------------------------------\n");	printf("FIL-TEST 1. Test of synchronous file io\n");	/* Align the buffer for file io */	buf = (void*)(((ulint)global_buf + 6300) & (~0xFFF)); 	rnd = ut_time();	rnd3 = ut_time();	rnd = rnd * 3416133;	rnd3 = rnd3 * 6576681;	oldtm = ut_clock();	for (j = 0; j < 300; j++) {	   for (i = 0; i < (rnd3 % 15); i++) {		fil_read((rnd % 1000) / 100, rnd % 100, 0, 8192, buf, NULL);		ut_a(fil_validate());		ret = fil_aio_wait(0, &mess);		ut_a(ret);		ut_a(fil_validate());		ut_a(*((ulint*)buf) == rnd % 1000);				rnd += 1;	   }           rnd = rnd + 3416133;	   rnd3 = rnd3 + 6576681;	}	   	tm = ut_clock();	printf("Wall clock time for synchr. io %lu milliseconds\n",			tm - oldtm);}/************************************************************************Io-handler thread function. */ulinthandler_thread(/*===========*/	void*	arg){	ulint	segment;	void*	mess;	void*	buf;	ulint	i;	bool	ret;		segment = *((ulint*)arg);	buf = (void*)(((ulint)global_buf + 6300) & (~0xFFF)); 	printf("Thread %lu starts\n", segment);	for (i = 0;; i++) {		ret = fil_aio_wait(segment, &mess);		ut_a(ret);		if ((ulint)mess == 3333) {			os_event_set(gl_ready);		} else {		     ut_a((ulint)mess ==			*((ulint*)((byte*)buf + 8192 * (ulint)mess)));		}				mutex_enter(&ios_mutex);		ios++;		mutex_exit(&ios_mutex);				ut_a(ret);/*		printf("Message for thread %lu %lu\n", segment,						(ulint)mess); */	}	return(0);}/************************************************************************Test of io-handler threads */void test2(void)/*=======*/{	ulint			i;	ulint			j;	void*			buf;	ulint			rnd, rnd3;	ulint			tm, oldtm;	os_thread_t		thr[5];	os_thread_id_t		id[5];	ulint			n[5];		/* Align the buffer for file io */	buf = (void*)(((ulint)global_buf + 6300) & (~0xFFF)); 	gl_ready = os_event_create(NULL);	ios = 0;	mutex_create(&ios_mutex);		for (i = 0; i < 5; i++) {		n[i] = i;		thr[i] = os_thread_create(handler_thread, n + i, id + i);	}	        printf("-------------------------------------------\n");	printf("FIL-TEST 2. Test of asynchronous file io\n");	rnd = ut_time();	rnd3 = ut_time();	rnd = rnd * 3416133;	rnd3 = rnd3 * 6576681;	oldtm = ut_clock();	for (j = 0; j < 300; j++) {	   for (i = 0; i < (rnd3 % 15); i++) {		fil_read((rnd % 1000) / 100, rnd % 100, 0, 8192,				(void*)((byte*)buf + 8192 * (rnd % 1000)),				(void*)(rnd % 1000));		rnd += 1;	   }	   ut_a(fil_validate());           rnd = rnd + 3416133;	   rnd3 = rnd3 + 6576681;	}	ut_a(!os_aio_all_slots_free());	   	tm = ut_clock();	printf("Wall clock time for asynchr. io %lu milliseconds\n",			tm - oldtm);	fil_read(5, 25, 0, 8192,		(void*)((byte*)buf + 8192 * 1000),		(void*)3333);	tm = ut_clock();	ut_a(fil_validate());	printf("All ios queued! N ios: %lu\n", ios);	printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);		os_event_wait(gl_ready);	tm = ut_clock();	printf("N ios: %lu\n", ios);	printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);	os_thread_sleep(2000000);	printf("N ios: %lu\n", ios);	ut_a(fil_validate());	ut_a(os_aio_all_slots_free());}/*************************************************************************Creates the files for the file system test and inserts them tothe file system. */voidcreate_files(void)/*==============*/{	bool	ret;	ulint	i, j, k, n;	void*	buf;	void*	mess;	char	name[10];		buf = (void*)(((ulint)global_buf2 + 6300) & (~0xFFF)); 	name[0] = 't';	name[1] = 's';	name[2] = 'f';	name[3] = 'i';	name[4] = 'l';	name[5] = 'e';	name[8] = '\0';	for (k = 0; k < 10; k++) {	for (i = 0; i < 20; i++) {		name[6] = (char)(k + (ulint)'a');		name[7] = (char)(i + (ulint)'a');			files[i] = os_file_create(name, OS_FILE_CREATE,					OS_FILE_TABLESPACE, &ret);		if (ret == FALSE) {			ut_a(os_file_get_last_error() ==						OS_FILE_ALREADY_EXISTS);				files[i] = os_file_create(name, OS_FILE_OPEN,						OS_FILE_TABLESPACE, &ret);			ut_a(ret);		} else {					for (j = 0; j < 5; j++) {				for (n = 0; n < 8192 / sizeof(ulint); n++) {					*((ulint*)buf + n) =						k * 100 + i * 5 + j;				}								ret = os_aio_write(files[i], buf, 8192 * j,							0, 8192, NULL);				ut_a(ret);				ret = os_aio_wait(0, &mess);				ut_a(ret);				ut_a(mess == NULL);			}		}				ret = os_file_close(files[i]);		ut_a(ret);		if (i == 0) {			fil_space_create("noname", k, OS_FILE_TABLESPACE);		}		ut_a(fil_validate());		fil_node_create(name, 5, k);	}	}}/************************************************************************Frees the spaces in the file system. */voidfree_system(void)/*=============*/{	ulint	i;	for (i = 0; i < 10; i++) {		fil_space_free(i);	}}/************************************************************************Main test function. */void main(void) /*======*/{	ulint	tm, oldtm;	oldtm = ut_clock();	os_aio_init(160, 5);	sync_init();	mem_init();	fil_init(2);	/* Allow only 2 open files at a time */	ut_a(fil_validate());		create_files();		test1();	test2();	free_system();			tm = ut_clock();	printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);	printf("TESTS COMPLETED SUCCESSFULLY!\n");} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -