linux文件写入效率测试

      在项目开发中,难免遇到需要频繁存储数据的应用场景。在存储过程中,往往需要考虑文件的IO的性能,会不会对整个程序正常运行产生影响。通常在项目开始前,会对整个文件写入性能进行一个评估,对文件写入效率有个基本了解后,再进行程序设计。

如下为文件写入效率测试的代码,供大家参考: 

#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <signal.h>

int main_running_flag = 0;
static void main_exit_proc(int signal)
{
	switch(signal)
	{
		case SIGINT:
		{
			main_running_flag = 0;
		}break;
		default:break;
	}
}

static unsigned long long get_now_time()
{
	unsigned long long time = 0;
	struct timeval now_time;
	gettimeofday(&now_time, NULL);
	time = now_time.tv_sec;
	time *= 1000*1000; 
	time += now_time.tv_usec;
	return time;
}

int main(int argc, char *argv[])
{
	if(argc != 2 || strlen(argv[1]) < 1 )
	{
		printf("please input write context in argv[1]!!\n");
		return 0;
	}

	/*接收用户中断信息号,退出程序*/
	signal(SIGINT, main_exit_proc);

	FILE *fp = NULL;
	fp = fopen("test_write.txt","a+");
	if(fp)
	{	
		char buff[1024]={0};
		sprintf(buff,"%s\n",argv[1]);
		int len = strlen(argv[1]);
		unsigned long long last_write_time = get_now_time();
		unsigned long long cur_write_time = 0;
		unsigned long long file_size = 0;
		unsigned long long offset_time = 0;
		unsigned long long total_time = 0;
		unsigned long long write_times = 0;
		int show_size = 10;
		main_running_flag = 1;
		while(main_running_flag)
		{
			fwrite(argv[1],1,len,fp);
                        fflush(fp);
			file_size += len;
			cur_write_time = get_now_time();
			offset_time = cur_write_time-last_write_time,
			total_time += offset_time;
			write_times++;
			if(file_size / (1024*1024) == show_size )
			{
				printf("-- %d~%dM write total time:%llds%lldms%lldus, now_file_size = %lld\n",show_size-10, show_size, 
							total_time/(1000*1000), total_time%(1000*1000)/1000, total_time%1000 ,file_size);
				show_size += 10;
				total_time = 0;
				write_times = 0;
			}
			last_write_time = cur_write_time;
		}
		fclose(fp);
	}
	return 0;
}

测试结果(测试环境:windows10 WSL子系统 Ubuntu18.04):

每次写入1个字符,每写入10M的数据约需要7s400多ms的时间。

每次写入3个字符,每写入10M的数据约需要2s500多ms的时间。

每次写入15个字符,每写入10M的数据约需要600多ms的时间。、

修改代码,每次写入5M数据。

 

测试结果如下: 

写入文件大小至1340M左右时,每写入10M数据所需时间从2ms增加至约20ms。 

写入文件大小至8230M左右时,每写入10M数据所需时间从20ms增加至约400+ms。  

测试结论

1. 写入相同大小的数据,写入的次数越多,耗时越多。

2. 同一个文件,写入的文件大小至某个临界值时,文件写入效率会急剧减慢,并不是随文件增大逐渐减慢。

由于不同硬件平台及系统架构的差异,如上结论仅供参考,应以程序实测为准。 

猜你喜欢

转载自blog.csdn.net/fangye945a/article/details/107849521