Neo4j 和大页面

Neo4j and Hugepages

由于 Neo4j 主要在内存中工作,我想知道在我的 Linux 内核中启用大页面 (https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt) 是否有利,然后是 XX:+UseLargePages 或者 -XX: +在 (OpenJDK 8) JVM 中使用 HugeTLBFS ?

如果是这样,我应该使用什么经验法则来决定配置多少大页面?

Neo4j 性能指南 (http://neo4j.com/docs/stable/performance-guide.html) 没有提到这一点,而且 Google 也没有其他人讨论它(无论如何在前几个搜索页面中),所以我想我会问。

我正在努力从我的新 Neo4j 实例(2.3.2-社区)中获得可接受的性能。任何一点点都会有所帮助。在关闭数据库以更改 JVM 标志之前,我想知道这是否值得尝试……我希望其他人已经按照这些思路做了一些实验。

谢谢!

由于 Neo4j 自己进行文件分页并且不依赖 OS 来执行此操作,因此 应该 是有利的或至少不会受到伤害。当你使用大量内存时,大页面会降低 TLB 缓存未命中的可能性,而 Neo4j 在存储大量数据时通常会这样做。

然而,Neo4j 并不直接使用大页面,尽管它可以而且这将是一个很好的补充。这意味着您必须依赖 transparent 大页面和 JVM 提供的任何功能。合并较小的页面时,透明的大页面可能会或多或少地导致短暂的停顿。

如果你有一个有代表性的暂存环境,那么我建议你先在那里进行更改,然后衡量它们的效果。

透明大页面主要是使用mmap的程序的问题,因为我认为它会导致改变IO单元的大小,这将使硬页面错误延迟要高得多。不过我也不是很确定,所以如果我错了请指正。

JVM 实际上确实使用 mmap 进行遥测和工具,通过 /tmp 中的一个文件,因此确保此目录安装在 tmpfs 上以避免粗糙的 IO 停顿,例如在安全点期间 (!!!)。即使您不使用大页面,也要始终这样做。

还要确保您使用的是最新的 Linux 内核和最新的 Java 版本。

调G1或许可以压榨几个百分点,但这有点黑。