File System Performance

高速缓存

  • 块高速缓存(block cache)缓冲区高速缓存(buffer cache)是逻辑上属于磁盘但保留在内存中以提高性能的块的集合。

  • 以前的所有分页置换算法都可用于确定在需要新块且缓存已满时应写入哪个块。

  • 不希望数据块在高速缓存中放很久之后才写入磁盘
    • 应定期写出所有数据块(例如,写出全天工作的)。
    • UNIX-系统调用syn会强制性地将修改的块立即写入磁盘。同步期间,更新每30秒在后台运行一次
    • MS-DOS-直写缓存=>立即写入所有修改的块。
      • 写入一个1K的块,一次写入一个字符
        • UNIX在高速缓存中保存全部字符,每30秒把该块写回磁盘一次
        • MS-DOS一次写入1B

块提前读 Block read ahead

  • 在需要用到块之前,将块放入高速缓存,从而提高命中率;
  • 适用于按顺序读取的文件;
  • 如果文件被随机访问,预读没有帮助;
    • 它会将磁盘带宽用于读取无用的块,并从缓存中删除可能有用的块;

减少磁盘臂运动

读取块需要一个访问I-Node和一个用于块的访问。

磁盘碎片整理 Defragmenting Disks

  • 随着时间的推移,文件被创建和删除,磁盘变得碎片化,到处都是文件和漏洞。
  • 创建新文件时,用于该文件的块可能分布在整个磁盘上,从而导致性能低下。
  • 通过移动文件使其连续,并将所有(或至少大部分)可用空间放在磁盘上一个或多个大的连续区域中,可以恢复性能。
  • Windows有一个程序,defrag,正是这样做的。Windows用户应该定期运行它,SSD除外。

文件系统实例

MS-DOS文件系统

  • 许多数码相机和MP3播放器都使用它。
  • 使用固定大小的32字节目录项。

  • FAT文件系统总共有FAT-12、FAT-16、FAT-32三个版本,取决于磁盘地址包含有多少进制位
    • FAT-32只用到了地址空间中的低28位
    • \(0.5KB \ \cdot \ 2^{12} \ = \ 2MB\)

The UNIX V7 File System

问题

  • 每一个磁盘块:1KB
  • 每一个磁盘块号大小:4B
  • 一个磁盘块可索引的磁盘块数量:1KB/4B = \(2^8\)
  • 使用的是二级间接索引,所以文件最大大小为:\(2^8\cdot2^8\cdot1KB \ =2^6MB = 64 MB\)

经过/读取一个块:27/9 = 3ms