是否可以配置 ZFS 以避免使用 ramdisk?
在下一个场景中:
- 创建大文件(例如 100GB)或大量小文件(可用 RAM 比文件总大小多得多)
- 删除这个文件
几乎不会有磁盘 IO。磁盘 IO 应该发生在不再有可用 RAM 或明确刷新缓存(在重启/关机之前)或缓存中的数据足够旧(数小时)时 - 偶尔刷新缓存是可以的,但不要太频繁(一小时一次就可以了)。性能比数据完整性更重要。
我可以使用 ramdisk 来实现这一点,但如果可以像那样配置 zfs 的话会方便得多。
答案1
最好使用 RAMdisk,维护它需要额外的努力,但尽可能多地对抗 ZFS 以使其做到这一点可能需要更多。
这基本上与 ZFS 的工作方式完全相反。ZFS 将尽一切努力保证您的数据安全,然后让您的数据运行得更快。
如果你真的想在 ZFS 上这样做,那将非常危险,而且我不知道它是否真的有效。你需要创建一个完全独立的 Zpool 来处理这个问题,而且在你实现它之后,它可能会很快完全崩溃。你基本上需要配置 ZFS 来保存大量脏数据(仅位于缓存中),而且你将与 ZFS 保持这些数据可靠性的愿望作斗争。
您需要为整个池设置一个非常高的 zfs_dirty_data_max 限制并将 zfs_delay_min_dirty_percent 设置为 100;投入大量 RAM;对所有写入操作的 I/O 队列以及您允许它在特定时间执行的写入量进行大量调整。
所有这些基本上都会破坏 ZFS 确保数据无论发生什么情况都安全的愿望。此外,每当您达到这些限制时,您的性能可能会完全崩溃,并且 ZFS 会尝试一次将 100GB 的缓冲数据提交到磁盘,而不是让它进行多次较小的 100MB 写入。
如果您真的想尝试让它工作,请查看 ZoL 上的可调参数(我假设您正在使用它而不是 Oracle/Solaris ZFS): http://fibrevillage.com/storage/171-zfs-on-linux-performance-tuning