在我的实验室中有一个用于在Ubuntu上运行测量的服务器.并且有C程序,它通过TCP连接接收数据,并应尽快发送回复.
组态
> cpu:2个处理器x 4个核心 – 英特尔(R)Xeon(R)cpu E5345 @ 2.33GHz
> RAM:12 GB
> NIC:Intel Corporation 80003ES2LAN千兆以太网控制器/ 82546EB千兆以太网控制器
>网络交换机:Cisco Catalyst 2960
>数据信息:大约数据块.每10毫秒.数据块大小约为. 1000字节.
接收数据包时的网络延迟非常关键(数十微秒很重要).我将程序优化到最大程度,但我没有调整Ubuntu的经验.
可以在Ubuntu中配置什么来减少处理/发送数据包的本地延迟?
解决方法
老实说,I wouldn’t be using Ubuntu for this ……但是有些选项可以应用于任何Linux变体.
您需要增加网络堆栈缓冲区:
net.core.rmem_default = 10000000 net.core.wmem_default = 10000000 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
如果应用程序正在写入磁盘,则可能需要更改调度程序/电梯(例如,截止期限电梯).
在服务器级别,您可以修改cpu调控器和电源以及cpu频率管理(P状态,C状态).
在操作系统级别,您可以更改应用程序的实时优先级(chrt
),优化以减少中断,将其固定到cpu或cpu组(taskset
),并停止任何不必要的服务或守护程序.
您还可以在以下网址看到一些建议:How to troubleshoot latency between 2 linux hosts
在不了解所涉及的硬件或网络设备的情况下,很难更具体.