分类:
2011-10-22 16:18:42
像大多数现代文件系统一样,ext3尽可能将文件的数据块在磁盘上连续存放。这种布局会减少磁头的寻道时间,加快文件的读写。但是,ext3采用的分配方法是如果它认为文件确实需要的某个磁盘块,它就会将该磁盘块分配给该文件。这种分配方法会影响连续分配文件数据块的策略。当一个文件申请一个新的磁盘块时,该块可能已分配给其他文件了。在这种情况下就不可能连续分配了。
Mingming
Cao已经在尝试解决这个问题,他为ext3编写了一组增加块预留机制的补丁。这些补丁现在是-mm源代码树的一部分。这组补丁的核心思想是文件系统应该提前考虑如果文件增长,可以从哪块空间分配磁盘块,并将这些磁盘块预留。采用这种方法,当文件增长时,会在磁盘的合适位置有空闲磁盘块供使用。
为了达到这个目的,ext3块分配器被改为基于预留机制了。当一个文件第一次需要分配一个新块时,文件系统为它创建一个预留窗口,该窗口中保留了一些磁盘块(初始值为8个),然后从预留窗口中分配磁盘块。当预留窗口中的块用完时,尽量会在旧的预留窗口周围创建一个扩展的预留窗口,以代替旧的预留窗口。预留窗口会持续到写文件的进程关闭文件,然后,这些预留块又重新变为空闲块。
有趣的是,文件系统本身并不跟踪这些预留块。预留块由一个链表管理(现在是由一颗红黑树管理)。块预留机制不能真正阻止别的文件分配属于预留窗口的磁盘块。因为,文件系统优先考虑块预留机制,尽可能在预留窗口中分配磁盘块,并且,这些预留窗口不会重叠,但是,某些情况下,比如说所有空闲块都被预留了,则文件系统就不会考虑块预留机制,从任何地方都可以分配磁盘块。
一些结果表明采用块预留机制后,ext3性能有很大的提高,特别是大量进程同时运行时。在一定程度上说,性能提高的原因是块预留机制减少了搜索空闲块的距离。然而,真正的优点是文件在磁盘上的布局更加合理。除非出现问题,否则这些补丁很快会进入主线源代码中。