• 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来优化写操作。

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/peon/p/1059274.html
Copyright © 2020-2023  润新知