linux - 特定于源的多播操作系统/驱动程序性能

标签 linux performance multicast

我有一台运行 Linux 2.6.33 的嵌入式设备发送大量多播数据,这通常是 LAN 上同类设备中的唯一设备。但是,在极少数情况下,同一网络上有两个或多个设备,我需要一种客户端连接方式来区分设备。

编辑:单个客户端只对来自单个设备的流量感兴趣。

  1. 我可以在每个数据报中嵌入一个标识符,但这意味着客户端需要花费宝贵的时间来检查数据包,这可能在驱动程序中更快地实现。慢速客户端肯定会开始丢包。

  2. 我可以为每个设备使用单独的多播 IP 地址,或者只区分每个设备发送到的端口。这已经实现。

  3. 我可以使用特定于源的多播。

我不知道最常见的操作系统和驱动程序实现 SSM 的效率如何,也不知道为每台设备使用不同的多播组是否比依赖 SSM 更快。

因为这完全取决于实现,所以我希望获得有关选项 2 和 3 的现场建议,并且我想知道仅切换多播端口是否足以区分流量。

最佳答案

在我看来,这三个选项之间并没有太大区别。这就是为什么。无论如何,多播流量都会到达客户端主机。现在是发件人区分部分。无论您选择哪种方式,都是比较的问题:

  1. 两个任意大小的标识符(您选择),但最有可能的是 ints
  2. 两个...
    1. IP 地址,在 IPv4 的情况下为 4 个字节,如果您选择使用不同的多播组
    2. 或端口,如果您选择使用不同的端口,则为 2 个字节
  3. 还是两个 IP 地址,但是比较将由内核执行,而不是您的应用程序

最重要的是,在性能方面没有太大区别,因为您将对两种原始数据类型执行一次比较。无论如何,这种比较将在几个处理器指令中实现,因此无论是在内核空间还是用户空间中执行都没有什么大不了的。

我会选择负担较小的编程方法。无论您选择哪种方法,性能都几乎相同。

关于linux - 特定于源的多播操作系统/驱动程序性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995080/

相关文章:

performance - redis哈希性能如何

java - 使用 finalize 方法替代 Timer?

c - 需要适用于 iOS 9 的 IPv6 多播 C 代码

linux - 过滤二层组播报文

linux - 使用 tr/sed/awk 重新格式化特定字符周围的空格

php - 检查命令是否正在多用户 php 进程中运行

linux - ext3 中的日记 - 文档

linux - chmod 为 root 所有,权限为 220

python - 支持大圆距离和多边形的快速 python GIS 库

linux - 用于将多播流量转发到 RedHat 6 上的单个 NIC 的路由配置