Network programming Aeron能处理的最大消息是什么?

Network programming Aeron能处理的最大消息是什么?,network-programming,aeron,Network Programming,Aeron,可以处理的最大消息的大小是多少 我意识到Aeron适用于小消息,但是我希望在整个堆栈中使用一个协议,并且我们的一些消息很容易达到100Mb的大小 文档中不清楚哪些设置会影响此问题的答案。我担心的是默认缓冲区设置不允许这种大小的消息。或者缓冲区设置对最大应用程序消息大小没有影响吗?我们在最近与Aeron的主要贡献者Martin Thompson的一次会议上讨论了这个问题 不仅不可能超过页面大小,如果您查看52到54,以下是不推送大文件的主要原因: 如果消息大小接近 页面大小,这将使Aeron与下

可以处理的最大消息的大小是多少

我意识到Aeron适用于小消息,但是我希望在整个堆栈中使用一个协议,并且我们的一些消息很容易达到100Mb的大小


文档中不清楚哪些设置会影响此问题的答案。我担心的是默认缓冲区设置不允许这种大小的消息。或者缓冲区设置对最大应用程序消息大小没有影响吗?

我们在最近与Aeron的主要贡献者Martin Thompson的一次会议上讨论了这个问题

不仅不可能超过页面大小,如果您查看52到54,以下是不推送大文件的主要原因:

  • 如果消息大小接近 页面大小,这将使Aeron与下一页重复序列 第页,即主要减速
  • 缓存搅动器
  • VM压力
长话短说,如果你使用IPC,将你的100米信息分成小块,最多为页面大小减去页眉的1/4;或者MTU减去标头(最大传输单位)的大小(如果通过UDP)。它将提高吞吐量,消除管道堵塞并解决其他问题。MTU背后的逻辑是,偶尔UDP数据包丢失,一切都由Aeron从丢失的数据包开始重新发送。因此,您希望让块适合单个数据包以提高性能

为了获得最佳性能,在您的应用程序级协议中,我将创建具有文件元数据和长度的第一个数据包,然后接收方在给定长度的HDD上创建内存映射文件,并用传入的数据块填充该文件,其中每个数据块包括偏移量和文件ID(如果您希望同时推送多个文件)。这样,您可以从Aeron缓冲区复制到mmap,并完全避免垃圾收集。我希望这种文件传输的性能比大多数其他选项更快

回答原始问题: 在默认设置下,最大消息大小为16MB减去32字节头。 要更改它,您可以在媒体驱动程序上尝试更改
aeron.term.buffer.length
aeron.term.buffer.max.length
系统属性(请参阅)。这里,术语buffer对应于文档其他部分中的“页面”,事实上,在某些方面,其工作方式与操作系统内存页面类似。而term.buffer.max.length配置循环中的缓冲区/页面数

如果有人有更高的声誉,请添加“aeron”标签。我不确定aeron中是否已经存在类似的内容,但我非常确定您可以将100Mb的消息打包到任何大小。那么你就不必担心尺寸过大了。我很确定有文件可以解释这个确切的情况。祝你好运根据页面大小,我猜您指的是操作系统内存映射?@Erikvanosten我意识到我没有正确回答实际问题,所以我更新了我的答案。