【问题标题】:How to migrate existing udp application to raw sockets如何将现有的 udp 应用程序迁移到原始套接字
【发布时间】:2010-05-31 17:21:06
【问题描述】:

是否有从普通 udp 套接字(使用 linux、C99/C++、recv 系统调用)迁移到原始套接字的教程?

根据http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html 原始套接字比 udp 快得多。

应用程序是客户端-服务器。客户端是专有的,必须使用与 udp 服务器完全相同的协议。但是使用原始套接字服务器可以更快一些。我必须在服务器中实现 udp 的哪些部分?是否有“快速迁移”库?

【问题讨论】:

  • 另外,udp 工作的哪一部分将从 rawsockets 中受益——发送还是接收?
  • 速度性能来自于丢弃 IP 层,即路由、过滤、端口管理等。一个很好的研究方向是 RDMAoE,即以太网上的 RDMA,与 Mellanox 交谈。跨度>
  • Steve-o,它是软件 (RDMAoE) 还是硬件?是否要求两台机器在同一个子网中(它们之间只有交换机)?

标签: sockets network-programming udp raw-sockets


【解决方案1】:

原始套接字允许您与较低级别的协议进行通信,例如以太网、IP 等。是的,降低可以给您带来一些优势,但是您必须平衡它与您失去的东西。

在这种情况下,您提到服务器被编写为使用 Udp 协议,因此在线路上,通信必须是 Udp。现在,如果您要使用原始套接字,则必须确保发送封装在 Udp 数据包中的应用程序数据。您还需要编写代码以确保您遵守 Udp 协议和状态机,以便对服务器而言,您的客户端只是另一个 Udp 客户端。完成所有这些需要编写大量代码,并且存在一些缺点,例如增加维护、增加使其正常工作的成本等。

我没有完全阅读您上面链接的论文,但要问自己的问题是,您能否获得该研究论文中给出的收益并将其复制到您的场景中?

在我看来,您应该首先尝试弄清楚您的客户端为何如此缓慢。你有什么要求?你有什么衡量好的、快速的客户的标准吗?如果我是你,我会首先衡量当前的实现,牢记一些对场景有用的指标,例如传输的字节/秒等。然后我会分析客户端,看看它在哪里花费了太多时间,并尝试看看我是否可以减少开销并使其更快。

总而言之,先在堆栈顶部(即在您的应用程序中)寻找节省,然后再进入堆栈。如果你的应用写得不好,那么无论你写得有多低,你都不会看到预期的性能提升。

【讨论】:

  • 我的应用程序现在是基准代码,它正在执行 recvfrom/sendto。所以在客户端/服务器中没有什么可以ontimize。操作系统 udp/ip 堆栈限制速率。是的,这是乒乓球测试和实际应用程序的工作方式相同。客户端和服务器都可以在原始套接字中重写。
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 2017-10-28
  • 2020-12-24
  • 2016-08-01
  • 1970-01-01
  • 2021-11-12
  • 2017-10-20
  • 2019-02-19
相关资源
最近更新 更多