Ale*_*x V 12 networking linux ubuntu latency performance-tuning
在我的实验室中有一个用于测量的服务器在 Ubuntu 上运行。还有C程序,它通过TCP连接接收数据,并应尽快发送回复。
配置
接收数据包时的网络延迟非常关键(几十微秒很重要)。我最大限度地优化了程序,但我没有调整 Ubuntu 的经验。
在Ubuntu中可以配置什么来减少处理/发送数据包的本地延迟?
eww*_*ite 11
老实说,我不会为此使用 Ubuntu ......但是有一些选项可以应用于任何 Linux 变体。
您需要创建网络堆栈缓冲区:
net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
Run Code Online (Sandbox Code Playgroud)
如果应用程序正在写入磁盘,则可能需要更改调度程序/电梯(例如deadline
电梯)。
在服务器级别,您可以修改 CPU 调控器以及电源和 CPU 频率管理(P-States、C-States)。
在操作系统级别,您可以更改应用程序的实时优先级 ( chrt
),优化以减少中断,将其固定到一个 CPU 或一组 CPU ( taskset
),并停止任何不必要的服务或守护进程。
您还可以在以下位置看到一些建议:如何对 2 台 linux 主机之间的延迟进行故障排除
在不了解所涉及的硬件或网络设备的情况下,很难获得更具体的信息。
如果您要走高性能路线,通常您会希望运行尽可能少的其他(计划的)进程,因为它们会干扰您的应用程序。
与经典的 UNIX 操作系统一样,Linux 旨在以公平的方式同时运行多个应用程序,并试图防止资源匮乏,而您的目标恰恰相反,除了您的应用程序之外,其他一切都将被饿死。操作系统级别的简单步骤是更改应用程序的良好级别和实时优先级,更改调度程序或使用实时内核。
TCP/IP 通常经过调整以防止连接中断并有效利用可用带宽。为了从非常快的链接中获得尽可能低的延迟,而不是从一些中间链接受到更多限制的连接中获得尽可能高的带宽,您将调整网络堆栈的调整。
sysctl -a
Run Code Online (Sandbox Code Playgroud)
将向您展示许多可以调整的内核设置。设置取决于您使用的是 IPv4 还是 IPv6 以及您在应用程序中已经完成但感兴趣的内容:
net.ipv4.tcp_window_scaling=1
RFC 1323 - 支持大于 64K 的 IPV4 TCP 窗口大小 - 通常在高带宽网络上需要net.ipv4.tcp_reordering=3
IPV4 数据包可以在 TCP 数据包流中重新排序的最大次数,而 TCP 假设数据包丢失并进入慢启动状态。net.ipv4.tcp_low_latency=1
旨在优先考虑低延迟而不是更高的吞吐量;设置 =1 禁用 IPV4 tcp 预队列处理net.ipv4.tcp_sack=0
设置为 1 启用对 IPV4 的选择性确认,这需要启用 tcp_timestamps 并增加一些数据包开销,如果您没有遇到丢包,则不需要这些开销net.ipv4.tcp_timestamps=0
仅在需要麻袋的情况下才建议使用。net.ipv4.tcp_fastopen=1
启用在打开的 SYN 数据包中发送数据。大多数(如果不是全部)在内核源代码中都有更好的记录。
您当然可以编写原始 TCP 套接字并在很大程度上完全绕过内核 TCP/IP 堆栈。
通常高度调优的系统在受信任的网络中运行,并且会禁用其本地(iptables)防火墙。
归档时间: |
|
查看次数: |
32640 次 |
最近记录: |