目标是确定UDP协议性能的指标,具体来说:
这可以并且应该在不考虑任何缓慢的软件引起的问题(例如99%的并行进程使用CPU,编写效率低下的测试程序)或硬件(例如繁忙的通道,超长的线路等)的情况下完成
在“真实系统”上应该如何估算这些最佳参数?
PS。我将提供所谓的“真实系统”的原型。
考虑2台PC,PC1和PC2。它们都配备:
然后您在PC1上运行服务器测试程序,并在PC2上运行客户端。程序运行后,将安装USB记忆棒并将结果转储到文件中,然后关闭系统电源。因此,我描述了一些理想的情况。我无法想象这样的实验有更多的“无菌”条件。
答案 0 :(得分:2)
对于PPS计算,请计算帧的总大小并将其划分为介质的吞吐量。
对于IPv4 :
以太网前同步码和帧的开始以及帧间间隙7 +1 + 12 = 20字节(不计入64字节的最小帧大小)
以太网II标头和FCS(CRC)14 + 4 = 18字节。 IP标头20个字节。 UDP标头为8个字节。
总开销为46个字节(如果有效载荷小于,则填充为至少64个字节)+ 20个字节“在线上更多”
有效载荷(数据)
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 =最大理论946969 PPS。
这些计算假定流是恒定的:网络发送缓冲区不断填充。考虑到您对现代硬件的描述,这不是问题。如果这是40/100 Gig以太网CPU,那么总线速度和内存都是因素。
Ping RTT时间:
要计算通过介质传输数据所需的时间,请用传输速度除以介质速度。
这比较困难,因为ping数据有效载荷可以是任何大小的64-MTU(〜1500字节)。 ping通常使用最小帧大小(64字节总帧大小+ 20字节线路开销* 2 = 168字节)网络时间(0.001344 ms)+处理响应和回复时间的总和估计在0.35到0.9 ms之间。该值取决于太多的内部CPU和OS因素,L1-3缓存,分支预测,所需的环形过渡(0到3和3到0),实现的TCP / IP堆栈,CRC计算,已处理的中断,网卡驱动程序,DMA ,数据验证(大多数实现都跳过)...
根据轶事证据,最大时间应<1.25毫秒。(我的最佳评估是在较旧的硬件上为0.6毫秒(我期望所描述的硬件上的平均平均值为0.7毫秒或更短)。
抖动: network 抖动的唯一内在理论原因是传输的异步特性,该特性由前导码解决。最大<(8字节)0.000512毫秒如果此时未建立同步,则整个帧将丢失。这是需要考虑的可能性。由于UDP是尽力而为的传递方式。
如RTT的描述所证明:在执行相同代码以及操作系统调度和驱动程序时,CPU时间可能存在差异,因此无法进行有效评估。
如果我必须估计的话,我将设计最大1 ms的抖动,并规定丢失的数据包。设计不容错的系统是不明智的。即使对于所描述的“完美方案”,也会发生故障 (附近的雷击会在电线上感应出虚假电压)。 UDP没有固有的方法来容忍丢失的数据包。