测试方案及测试结果
一、测试方案
服务器配置情况如下:
1台test server: 2CPU (Intel Xeon 2.80GHz), 2GB RAM, 80GB Disk
1台tracker server:2CPU (Intel Xeon 2.80GHz), 2GB RAM, 80GB Disk
4台storage server:2CPU (Intel Xeon 2.80GHz), 4GB RAM, 1TB Disk (2 * 512GB SATA)
测试环境的带宽为1G,服务器直接接到千兆交换机上,服务器之间通信时互不影响。
存储节点分为2个组,每组2台服务器。
测试文件大小及数量:
文件大小 文件数量
5KB 100万个
50KB 200万个
200KB 100万个
1MB 20万个
10MB 2万个
100MB 1千个
每种类型的文件只要一个即可,采用重复上传的方式。比如5KB的一个文件重复上传100万次。
和平台的连接采用短连接方式。
测试文件内容中的每个字节值为随机数,文件内容直接存放在内存中,通过API直接把文件内容上传到存储平台。
上传和下载文件时,采用随机的方法。以文件总数量为准进行随机抽选。上传文件时,对于某种类型的文件(如5KB类型),如 果已经达到了上传的文件数量(如100万个),则 不再上传。
需要进行并发测试,采用进程方式,每个进程各自记录日志文件。
Upload:10个并发进程,需要记录每个进程运行花费的时间,需要在日志文件中记录上传文件ID及文件类型
Download:20个并发进程,共运行8小时,需要记录下载完成数量和成功数量。下载下来的文件直接舍弃,不需要保存到磁盘,也不需要保存到内存
Delete:10个并发进程,需要记录每个进程运行花费的时间
需要记录两个纬度的统计信息:
1. 按storage server统计,记录的字段有ip地址、操作总次数、成功次数
2. 按文件类型 统计:文件类型、操作总次数、成功次数
操作分别为:upload、download和delete
文件类型分别为:5KB、50KB、200KB、1MB等等
二、测试结果
注:存储节点的2块磁盘采用了LVM,做了RAID0,没有使用RAID设备,磁盘的IO较差。写了一个小的测试程序直接write 1GB的文件,每次写1MB,磁盘IO只能达到3MB多一点。
1. Upload:
total_count=4221000, success_count=4221000, success ratio: 100.00% time_used=118369s, avg time used: 28ms, QPS=35.66
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 1000000 1000000 25178 25 39.72 100.00
50K 2000000 2000000 52328 26 38.22 100.00
200K 1000000 1000000 30177 30 33.14 100.00
1M 200000 200000 7397 36 27.04 100.00
10M 20000 20000 2223 111 9.00 100.00
100M 1000 1000 861 861 1.16 100.00
IO speed = 6902 KB
ip_addr total_count success_count time_used(s) avg(ms) QPS success_ratio
119.42.240.98 1055253 1055253 30797 29 34.26 100.00
119.42.240.103 1055246 1055246 30144 28 35.01 100.00
119.42.240.99 1055262 1055262 29855 28 35.35 100.00
119.42.240.100 1055239 1055239 27368 25 38.56 100.00
2. Download:
total_count=1142383, success_count=1142383, success ratio: 100.00% time_used=28800s, avg time used: 25ms, QPS=39.67
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 268491 268491 3822 14 70.25 100.00
50K 542050 542050 9937 18 54.55 100.00
200K 271837 271837 6937 25 39.19 100.00
1M 54389 54389 3450 63 15.76 100.00
10M 5283 5283 2866 542 1.84 100.00
100M 333 333 1770 5317 0.19 100.00
IO speed = 7871 KB
ip_addr total_count success_count time_used(s) avg(ms) QPS success_ratio
119.42.240.100 284907 284907 7076 24 40.26 100.00
119.42.240.103 284901 284901 6479 22 43.97 100.00
119.42.240.98 286288 286288 8359 29 34.25 100.00
119.42.240.99 286287 286287 6870 23 41.67 100.00
3. Delete:
total_count=4221000, success_count=4221000, success ratio: 100.00% time_used=6565s, avg time used: 1ms, QPS=642.96
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 1000000 1000000 337 0 2967.36 100.00
50K 2000000 2000000 3588 1 557.41 100.00
200K 1000000 1000000 1847 1 541.42 100.00
1M 200000 200000 378 1 529.10 100.00
10M 20000 20000 135 6 148.15 100.00
100M 1000 1000 51 51 19.61 100.00
ip_addr total_count success_count time_used(s) avg(ms) QPS success_ratio
119.42.240.98 1055253 1055253 1626 1 648.99 100.00
119.42.240.103 1055246 1055246 1542 1 684.34 100.00
119.42.240.99 1055262 1055262 1620 1 651.40 100.00
119.42.240.100 1055239 1055239 1550 1 680.80 100.00
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
看到楼主的测试结果,5k的文件download的平均每秒钟才70.25个,是不是意味着fastdfs很慢呢,我用postmark测试的ext3速度能达到1000一上? 谢谢!
5K 268491 268491 3822 14 70.25 100.00
[ 本帖最后由 wjydlut 于 2009-3-23 17:55 编辑 ]
我已经特别说明了,可能你没有注意看。“存储节点的2块磁盘采用了LVM,做了RAID0,没有读写缓存设备,磁盘的IO较差。写了一个小的测试程序直接write 1GB的文件,每次写1MB,磁盘IO只能达到3MB多一点。”
再解释一下,我们的测试机没有带磁盘读写缓存卡,所以IO特别差。我测试过公司的NFS(服务器带磁盘读写缓存卡),IO每秒可以达到60MB!
另外,你看到的性能测试结果是几种类型的文件混合测试的结果。只看其中的一种文件类型的QPS是不准确的。
如果你有时间和兴趣,可以用FastDFS在你们的服务器上做一下性能测试。版本1.17中的test目录是当时我们做性能测试的测试程序和脚本。你可以试试。
[ 本帖最后由 happy_fish100 于 2009-3-23 19:10 编辑 ]
感谢您的回复,的确是我没有注意到你的说的测试环境问题。
目前我正在进行测试,还有问题需要请教您:
1)使用test_upload进行测试时的参数process_index有什么用呢 ?从代码中看好像只是在生成upload目录下面的文件名用到。
2)PROCESS_COUNT这个值似乎只在计算文件个数时用到, 程序中好像没有根据这个值来创建10个进程(实际上只有一个进程在工作),是这样吗? 如果是的话请问你所说的test_upload是有10个并发进程是如果进行测试的。
ps:我用的fastdfs版本是v1.17, 谢谢!
测试程序采用进程方式。测试时需要起多个进程的。
当时我是写了一个脚本来启动多个测试进程的。
process_index:当前进程索引号,通过参数传递进来。
PROCESS_COUNT:测试总进程数。因为文件总数是固定的,每个进程执行的文件数为文件总数除以PROCESS_COUNT
相当的不错呀,我想用IBM AIX5L+DS4700盘阵测试一下速度,不过编译可能有问题,楼主的代码在AIX下测试过吗?
Version 1.17 2009-03-19
* support AIX, compile passed on AIX 5.3
你试试V1.17。另外,需要使用gcc编译器,用AIX自带的编译器是编译不成功的。
谢谢您的回复,已经测试过了,还不错。
楼上的测试过麻烦贴下数据+硬件配置,呵呵。这样对新来的才有帮助啊。谢谢哦!
我找了2台机器安装试了下,DELL2850+220s的盘柜,还有一个dell860。不过没做性能测试!
感觉使用起来非常简单,比mogilefs还要简单。呵呵
另外没有perl的api接口,不过这个应该很容易搞出来。再等等如果能凑出来机器,我也试试性能。