UDP 数据包的最大理论网络指标是多少?
What are maximum theoretical network metrics for UDP packets?
目标是确定 UDP 协议性能的指标,具体而言:
- 最小可能理论值 RTT(往返时间,ping)
- 1 字节大小的 UDP 数据包的最大可能理论值 PPS
- 64 字节大小的 UDP 数据包的最大可能理论值 PPS
- 最大和最小可能的理论抖动
这可以而且应该在不考虑任何由软件引起的缓慢问题(例如 99% cpu 副进程使用率,编写的测试程序效率低下)或硬件(例如繁忙的通道,极其排长队,等等)
我应该如何估计这些在"real system"上的最佳参数?
PS。我会提供一个原型,我称之为 "a real system"。
考虑 2 台 PC,PC1 和 PC2。他们都配备了:
- 现代快速处理器(阅读 "some average typical socket-1151 i7 CPU"),因此处理速度和单核性不是问题。
- 一些典型的 DDR4 @2400mhz..
- 普通 NIC(阅读典型 Realteks/Intels/Atheroses,通常嵌入在主板中),因此没有非常特殊的复杂电路。
- 几米的以太网 8 对电缆连接其 NIC,已建立 GBIT 连接。所以没有互联网,它们之间没有流量,其他由您生成。
- 没有监视器
- 没有任何其他 I/O 设备
- 每台 PC 的单个 USB 闪存,将其 initramfs 引导到 RAM,并用于在测试程序完成后装载和存储程序输出
- 尽可能轻的软件堆栈 - 可能有忙框,运行在最新的 Linux 内核之上,所有库都是最新的。所以实际上没有软件(阅读"busyware")运行。
而您 运行 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 没有容忍丢包的内在方法。
目标是确定 UDP 协议性能的指标,具体而言:
- 最小可能理论值 RTT(往返时间,ping)
- 1 字节大小的 UDP 数据包的最大可能理论值 PPS
- 64 字节大小的 UDP 数据包的最大可能理论值 PPS
- 最大和最小可能的理论抖动
这可以而且应该在不考虑任何由软件引起的缓慢问题(例如 99% cpu 副进程使用率,编写的测试程序效率低下)或硬件(例如繁忙的通道,极其排长队,等等)
我应该如何估计这些在"real system"上的最佳参数?
PS。我会提供一个原型,我称之为 "a real system"。
考虑 2 台 PC,PC1 和 PC2。他们都配备了:
- 现代快速处理器(阅读 "some average typical socket-1151 i7 CPU"),因此处理速度和单核性不是问题。
- 一些典型的 DDR4 @2400mhz..
- 普通 NIC(阅读典型 Realteks/Intels/Atheroses,通常嵌入在主板中),因此没有非常特殊的复杂电路。
- 几米的以太网 8 对电缆连接其 NIC,已建立 GBIT 连接。所以没有互联网,它们之间没有流量,其他由您生成。
- 没有监视器
- 没有任何其他 I/O 设备
- 每台 PC 的单个 USB 闪存,将其 initramfs 引导到 RAM,并用于在测试程序完成后装载和存储程序输出
- 尽可能轻的软件堆栈 - 可能有忙框,运行在最新的 Linux 内核之上,所有库都是最新的。所以实际上没有软件(阅读"busyware")运行。
而您 运行 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 没有容忍丢包的内在方法。