Linux 如何临时缓冲对延迟敏感的HFT应用程序的传入网络流量?

Linux 如何临时缓冲对延迟敏感的HFT应用程序的传入网络流量?,linux,networking,latency,hft,Linux,Networking,Latency,Hft,我们正在运行一个基于Java的交易应用程序,在某些特定的时间段内,我们希望尽可能多地优先处理传出的网络流量,持续约10毫秒。是否有一种方法可以在短时间内临时缓冲所有传入的网络流量,无论是在网卡上还是通过Redhat Linux机箱上的进程或缓冲区 这背后的基本原理是,传入的网络流量在同一时间段内出现峰值,而处理此流量的应用程序正在从我们试图确定优先级的进程中窃取CPU周期。我们对处理传入网络流量的应用程序没有细粒度的控制 我们使用的是1 Gbps连接,因此大约1 MB的缓冲区应该足够了。我们不希

我们正在运行一个基于Java的交易应用程序,在某些特定的时间段内,我们希望尽可能多地优先处理传出的网络流量,持续约10毫秒。是否有一种方法可以在短时间内临时缓冲所有传入的网络流量,无论是在网卡上还是通过Redhat Linux机箱上的进程或缓冲区

这背后的基本原理是,传入的网络流量在同一时间段内出现峰值,而处理此流量的应用程序正在从我们试图确定优先级的进程中窃取CPU周期。我们对处理传入网络流量的应用程序没有细粒度的控制

我们使用的是1 Gbps连接,因此大约1 MB的缓冲区应该足够了。我们不希望丢弃传入流量并请求重新传输,因为这会在非常繁忙的时段增加网络负载。


可能在路由器上使用Qos,或通过以下示例配置来控制带宽:

   /etc/trickled.conf.


请参阅url中的示例。

我不确定是否正确理解了您的问题。您担心的是,有时您有优先权处理输出网络流量,此时传入流量将增加,最终可能导致您不希望的包丢失或重新传输。因此,您希望缓冲传入的流量

如果我的理解是正确的,并且您正在使用TCP,请尝试使您的TCP缓冲区更大。
然后使用检查您的更改是否有效。

Adrian,您是否尝试将传出通信过程的优先级设置为高于接收传入数据的过程的优先级?使用
nice
命令可以实现这一点。请注意,在Unix/Linux中,数字越低,优先级越高


否则,如果两个发送/接收的应用程序之间没有直接联系,我不确定这是否可行,允许您有效地忽略已准备好读取的传入连接,直到发送所有数据。

使用多个通道发送不同优先级的数据包如何?我无法控制NIC接收的网络流量,我需要一个解决方案,可以在卡本身上缓冲~1 MB的传入流量约10毫秒,或者使用低级软件缓冲区。您是否尝试过使用
/proc/sys/net/core
/proc/sys/net/ipv4
?特别是rmem_max、tcp_mem、tcp_rmem。谢谢qqibrow。我关心的不是丢包,而是将机器的大部分资源分配给一些任务关键型的传出传输,时间为20毫秒,并延迟处理任何接收到的流量。由于我无法控制处理传入流量的应用程序,我认为简单地阻止它们在短时间内使用这些数据将是最简单的解决方案。谢谢迭代器。消耗系统资源的不是通信过程,而是消耗网络数据的应用程序占用了系统资源,在某些情况下甚至锁定了来自这些应用程序的一些传出流量。这就是我希望优先级设置可以给您带来一些缓解的地方。它应该优先考虑更高优先级的进程(在本例中,就是您试图允许进行通信的那个进程),并提供更多的CPU时间。如果您进行了实验,并且确实有所帮助,那么您可以很容易地使用一个脚本来更改优先级,然后再使用另一个脚本来更改优先级。非常有趣,但遗憾的是,它看起来无法在我们正在运行的应用程序中正常工作。回答得很好。看来链接已经死了,有正确的链接: