问个问题, UDP 通信每秒 200 个包压力大不大

2019-06-13 15:04:50 +08:00
 MonoLogueChi

我在两个程序之间使用 UDP 通信,大概每秒会有 200 个数据包发出,每个数据包内容大多在 100 字节以内,这么多的数据包会对程序有很大的压力嘛?

我没学过通信相关的东西,对这方面的东西基本没有什么了解

4675 次点击
所在节点    编程
8 条回复
Lax
2019-06-13 15:31:57 +08:00
100B x 200 /s,加上报头算算带宽才多少
zhs227
2019-06-13 15:32:45 +08:00
基本上处在一个很轻的水平,只要收包的后处理不要太 费时
ruxuan1306
2019-06-13 15:33:25 +08:00
UDP 头、IP 头、MAC 头加起来大概 50B。
发送速率:(100B+50B)*200/1s=30000B/s=30KB/s=240kb/s=0.24Mb/s

只要你的上行带宽高于 0.24Mb/s,我觉得,都没什么问题。
ryd994
2019-06-13 15:51:12 +08:00
200pps 问题不大,单线程都可以轻松应对。超过几千的话可以考虑 port reuse。再高可能就不得不 dpdk 了。

@Lax
@ruxuan1306
对于 100B 的小 UDP 包,瓶颈不在带宽。且不说一般的网络栈,就算 dpdk 也几无可能跑到带宽上限。
建议二位先看篇文章学习一下基础
https://blog.cloudflare.com/how-to-receive-a-million-packets/
MonoLogueChi
2019-06-13 23:54:57 +08:00
@Lax @ruxuan1306 带宽不是问题,都是局域网通信,甚至很多情况都是单机上面的通信,主要是处理能力。
@ryd994 谢谢解答,服务端和客户端都是我自己拿 C#撸出来,主要是怕自己写的东西性能太差,处理不过来。
MonoLogueChi
2019-06-13 23:57:05 +08:00
@zhs227 处理不是很费时,一个 UTF8 编码的字符串,然后反序列化就可以了,我是担心收发包压力过大
ryd994
2019-06-14 00:32:09 +08:00
@MonoLogueChi 涉及到业务的话就没底了
可以多线程,一个线程专门负责收发,也可以直接用 port reuse。
Lax
2019-06-14 10:32:35 +08:00
@ryd994 谢谢指点🙏

@MonoLogueChi 提到带宽是因为从直觉也会知道那么少的包不会有问题。前些年我还在搞网卡的时候测出过单机 1200k pps,现在上限应该更高了。另外楼主大部分是单机通讯在 loopback 设备上,更不会受到实际网卡的限制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/573579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX