免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9474 | 回复: 8

[FastDFS] 提升磁盘IO性能的几个技巧 [复制链接]

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
发表于 2011-04-29 16:11 |显示全部楼层
本帖最后由 happy_fish100 于 2011-05-01 17:46 编辑

目前磁盘都是机械方式运作的,主要体现在磁盘读写前寻找磁道的过程。磁盘自带的读写缓存大小,对于磁盘读写速度至关重要。读写速度快的磁盘,通常都带有较大的读写缓存。磁盘的寻道过程是机械方式,决定了其随机读写速度将明显低于顺序读写。在我们做系统设计和实现时,需要考虑到磁盘的这一特性。FastDFS最初的实现,文件是按hash方式随机分布到多个目录中的,后来增加了顺序存放的做法。通过对比测试,发现文件按目录顺序存储,写文件IO效率明显高于按目录随机存储。

目前磁盘顺序读取的速度并不差,比如普通硬盘的IO可以达到每秒40~60MB,好一些的硬盘可以达到每秒100MB。在多进程或多线程并发读取磁盘的情况下,随着并发数的增加,磁盘IO效率将大大下降。主要是因为每次读写,磁道可能存在较大的偏移,磁道寻址时间加大,导致磁盘IO性能急剧下降。对于这种场景,优化方案是尽可能减少并发读写的进程数或线程数。可以用锁的机制,也可以采用专门的磁盘IO线程来对磁盘进行读写。FastDFS 2.x版本,磁盘读写就采用了专门的线程来完成。

为了充分发挥多块磁盘的效率,不建议使用传统的RAID方式。比较好的做法是每块磁盘单独mount,通过程序来控制对多块磁盘进行并发读写。采用单盘mount,文件的备份和冗余可以通过多台机器实现。

文件数多了之后,比如达到上千万个文件,当随机访问众多文件时,文件系统的性能会急剧下降。业界流行的做法是将多个小文件合并存储到一个大文件中的方式来降低文件数。FastDFS 3.0支持将多个小文件合并存储到一个较大文件中,目前开发进展比较顺利,预计5月份可以发布。

提升磁盘IO的另外一个技巧,一次尽可能多写入或多读取。也就是说,将程序的读写buffer设置得尽可能大一些。例如日志或者redo log的写入,不是每次调用都直接写磁盘,而是先缓存到内存中,等buffer满了再写入磁盘,也可以定时写入磁盘。

操作系统和C库函数通常会对写入的文件内容做缓存,以减少实际写文件的次数。直接调用系统函数fsync或C函数fflush将使系统的缓存机制失效,此时将强制把内容刷到磁盘上。除非必需,否则不要执行强制刷盘操作。

注:如果没有特别说明,文中说的磁盘指的是硬盘。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2011-04-29 16:26 |显示全部楼层
lol

论坛徽章:
0
发表于 2011-05-04 13:39 |显示全部楼层
嗯,尽量顺序写,避免太多小文件。是指整个操作系统上维护了几千万文件数性能明显下降?还是单个磁盘上?

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
发表于 2011-05-04 14:01 |显示全部楼层
回复 3# happy_fastdfs
我说的是整个操作系统(文件系统)。

论坛徽章:
0
发表于 2011-05-07 16:24 |显示全部楼层
学习并巩固之

论坛徽章:
0
发表于 2011-05-12 20:52 |显示全部楼层
续续关注之

论坛徽章:
0
发表于 2011-05-25 14:15 |显示全部楼层
学习了,受益匪浅。

论坛徽章:
0
发表于 2011-08-19 11:02 |显示全部楼层
fish精益求精啊,FastDFS从1.0、2.0到3.0,3个大版本都有大改进,目前领先于我们公司(http://uc.cn)的需求啦,我们暂时都升级到了v1.29,用得很爽,负载很低,虽然请求量也不太少,因为单机文件数量还不到千万。

论坛徽章:
0
发表于 2014-10-22 11:39 |显示全部楼层
学习了。之前一直主观认为多线程反而能提升磁盘I/O效率,看到这篇文章清晰了很多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP