Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 稳定延迟。Wireshark捕获的许多TCP错误校验和数据包_Linux_Networking_Tcp_Driver - Fatal编程技术网

Linux 稳定延迟。Wireshark捕获的许多TCP错误校验和数据包

Linux 稳定延迟。Wireshark捕获的许多TCP错误校验和数据包,linux,networking,tcp,driver,Linux,Networking,Tcp,Driver,我正在编写一些网络软件,并试图最小化和稳定延迟。 我想到了一件事,在大多数情况下,远程主机的延迟(通过某种协议发送消息和接收ACK)约为2毫秒,但有时会出现一些波动(立即变为40毫秒,然后又变回2毫秒),我无法解释(代码非常简单明了),因此我开始责怪网卡。我通过WireShark发现的第一件事是有很多TCP错误校验和数据包?有可能是这样吗?这是第一件事,毕竟我发现我的英特尔网卡被操作系统(Linux SLED 11)错误地检测到。lspci命令输出错误的NIC信息。我怎样才能修好它?我应该重新安

我正在编写一些网络软件,并试图最小化和稳定延迟。 我想到了一件事,在大多数情况下,远程主机的延迟(通过某种协议发送消息和接收ACK)约为2毫秒,但有时会出现一些波动(立即变为40毫秒,然后又变回2毫秒),我无法解释(代码非常简单明了),因此我开始责怪网卡。我通过WireShark发现的第一件事是有很多TCP错误校验和数据包?有可能是这样吗?这是第一件事,毕竟我发现我的英特尔网卡被操作系统(Linux SLED 11)错误地检测到。lspci命令输出错误的NIC信息。我怎样才能修好它?我应该重新安装驱动程序吗?如果是,我怎么做

谢谢

请查看有关校验和错误的信息。校验和有时由NIC在硬件中计算,因此wireshark会错误地看到它,即使它在线路上是正确的

除非您有一个直接的点对点网络连接,并且中间没有任何路由器或交换机,否则您将无法消除延迟的所有变化。即使是直接连接,除非两端都运行实时操作系统,否则也无法实现。队列变满、内存被调进和调出、高优先级任务正在运行以及许多其他因素都会影响延迟。如果您想最小化抖动的有害影响,您需要研究抖动缓冲区和滑动窗口协议

另外,lspci命令显示在pci总线上实际检测到的芯片组,实际上与它使用的驱动程序无关。制造商偶尔更换芯片组,而且它们并不总是与盒子上的品牌很匹配。根据驱动程序的历史记录,名称不一定符合您的期望。如果有流量通过,几乎可以肯定您使用的是正确的驱动程序。

请查看有关校验和错误的信息。校验和有时由NIC在硬件中计算,因此wireshark会错误地看到它,即使它在线路上是正确的

除非您有一个直接的点对点网络连接,并且中间没有任何路由器或交换机,否则您将无法消除延迟的所有变化。即使是直接连接,除非两端都运行实时操作系统,否则也无法实现。队列变满、内存被调进和调出、高优先级任务正在运行以及许多其他因素都会影响延迟。如果您想最小化抖动的有害影响,您需要研究抖动缓冲区和滑动窗口协议


另外,lspci命令显示在pci总线上实际检测到的芯片组,实际上与它使用的驱动程序无关。制造商偶尔更换芯片组,而且它们并不总是与盒子上的品牌很匹配。根据驱动程序的历史记录,名称不一定符合您的期望。如果车辆超车,几乎可以肯定您使用的是正确的驾驶员。

谢谢您的评论!所以我不应该为校验和错误而烦恼,而是更关注代码?我直接连接到服务器并运行实时操作系统(也使用实时Java)。也许您可以推荐一些实践和模式,以有效地组织客户端(例如,我需要读取更多数据并将很少的数据发送回服务器)?延迟、抖动和吞吐量之间总是存在权衡,如何优化取决于应用程序。你用它做什么?我用它做交易申请。从交易服务器连续检索数据,处理每条消息,有时将其发送回服务器一些指示。我试图找到好的建筑设计,但我找不到任何材料或以前的经验。现在我想到了单线程(实时最高优先级)->我读取ByteBuffer,解组消息并将其发送到算法(处理大约50mk秒)。所以所有的过程都是同步的。也许有两个线程更合适?一个用于I/O,一个用于算法和它们之间的阻塞队列?因此我现在尝试调整网络延迟,因为我对算法非常有信心(它的处理时间非常稳定,适合我,50mksec),应用程序对抖动不敏感,例如视频或音频流,所以我不会太担心偶尔的40毫秒。问题是吞吐量或延迟对您是否更重要。通过在接收下一个数据时在单独的线程中处理前一个数据,您可能会获得更高的吞吐量,因为处理器可以利用数据包之间的间隙。如果周转比每秒交易量更重要,那么您当前的单线程架构通常会更好,因为您避免了上下文切换开销。谢谢您的评论!所以我不应该为校验和错误而烦恼,而是更关注代码?我直接连接到服务器并运行实时操作系统(也使用实时Java)。也许您可以推荐一些实践和模式,以有效地组织客户端(例如,我需要读取更多数据并将很少的数据发送回服务器)?延迟、抖动和吞吐量之间总是存在权衡,如何优化取决于应用程序。你用它做什么?我用它做交易申请。从交易服务器连续检索数据,处理每条消息,有时将其发送回服务器一些指示。我试图找到好的建筑设计,但我找不到任何材料或以前的经验。现在我想到了单线程(实时最高优先级)->我读取ByteBuffer,解组消息并将其发送到算法(处理大约50mk秒)。所以所有的过程都是同步的。也许这更合适