Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20898
  • 博文数量: 2
  • 博客积分: 180
  • 博客等级: 入伍新兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-17 09:17
文章分类
文章存档

2011年(2)

我的朋友
最近访客

分类: 服务器与存储

2011-01-15 17:45:52

越来越慢的磁盘:

       20年来, CPU的速度提高了上百倍, 内存的速度提高了几十倍, 网络接入也从56K ADSL猫发展到了10Mb的拨号网络.

       但是磁盘的IO速度却一直止步不前, IDE15000SCSI, 价格高了十几倍, IO性能却只提高了三倍左右.(按照2.5" 1500RPM Savvio计算)

       随着英特网的发展, 服务器磁盘越来越显得力不从心, 一些服务器被迫使用磁盘阵列来解决问题.但是成本也随之大幅度增加.

 

磁盘IO瓶颈:

       也许有人会说SAS的传输速度能达到6GB. 但是这对于大多数服务器来说是没有用的. 服务器需要的主要是磁盘的随机访问速度.(因为英特网用户访问的文件是随机的), IO速度. 而不是传输速度.

      

       CPU, 内存这些电子产品不同的是, 磁盘必须依赖于机械式的磁头, 当我们读/写磁盘时, 这个机械臂必须移动到相应的磁道上面来读取数据.

       我们可以在磁盘的参数列表中, 看到机械臂的性能参数: 平均寻道时间.

对于7200转的IDE硬盘, 平均寻道时间在10-13ms左右. 让我们用1秒来除以10ms, 结果是100.

这意味着按照平均寻道时间来算, 我们每秒只能执行100次寻道操作. 对于大型服务器来说, 这是远远不够的.

      

传统文件系统的缺陷:

       上一节我们指出了, 普通IDE硬盘每秒只能执行100次寻道操作. 那么这100次寻道操作, 能读取多少个文件呢??

       1 在传统文件系统中, 每次读文件之前先要找到inode节点(通过open系统调用), inode节点也是存储在硬盘中的, 这就多出了一次磁盘寻道.

       2 为了支持修改文件的功能, 传统文件系统会在每次需要用到新磁盘扇区时, 分配磁盘空间”. 例如我们写100KB的数据, 文件系统会分配200次空间, 每次一个磁盘扇区512字节. 文件系统会尽可能的保证连续分配空间. 但是当磁盘运行时间较长后, 碎片较多, 会导致很多文件无法连续存储, 每读一个文件都要跳跃几次.

       从实际测试结果来看, 7200IDE硬盘每秒读文件的个数仅仅在30次左右.(文件大小4-20KB, 总计40GB文件, 随机读).

 

服务器文件使用的特征和高速文件系统:

       大部分服务器在对磁盘进行操作时, 可以保证文件建立后, 可能会被删除, 但是永远不会进行修改”.

       于是我们可以在创建文件时即确定好文件的大小, 分配磁盘空间, 保证文件一定是连续的. 这样就可以避免文件碎片对IO性能的影响.

       简单的改动即可带来大幅度的性能提升.

 

       我们还可以进一步优化. 将文件所在的磁盘起始地址存储在应用层的hash表中, 仅仅存储文件名, 磁盘地址, 长度, 时间戳(用于出错恢复)就足够了.

 

       经过测试, 我们发现新文件系统的读IO速度是ext33-5. 并且测试时间越长,ext3的碎片就越多, 速度也会变慢;而新文件系统的IO速度一直都是稳定的.

 

       这个文件系统的缺点在于会浪费磁盘空间. 我在三个大型网络中, 对采用这种文件系统的http缓存设备进行了为期一个月的测试(包括一个5000人的企业网, 和两个万人规模的宽带运营商); 结果表明对磁盘空间的浪费仅在15-20%之间.

阅读(1613) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:贪婪tcp协议

给主人留下些什么吧!~~