磁盘速度问题

在大规模数据处理中,磁盘是非常重要的存储介质,密集的磁盘操作是必不可少的,因此对磁盘性能的了解是非常必要的。但是磁盘的性能参数有很多,根本搞不清楚这些参
数都是什么意思。我想可以通过一些读写测试来研究磁盘的性能。

于是我们需要写磁盘的测试程序。主要关心的是读写的速度问题,

目标:写入或者读出2G/4G/8G/16G数据,分别需要多少时间。

2G数据=2x1024x1024x1024 byte, 如果直接写4byte的int,需要写512x1024x1024个。

如此4G数据=1G整数。

程序用C语言实现:


#include "stdio.h"       

#include "sys/time.h"        

FILE *gfp=NULL;      

long iTimeInterval;      

void only_write(void* data)      

{        

long nums=*((long*)data);        

for(long i =0 ; i < nums;i++){       

fwrite((void*)&i,1,4,gfp);       

}        

}        

void write_file(void *data)      

{        

long nums=*((long*)data);        

FILE *fp=fopen("tmp","w");       

for(long i =0 ; i < nums;i++){       

fwrite((void*)&i,1,4,fp);        

}        

fclose(fp);      

}        

typedef void (*TestFunc)(void*) ;        

void count_time(TestFunc func,void* data)        

{        

struct timeval tpstart,tpend;        

iTimeInterval = 0 ;      

gettimeofday(&tpstart,NULL);         

func(data);      

gettimeofday(&tpend,NULL);       

iTimeInterval=1000000 * (tpend.tv_sec - tpstart.tv_sec);         

iTimeInterval += tpend.tv_usec - tpstart.tv_usec;        

printf("%ld us",iTimeInterval);      

}        

void mytest(long nums)       

{        

TestFunc t1=write_file;      

printf("open write %ld num to file takes time: ", nums);         

count_time(t1,(void*)&nums);         

printf("\n");        

}        

void mytest2(long nums)      

{        

gfp=fopen("tmp2","w");       

TestFunc t1=only_write;      

printf("only write %ld num to file takes time: ", nums);         

count_time(t1,(void*)&nums);         

printf (" bytes/sec:%f",(nums*4.0f)/(iTimeInterval*0.000001));       

printf("\n");        

fclose(gfp);         

}        

int main()       

{        

mytest(2);       

mytest2(2);      

mytest(1024); //4K       

mytest2(1024); //4K      

mytest(1024*1024); //4M      

mytest2(1024*1024); //4M         

mytest(1024*1024*1024); //4G         

mytest2(1024*1024*1024); //4G}

输出为:

open write 2 num to file takes time: 87746 us
only write 2 num to file takes time: 24 us bytes/sec:333333.333333
open write 1024 num to file takes time: 110 us
only write 1024 num to file takes time: 53 us bytes/sec:77283018.867925
open write 1048576 num to file takes time: 59198 us
only write 1048576 num to file takes time: 59355 us bytes/sec:70664712.324151
open write 1073741824 num to file takes time: 55028566 us
only write 1073741824 num to file takes time: 54992277 us bytes/sec:78101281

由此可见:对于小的文件而言,打开文件是很耗时的。这里是顺序写文件。us = 10e-6s
在4K及以上的写入中,速度最大在78MBytes/S,最小也在70M以上。如果以70M/S计算,1小时可以写入数据70M*3600=36*7G=252G
每字节传输的时间为1/70M=0.15us



本文地址: http://www.bagualu.net/wordpress/archives/19 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注