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 数据包丢失 的相关文章

  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO

随机推荐

  • 如何在使用@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 个