Eri*_*ten 5 network-programming aeron
我意识到 Aeron 适合处理小消息,但是我希望在我们的堆栈中有一个单一的协议,并且我们的一些消息很容易达到 100Mb 的大小。
文档不清楚哪些设置会影响这个问题的答案。我担心的是默认缓冲区设置不允许这种大小的消息。或者缓冲区设置对最大应用程序消息大小没有影响吗?
我们在最近与 Aeron 的主要贡献者 Martin Thompson 的一次会议上讨论了这个问题。
不仅不能超过页面大小,如果你看看Aeron 演示幻灯片52 到 54,这些是不推送大文件的主要原因:
长话短说,如果你使用 IPC,将你的 100M 消息分成更小的块,最多 1/4 的页面大小减去标题;或者 MTU 的大小减去报头(最大传输单位),如果你通过 UDP。它将提高吞吐量,消除管道堵塞并解决其他问题。MTU 背后的逻辑是,有时 UDP 数据包会丢失,并且 Aeron 会从丢失的数据包开始重新发送所有内容。因此,为了提高性能,您希望块适合单个数据包。
为了获得最佳性能,在您的应用程序级协议中,我将创建第一个具有文件元数据和长度的数据包,然后接收方在给定长度的 HDD 上创建内存映射文件,并用传入的块填充它,其中每个块都包含偏移量和文件 ID(如果您想同时推送多个文件)。这样您就可以从 Aeron 缓冲区复制到 mmap 并完全避免垃圾收集。我希望这种文件传输的性能比大多数其他选项更快。
回答原始问题:
在默认设置下,最大消息大小为 16MB 减去 32 字节标头。要更改它,您可以在您的媒体驱动程序上尝试更改
aeron.term.buffer.length和aeron.term.buffer.max.length系统属性(请参阅Aeron 配置选项)。在这里,术语缓冲区对应于文档其他部分中的“页面”,实际上,在某些方面与操作系统内存页面类似。而 term.buffer.max.length 配置轮换缓冲区/页面的数量。