2017-09-21

猎数博客

数据挖掘,机器学习

磁盘速度问题

作者:江航 / 2011-04-01 / (阅读 1,545 次) /



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

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

目标:写入或者读出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 转载请注明






相关文章

  • 为solr配中文分词( 3,580 )
  • 霍夫曼编码和算术编码简单比较( 2,978 )
  • CPU乘法速度测试( 2,381 )
  • CPU 加法速度测试( 1,886 )
  • 多线程文件处理实例( 1,759 )
  • 磁盘速度问题( 1,545 )
  • nutch 2.x index( 1,494 )
  • nutch solrdedup( 1,470 )
  • 硬盘参数及速度(二)( 1,444 )
  • nutch 2.x 蜘蛛抓来的数据( 1,395 )
  • Leave a Reply

    您必须登录以发表评论,

    沪ICP备11036560号
    联系我: jianghang at bagualu.net