UDP 数据包的最大理论网络指标是多少?

What are maximum theoretical network metrics for UDP packets?

目标是确定 UDP 协议性能的指标,具体而言:

这可以而且应该在不考虑任何由软件引起的缓慢问题(例如 99% cpu 副进程使用率,编写的测试程序效率低下)或硬件(例如繁忙的通道,极其排长队,等等)

我应该如何估计这些在"real system"上的最佳参数?


PS。我会提供一个原型,我称之为 "a real system"。

考虑 2 台 PC,PC1 和 PC2。他们都配备了:

而您 运行 PC1 上的服务器测试程序和 PC2 上的客户端。在程序 运行s 之后,U 盘被挂载,结果被转储到文件,然后系统关机。所以,我描述了一些理想情况。我无法想象更多 "sterile" 条件来进行这样的实验..

对于 PPS 计算,取帧的总大小并将其除以介质的吞吐量。

对于 IPv4:

以太网前导码和帧开始以及帧间间隙 7 + 1 + 12 = 20 字节。(不计入 64 字节最小帧大小)

以太网 II Header 和 FCS(CRC) 14 + 4 = 18 字节。 IP Header 20 个字节。 UDP Header 8 个字节。

总开销 46 字节(如果有效负载小于 ,则填充到最小 64)+ 20 字节 "more on the wire"

有效载荷(数据)

1 字节有效负载 - 基于 64 字节最小值 + 线路开销变为 18。线上总共 84 个字节。

64 字节 - 48 + 64 = 112 + 20 线路开销 = 132 字节。

如果介质的吞吐量为每秒 125000000 字节(1 Gb/s)。

1-18 字节的有效负载 = 1.25e8 / 84 = 最大理论值 1,488,095 PPS。

64 字节有效负载 = 1.25e8 / 132 = 最大理论 946,969 PPS。

这些计算假设流是恒定的:网络发送缓冲区不断被填充。鉴于您的现代硬件描述,这不是问题。如果这是 40/100 Gig 以太网 CPU,总线速度和内存都是影响因素。

Ping RTT 时间:

要计算通过介质传输数据所需的时间,请用传输的数据除以介质的速度。

这更难,因为 ping 数据负载可以是任何大小 64 - MTU(~1500 字节)。 ping 通常使用最小帧大小(64 字节总帧大小 + 20 字节线路开销 * 2 = 168 字节)网络时间(0.001344 毫秒)+ 进程响应和回复时间组合估计在 0.35 到 0.9 毫秒之间。该值取决于太多内部 CPU 和 OS 因素、L1-3 缓存、分支预测、所需的环转换(0 到 3 和 3 到 0)、TCP/IP 堆栈实现、CRC计算、中断处理、网卡驱动程序、DMA、数据验证(被大多数实现跳过)...

根据轶事证据,最大时间应小于 1.25 毫秒。(我的最佳评估是在较旧的硬件上为 0.6 毫秒(我预计硬件上的平均时间一致为 0.7 毫秒或更短))。

抖动: 网络 抖动的唯一固有理论原因是传输的异步性质,这由前导码解决。最大值 <(8 字节)0.000512 毫秒。如果此时没有建立同步,则整个帧都会丢失。这是需要考虑的可能性。由于 UDP 是尽力传递。

正如 RTT 的描述所证明的那样:在执行相同代码的 CPU 时间以及 OS 调度和驱动程序中可能存在差异,因此无法对其进行有效评估。

如果我必须估计,我会设计最大 1 毫秒的抖动,并为丢失的数据包做好准备。设计一个不能容错的系统是不明智的。即使是 "Perfect Scenario" 所描述的故障 也会 发生(附近的雷击会在电线上感应出寄生电压)。 UDP 没有容忍丢包的内在方法。