Chronicle:如何优化内存映射文件以实现低延迟?

Chronicle: How to optimize memory-mapped files for low-latency?

我正在使用 Chronicle 将大量数据从一个 JVM 传输到另一个。问题是我注意到我的基准测试有很多抖动。我对内存映射文件的了解有些有限,但我知道 OS 在内存和磁盘之间来回交换页面。

在使用 Chronicle 时,如何配置这些页面以获得最佳性能,在我的情况下,抖动更少,延迟可能最低?他们需要大还是小?他们需要多还是少?

这是我目前在 Ubuntu 盒子里的东西:

$ cat /proc/meminfo | grep Huge
AnonHugePages:      2048 kB
ShmemHugePages:        0 kB
HugePages_Total:       1
HugePages_Free:        1
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB

假设您有 Linux,您可以在构建器上使用 useSparseFiles(true) 启用稀疏文件。

您还可以使用更快的驱动器来减少异常值或/dev/shm

闭源版本中有一个异步模式,但是,如果没有它,您可以获得远低于 80 微秒的大多数离群值。

Chronicle 队列不使用大页面。

这是我在将它与 Kafka 进行比较时创建的图表,写入 Corsair MP600 Pro XT。

http://blog.vanillajava.blog/2022/01/benchmarking-kafka-vs-chronicle-for.html

注意:这是写入和读取大约 220 字节的对象(带序列化)的两跳延迟