zoukankan      html  css  js  c++  java
  • NetApp的WAFL文件系统对RAID的写优化

    参考资料:SAN 存储区域网络 / File System Design for an NFS File Server Appliance

    一.  如何优化RAID4/5的写性能

    RAID4/5都有写性能低下的问题,因为涉及到校验数据的处理。但是,一次写操作尽量写入一个分条(stripe)中尽量多的分块(block),可以优化写性能。

    image

    上图显示了一个带有4个成员磁盘阵列的读、修改和写的周期,其中一个磁盘包含分条的校验数据。

    当新的数据被写入一个独立访问阵列时,将使用下列过程更新校验数据和写入新数据:

    1. 从主机 I/O 控制器接收 I/O 请求和新数据。
    2. 读出将被替代分块的原有数据。
    3. 读出该块的校验数据。
    4. 对校验数据与原有数据实施XOR操作,去除原有数据对校验数据的贡献。
    5. 对该校验数据与新数据实施XOR操作,得到新的校验数据。
    6. 将新的校验数据写入磁盘。
    7. 将新数据写入磁盘。

    这个过程称为读、修改和写周期。

    在一个读、修改和写周期中,一次单个驱动器的写操作需要独立访问阵列做4次数据传输,即原有数据读出、校验数据读出、新校验数据写入以及新数据写入,这导致单个I / O请求的大量的开销。

    因为读、修改和写周期的开销,所以独立访问阵列的读操作比其写操作快得多。事实上,独立访问阵列的写速度比单个磁盘的写操作更慢,也比并行访问阵列的写慢。由于这个原因,当独立访问阵列用于读操作比例大于写操作的应用时,它应该配以回写缓存。

    上面是对分条中的少量分块的写操作,假如是对分条的所有分块做写操作,可以直接XOR校验并写入数据盘和校验盘。这样可以大大提高写性能。

    假如对分条中一半以上的块做写操作,那么可以:

    1. 为即将要写的若干分块保存新的数据。
    2. 从不被更新的一些分块中读出现存的数据。
    3. 计算新的校验数据。
    4. 写新的分块数据和新的校验数据。

    一个回写算法的磁盘缓存可以保存磁盘写,使单个操作能够写入更多的分块。

     

    二. WAFL文件系统对RAID写操作的优化

    WAFL是广泛用于NetApp存储缓存设备的文件系统,WAFL名称的本意是Write Anywhere File Layout。这种设计可以让WAFL尽量将多个写入块写入操作调度到同一个RAID条带中,避免对一个条带的单块写入,来提高RAID的写性能。

    WAFL文件系统的meta-data是存储在文件中的(很多文件系统存储meta-data在磁盘的固定位置),WAFL有3个meta-data文件:

    1. inde file - contains the inodes for the file system
    2. block map file - identifies free blocks
    3. inode map file - identifies free inodes

    将meta-data存储在文件可以让WAFL将meta-data写入到磁盘的任意位置,便于WAFL来优化写操作。

  • 相关阅读:
    JavaScript数字精度丢失问题总结
    前端开发调试线上代码的两款工具
    微信公众账号开发入门
    Chrome/Firefox 中头toFixed方法四舍五入兼容性问题
    GIT/node使用
    addEventListener 的另类写法
    JavaScript 动态插入 CSS
    JavaScript判断各浏览器CSS前缀的两种方式
    流程办理操作说明
    流程设计器(2)
  • 原文地址:https://www.cnblogs.com/peon/p/1059274.html
Copyright © 2011-2022 走看看