本章主要介绍一下nsim node节点的处理逻辑。
先带着几个问题来学习nsim插件:带宽是如何使用的?延迟是怎么实现的?保序是如何处理的?
带宽是如何使用的?nsim配置时,会将带宽转化为每个worker所存储的最大缓存区的存储报文的个数,超过之后就会丢弃。
下面是nsim配置延迟25ms,带宽是10mbps,报文长度1500字节。先计算每s字节长度:0.025 * 10*1000*1000/8 = 32000;每个报文长度时1500字节,32000/1500 = 21个报文。
vpp# show nsim
configuration
delay: 25.0 ms
drop fraction: .50000
reorder fraction: .50000
packet size: 1500
worker wheel size: 21
throughput: 10.0 mbps
output feature arcs to:
GigabitEthernet2/6/0 1
上面是只有一个worker核或者只有main核的结果。如果有多个worker核,则worker wheel size还需要除以worker核的个数。如果有2个worker,只有一条流的话,这个带宽就很不准确了。目前为了避免加锁,worker wheel 使用的缓存区是基于worker的。
延迟是怎么实现的?我们以上一节的流程图来说明一下,是在nsim-output-feature节点中,根据配置参数对报文进行处理,将需要延迟的报文记录需要延迟的时间。等待nsim-wheel input节点,来判断时间到时,从wheel_by_thread【1】线程对应的缓存队列里将报文取出,根据nsim_wheel_entry_t结构中记录的信息将报文送到接口tx节点。
保序处理就比较简单了?就是把需要乱序的报文在nsim-output节点直接发送出去,不需要经过网络模拟器调度。如下图所示我们发现有ping回应报文未进行延迟处理。可能就是reorder导致的。
针对报序功能我也是没有完全理解作者的设计意图。可能就是不需要进行延迟处理吧。
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!