我们正在运行一个基于Java的交易应用程序,并且在某些时间段,我们希望在大约10毫秒内尽可能优先处理传出的网络流量。有没有办法在短时间内临时缓冲所有传入的网络流量,无论是在网卡上,还是通过我们的Redhat Linux机器上的进程或缓冲区?
这背后的理由是,传入的网络流量在同一时间段内达到峰值,处理这些流量的应用程序正在从我们试图确定优先级的进程中窃取CPU周期。我们无法对处理传入网络流量的应用程序进行细粒度控制。
我们使用的是1Gbps的连接,所以1MB的缓冲区应该足够了。我们不希望丢弃传入流量并请求重新传输,因为这会在相当繁忙的时段增加网络负载。
发布于 2015-01-08 08:10:20
可以在路由器上使用Qos,或通过以下示例配置使用trickle来控制带宽:
/etc/trickled.conf.参见url中的示例。
发布于 2015-01-09 02:44:18
我不确定我是否正确地理解了你的问题。您需要考虑的是,有时您需要优先处理输出网络流量,此时传入流量将不断增加,最终可能会导致数据包丢失或重新传输,这是您不想要的。因此,您需要缓冲传入的流量。
如果我的理解是正确的,并且您正在使用TCP,请尝试使您的tcp缓冲区更大。http://kaivanov.blogspot.com/2010/09/linux-tcp-tuning.html,然后使用netstat检查您的更改是否有效。
发布于 2015-01-12 08:16:52
Adrian,您是否尝试过将传出通信进程的优先级设置为高于接收传入数据的进程的优先级?使用nice命令可以实现这一点。请注意,在Unix/Linux中,数字越小,优先级越高。
否则,如果不在发送/接收的两个应用程序之间建立直接联系,我就不确定这是可能的,这允许您有效地忽略准备读取的传入连接,直到您的任何数据发送出去。
https://stackoverflow.com/questions/27626108
复制相似问题