我一直在玩不同的文件系统,并在使用 mmap 时比较各种文件系统的性能。
令我惊讶的是,更改为 JFS 直接使写入性能翻了一番。我认为已经对页面缓存进行了写入,所以当写入完成后,应用程序会继续快速运行吗?它实际上是linux下的同步操作吗?
读取性能略有提高,但没有那么显着。
我一直在玩不同的文件系统,并在使用 mmap 时比较各种文件系统的性能。
令我惊讶的是,更改为 JFS 直接使写入性能翻了一番。我认为已经对页面缓存进行了写入,所以当写入完成后,应用程序会继续快速运行吗?它实际上是linux下的同步操作吗?
读取性能略有提高,但没有那么显着。
写入是直接对页面缓存进行的,但是第一次写入每个页面时会导致一个小错误,将页面标记为脏页。此时文件系统有机会执行一些工作 - 在 的情况下xfs
,这涉及延迟分配记帐和范围创建。您可以尝试事先预分配整个文件,以查看这如何/是否会改变事情。(jfs
使用通用 mmap 操作,它不提供页面可写时使用的回调)。
另请注意,一旦脏页缓存页面的比例超过/proc/sys/vm/dirty_ratio
,内核将从后台异步回写切换到脏页由脏页的进程同步回写。
XFS 和 JFS 之间的一个显着区别是 XFS 支持障碍并默认启用它们,但 JFS 根本不支持障碍。因此,当在具有回写缓存的磁盘上运行时,JFS 是不安全的(但速度很快!)。
JFS 在您的测试中具有更好的写入性能可能是这种情况的影响。
也许您应该查看每个文件系统的基准。每个 FS 在某些条件下都很快 AFAIK。
http://fsbench.netnation.com/是我在 Google 中用于 xfs jfs 基准测试的第一个热门产品。浏览结果似乎表明 xfs 在许多情况下的速度更快。
我建议您在目标机器上运行基准测试以自己找出答案。
一种猜测是,您注意到的加速很可能出现在 jfs 的最佳情况下。