Linux 内核导致 UDP 数据包丢失

2023-11-23

我有一个通过多播发送 UDP 数据包的服务器和一些列出这些多播数据包的客户端。 每个数据包的大小固定为1040 Bytes,服务器发送的整个数据大小为3GByte。

我的环境如下:

1 Gbit 以太网

40 个节点,1 个发送方节点和 39 个接收方节点。 所有节点都具有相同的硬件配置:2 个 AMD CPU,每个 CPU 有 2 个内核 @2,6GHz

在客户端,一个线程读取套接字并将数据放入队列中。另一个线程从队列中弹出数据并执行一些轻量级处理。

在组播传输过程中,我发现节点侧的丢包率为 30%。通过观察 netstat –su 统计数据,我可以说,客户端应用程序丢失的数据包等于 netstat 输出中的 RcvbufErrors 值。

这意味着所有丢失的数据包都会被操作系统丢弃,因为套接字缓冲区已满,但我不明白为什么捕获线程无法及时读取缓冲区。 在传输过程中,4 个核心中的 2 个核心利用率为 75%,其余核心处于休眠状态。 我是唯一使用这些节点的人,我认为这种机器处理 1Gbit 带宽没有问题。我已经做了一些优化,通过为 amd cpu 添加 g++ 编译器标志,这将丢包率降低到 10%,但在我看来仍然太高了。

我当然知道UDP不可靠,我有自己的修正协议。

我没有任何管理权限,因此我无法更改系统参数。

有什么提示可以提高性能吗?

编辑: 我通过使用两个读取套接字的线程解决了这个问题。有时,recv 套接字缓冲区仍会变满。但平均跌幅在1%以下,处理起来不成问题。


在 Linux 上追踪网络丢失可能有点困难,因为有许多组件可能会发生数据包丢失。它们可以出现在硬件级别、网络设备子系统或协议层。

我写了一篇很详细的博客文章解释如何监控和调整每个组件。在这里总结为一个简洁的答案有点困难,因为有很多不同的组件需要监视和调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 内核导致 UDP 数据包丢失 的相关文章

  • 为什么我的 Java 代码执行 bash 命令不正确?

    我试图让我的 Java 程序与 Linux bash 交互 但出了问题 我有一个简单的可执行文件prog从中读取一个整数stdin并输出其平方 执行中 echo 5 prog 从 bash 本身打印正确答案25 in stdout但运行 i
  • 配置错误:无法链接到 boost_system

    我正在尝试在 Debian 上安装一个软件包 足球模拟器 2d 当我进入目录并运行时 configure 我得到以下信息 reza debian soccer rcssserver 15 0 1 configure checking for
  • 在 Ubuntu 上运行独立的 ASP.NET Core 应用程序

    我已经发布了一个 ASP NET Core 应用程序作为针对 Ubuntu 的独立应用程序 发布似乎工作正常 我已将这些文件复制到一台漂亮的 Ubuntu 机器上 现在 我如何运行我的应用程序 我的理解是 因为它是一个独立的 NET Cor
  • 如何在汇编语言中换行打印多个字符串

    我试图在汇编中的不同行上打印多个字符串 但使用我的代码 它只打印最后一个字符串 我对汇编语言非常陌生 所以请耐心等待 section text global start start mov edx len mov edx len1 mov
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • 从 bash 脚本返回值

    我想创建一个返回值的 Bash 文件 意思是 在脚本 script a bash 中我有一定的计算 脚本 script b bash 会调用它 script a bash return 1 5 script b bash a value s
  • 带有 epgm 的 ZeroMQ PUB/SUB 无法接收同一主机上进程发送的消息

    我的所有进程都有两个套接字 一个 PUB 和一个 SUB 并且它们都使用相同的多播地址和端口 例如 PUB 会这样做 绑定 epgm 239 192 1 1 5555 SUB 将执行以下操作 连接 epgm 239 192 1 1 5555
  • 安全地记住 bash 脚本中的 ssh 凭据[重复]

    这个问题在这里已经有答案了 假设我有一个 bash 脚本 它通过 ssh 在远程计算机上执行命令 Do something here ssh otheruser host command1 Do something else ssh oth
  • 使用多线程的套接字服务器或文件服务器实现:概念不清楚

    请帮我理清这个概念 假设我们有一个使用线程实现的套接字端口服务器 套接字服务器侦听套接字端口 并在消息到达时创建一个线程来服务该请求 客户端代码向服务器发送给定数量的消息 该客户端代码也可以由多个用户在不同的计算机上运行 我知道客户端代码作
  • Web 本地应用程序 Apache:运行 shell 脚本

    我开发了一个 shell 脚本 我想用它创建一个 UI 我决定使用带有本地服务器的 Web 界面 因为我对 HTML PHP 的了解很少 比 QT 或 Java 的了解更多 我只是希望我的 html 可以在我的计算机上运行 shell 脚本
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • 如何重命名共享库以避免同名冲突?

    我找到了一个图书馆 libjson http sourceforge net projects libjson 我正在尝试将其构建为共享库并在项目中使用 建造很简单 修复 Makefile 错误后 SHARED 1 make install
  • 无法在 R 中安装插入符号包(在我的 Linux 机器中)

    我在尝试在 R 中安装插入符号包时遇到以下错误 g error tmp Rtmp2Tos7n R INSTALL2e6e30153a74 nloptr nlopt 2 4 2 lib libnlopt cxx a No such file
  • bash 别名中允许使用哪些字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近添加了 alias cd alias cd alias cd 到我的 bash aliases 文件 玩弄这个 我注意到在别名时 被
  • 尝试 SSH 时设备的 ioctl 不合适

    我正在尝试通过 SSH 连接几台服务器并尝试获取sudo l每个服务器的输出 下面是我正在执行的脚本 bin bash serverlist tmp servers while IFS read r server netgroup user
  • 命令行参数中的“-”(破折号)有什么魔力?

    例子 创建 ISO 映像并将其直接刻录到 CD mkisofs V Photos r home vivek photos cdrecord v dev dev dvdrw 更改到上一个目录 cd 侦听端口 12345 并解压发送到该端口的数
  • 在 Linux 2.6.21 (glibc 2.3.5) 上进行 ARP 和反向 ARP

    我需要在任意 IP 网络上存储对第三方设备的持久引用 其中设备的 IP 地址可能是静态的或由 DHCP 随机分配 我不控制网络上的设备 也不能依赖 DNS 和其他现有的或与设备一起使用的临时网络协议 所以我被指示使用硬件地址和 ARP 进行
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • Linux:通过网络进行屏幕桌面视频捕获和 VNC 帧速率

    抱歉 文字墙很长 TL DR VNC 连接的帧速率是多少 以帧 秒为单位 或者更确切地说 由谁决定 客户端还是服务器 对于桌面屏幕捕获的任何其他建议 但 正确的时间编码 具有不抖动的帧速率 具有稳定的周期 并有可能将其作为未压缩 或无损 图

随机推荐

  • 如何在使用@Parcelize时对数据类中除构造函数之外的成员变量进行分割

    我正在使用 Room 和 Kotlin 数据类 例如 Entity tableName Person Parcelize class Test ColumnInfo name name var name String Parcelable
  • T(n)=T(n-1)+1/n 的渐近复杂度 [关闭]

    Closed 这个问题是无关 目前不接受答案 有一种算法 其时间复杂度为 T n T n 1 1 n if n gt 1 1 otherwise 我正在求解其渐近复杂性 并得到顺序为 n 但给出的答案是 log n 这是对的吗 如果是log
  • 如何访问Delphi中的基(超)类?

    在 C 中 我可以通过以下方式访问基类base关键字 在java中我可以通过以下方式访问它super关键词 在delphi中如何做到这一点 假设我有以下代码 type TForm3 class TForm private procedure
  • 如何以编程方式检测 iPhone 6 和 6 Plus 查看模式[重复]

    这个问题在这里已经有答案了 有没有办法以编程方式识别视图模式 在设置 gt 显示和亮度中 许多应用程序设计在标准模式和缩放模式下的行为有所不同 请参考图片 任何帮助 将不胜感激 您可以使用 UIScreen mainScreen nativ
  • React 组件未显示在匹配的路由上(react-router-dom)

    大家好 我不知道发生了什么事 我有以下路线
  • 使用 Curl 和 Oauth 2 将文件上传到 DropBox 的 DropBox API PUT 示例

    我正在到处搜索 但无法找到合适的示例 而且我不够精通 无法通过文档对其进行排序 比我更有知识的人可以告诉我如何为 OAUTH 2 形成 CURL 命令吗 我只需要 OAUTH 2 密钥吗 我正在显示一个应用程序密钥 应用程序秘密和 oaut
  • PDO:MySQL 服务器已消失

    我有一个脚本 每晚都要进行大量的跑腿工作 它使用在循环中执行的 PDO 准备语句 前几个运行良好 但后来我发现它们都失败并出现错误 MySQL 服务器已经消失 我们运行 MySQL 5 0 77 PHP 版本 5 2 12 网站的其余部分运
  • 斜边按钮

    我正在尝试构建如下所示的按钮 我可以使用以下方法完成此操作 after and CSS 三角形 但我无法使用可变高度元素 有什么方法可以实现这一点并保持可变高度吗 Fiddle http jsfiddle net AaP47 2 在这种情况
  • contenteditable div 中子元素的键盘事件?

    我有一个 div 其 contenteditable 属性已设置为 true 如何让子级响应键盘事件 似乎唯一的方法是捕获父 div 中的事件并通过选择 api 找出子 div 有没有更好的办法 更具体地说 我可以将键盘事件处理程序附加到子
  • 如何在 python 中加载 C# dll?

    如何在 python 中加载 c dll 我是否必须在 c 文件中添加一些额外的代码 如在 C 文件中导出 我不想使用 IronPython 我想将一个模块导入Python 套餐 NET 的 Python和Python实现铁蟒现在以同样的方
  • 如何使用 Criteria API 指定悲观锁?

    我正在使用 Criteria API 检索 hibernate 中的对象列表 但是 我需要锁定这些对象 因为同时执行的另一个线程将获取确切的对象 并且在没有悲观锁的情况下只有一个线程会成功 我尝试如下 但它不起作用 List esns se
  • 将工作簿中的每个工作表保存为单独的 CSV 文件

    如何将 Excel 工作簿中的每个工作表分开保存CSV带有宏的文件 我有一个包含多个工作表的 Excel 我正在寻找一个宏 可以将每个工作表保存到单独的CSV comma separated file Excel 不允许您将所有工作表保存到
  • ActionBarSherlock 上的activatedBackgroundIndicator 的自定义背景不起作用

    我在用着动作栏夏洛克我正在尝试定制激活背景指示器行背景的属性 如果我使用最新的android sdk 没有动作栏夏洛克 我可以自定义背景 创建以下样式资源 值 style xml并将其定义为AndroidManifest xml as an
  • 数据表重新初始化 (jQuery)

    当我首先加载页面时 表中没有任何内容 并且数据表未初始化 在添加了一些交互行之后 当添加所有行 使用ajax调用 时 我以这种方式初始化数据表 oTable table dataTable bJQueryUI true bSortClass
  • HTML 属性名称中允许使用哪些字符?

    在 HTML 属性中名称 值对 名称 部分允许使用哪些字符 看着一些共同属性似乎只使用字母 a z 和 A Z 但是还允许使用其他什么字符 也许是数字 0 9 连字符 和句点 有没有规格这个 这取决于你所说的 允许 是什么意思 每个标签都有
  • Apache:如何从网络之外的计算机访问我的网页?

    我想从网络外部的计算机访问我的网页 我们的网络有 192 168 0 1 192 168 0 255 这样的 IP 网络通过本地网关 192 168 0 1 连接到 Internet 并到达 DNS 服务器 193 xxx xxx xxx
  • 确定用户是否拒绝了 CoreLocation 权限

    是否可以以编程方式确定用户已拒绝使用其位置的权限 其次 如果用户拒绝了权限 是否可以重新提示用户 您可以使用以下方式确定您的授权状态authorizationStatus类方法上CLLocationManager 这会返回一个CLAutho
  • 从 C# 调用 python 代码(.py 文件)

    我有一些执行特定任务的 python 代码 我需要从 C 调用此代码 而不将 python 文件转换为 exe 因为整个应用程序是基于 C 构建的 我怎样才能做到这一点 如果你的Python代码可以通过执行铁蟒那么这绝对是正确的选择 它提供
  • Django:如何使用存储的模型实例作为表单选择?

    我有一个模型 本质上只是一个字符串 django db models CharField 只会存储该模型的几个实例 我如何使用这些值作为表单中的选择 为了说明这一点 该模型可以是BlogTopic 我想让用户能够选择一个或多个主题来订阅 我
  • Linux 内核导致 UDP 数据包丢失

    我有一个通过多播发送 UDP 数据包的服务器和一些列出这些多播数据包的客户端 每个数据包的大小固定为1040 Bytes 服务器发送的整个数据大小为3GByte 我的环境如下 1 Gbit 以太网 40 个节点 1 个发送方节点和 39 个