我遇到了我认为是一个非常奇怪的性能问题
我有一个应用程序处理一些数据,并创build100GB左右的文件。 这运行良好,我可以scp文件closures后,机器。 本地磁盘是ZFS,也许这就是问题所在。
但是,如果我运行另一个mmaps文件的实用程序,并在文件closures之前交换文件的字节,则文件:1)从固态磁盘systat转移得慢得多,也许是50mb / s(或更糟糕) iostat显示了更高的磁盘交易级别。 2)机器的有线存储器穿过屋顶,以容纳70+ GB ARC 70GB的弧,这看起来很荒谬,因为这是本地磁盘存储的四分之一左右。 如果传输后文件被删除,ARC会下降,但有线存储器似乎不会。 任何想法正在发生什么?
使用mmap()写入数据时,非Solaris平台上的ZFS似乎性能很差。
从旧的OpenSolaris邮件列表中查看此主题 :
在zfs上补救不理想的mmap性能
我正在使用基于mmap的数据库(mongodb)获得次优性能,该数据库在Solaris 10u9的zfs上运行。
…
那是在旧版本的Solaris上。 这是相关的,因为从FreeBSD邮件列表2016年7月线程 (重点添加):
简短的故事:ZFS被join到内核中,并没有被正确地整合到VM页面pipe理中,导致DRAMATIC对使用mmap()写IO的任何事情都performance不佳。 这是在Oracle Solaris中解决的,在重新启动Opensolaris之后,重新分配了很大的VM分配器。
如果没有完全重写虚拟机系统,这个问题是无法解决的。
与此后续 :
…因为最初的导入很less改进整合,而且我不知道任何人是否愿意对这个任务感兴趣。 因此,在可预见的未来,mmap()的性能可能“注定要失败”。
所以这个问题已经在Solaris上解决了,但不是在FreeBSD上。
如果你需要更快的mmap()性能,我build议大大限制你的ZFS ARC的大小。 这应该减lessmmap()使用的页面caching和ARC之间的一致性问题的影响。 这可能会提高性能。 然后再一次,它可能不会。 但值得尝试。 只是不要太小,否则你的ARC限制将被忽略。