real-logic's Aeron可以处理的最大消息的大小是多少?
我意识到Aeron会发出小消息,但是我希望在整个协议(protocol)栈中使用一个协议(protocol),因此我们的某些消息很容易达到100Mb的大小。
文档尚不清楚哪些设置会影响此问题的答案。我担心的是,默认的缓冲区设置不允许这种大小的邮件。还是缓冲区设置对最大应用程序消息大小没有影响?
最佳答案
我们在最近与Aeron的主要撰稿人Martin Thompson的 session 上讨论了这个问题。
不仅无法超过页面的大小,而且如果您查看Aeron presentation slides 52到54,这些也是不推大文件的主要原因:
如果消息大小接近
页面大小,这将使Aeron在下一个重复该序列
页面,即主要减速
长话短说,如果使用IPC,请将100M消息分成较小的块,最多为页面大小减去标题的1/4。或MTU减去标题的大小(最大传输单位)(如果您通过UDP)。它将提高吞吐量,消除管道堵塞并解决其他问题。 MTU背后的逻辑是,UDP数据包偶尔会丢失,而Aeron会从丢失的数据包开始重新发送所有内容。因此,您想让数据块适合单个数据包以提高性能。
为了获得最佳性能,在您的应用程序级别协议(protocol)中,我将创建一个具有文件元数据和长度的第一个数据包,然后接收方在给定长度的HDD上创建内存映射文件,并用传入的块填充该文件,其中每个块都包含偏移量和文件ID(以防您要同时推送多个文件)。这样,您可以从Aeron缓冲区复制到mmap,并完全避免垃圾回收。我希望这种文件传输的性能比大多数其他选项要快。
回答原始问题:
使用默认设置,最大邮件大小为16MB减去32字节的 header 。
要更改它,可以在媒体驱动程序上尝试更改
aeron.term.buffer.length
和aeron.term.buffer.max.length
系统属性(请参阅Aeron Configuration Options)。在这里,术语缓冲区对应于文档其他部分中的“页面”,并且实际上在某些方面与OS内存页面相似。 term.buffer.max.length配置循环中的缓冲区/页面数。关于network-programming - Aeron可以处理的最大讯息是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32243664/