DPDK与云计算虚拟化,不只是吸引!

SSDFans 2020-03-24 00:00


点击蓝字
关注我们


从DPDK诞生的那一天起,就受到了hyperscale的关注。原因也很简单,因为他们有对于性能的强烈需求,而且有大量的用户态的程序员。从2010年开始出现,6wind可能算是DPDK比较早期的支持者,因为它在北京有一个研发中心[1],可能这也是DPDK在中国发展得很好的一个原因。相对比,另一个同样也是用户态的高性能网络的编程框架OFED就不如它了。




https://mmbiz.qpic.cn/mmbiz_png/P0GiaYeuEL1c6icoY1OIZsa2gRu8xDosubgXZ9rrresWCyIiaN4B4b0e5PjQ8uO9FUNaCYp9OVGp03lEopwxUEeQA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=

本节的主要内容还是基于RedHat的Blog:

https://www.redhat.com/en/blog/how-vhost-user-came-being-virtio-networking-and-dpdk

https://www.redhat.com/en/blog/journey-vhost-users-realm

https://www.redhat.com/en/blog/hands-vhost-user-warm-welcome-dpdk


Data Plane Development Kit


DPDK提供了一种快速包处理方法。“run to completion for package processing", 就是意味着所有资源要在调用数据路径的处理程序之前就绪,这些专用的资源在专用的CPU上执行。一句话,如果你想在stackoverflow上利用"CPU Usage 100%" 来寻求帮助的话,你会失望的。


如下图所示,DPDK的框架中有个PMD (Polling Model Driver)负责把数据从网络网卡的接口搬移到用户态,可以看到这样操作的好处两个:

  1. Bypass Kernel的I/O操作,从而消除了因为处理中断带来的花销。

  2. 不使用kernel的网络协议栈,之前Linux的网络协议栈的效率在高带宽网络的时代比较诟病。


DPDK是由一系列的用户态的库组成,码农们使用用户态的应用程序调用,非常方便。这里面唯一的不便就是原来那些基于Socket编程的教程就不适用了。没关系,互联网云计算为了追求效率,压榨硬件,从头到脚都可以自己搞定。  

  

    

OVS-DPDK

在之前的OVS的定义中,open vswitch转发网络包都是利用kernel的数据路径的。在ovs的kernel模块中由一个简单的流表来处理包转发,如果命中,就直接通过kernel的数据路径发送,但是如果没有命中的包,就需要进行用户态和kernel之间的切换到OVS-deamon处理,找到对应的流表后会把新的规则更新到kernel的module。


显然,使用DPDK的好处就是by kernel,放弃kernel 的数据通路,使用用户态的应用直接和物理网卡通讯。在下图中,DPDK的应用在Host的用户态中,同样DPDK也可以在Guest的用户态。



Vhost-user/Virtio-PMD

在这个架构中,可以在host和guest的用户态都使用DPDK,这样就分成后端和前端。


后端:vhost-user 在host的用户态使用ovs-dpdk的应用。对于每个Guest的VM,都有一个对应的ovs-dpdk对应。

前端:在Guest的VM上运行pmd 驱动以及用户态的DPDK应用。



这样,和之前的kernel态的vhost-net/virtio-net对比,这个架构把数据路径从kernel态完全搬移到了用户态。

通过host 的dpdk应用通过DPDK的大页内存直接访问物理网卡,从而bypass了host的kernel。通过virtio-pmd也一样bypass了Guest上的VM的kernel。这样性能会增加2到4倍,唯一的代价就是至少占有一个物理CPU和一个vCPU的core。


对于Hyperscale来讲,之前的DPDK的导入完全不是问题,因此在Host上的DPDK的后端基本上都可以搞定,问题在于前端,大部分公有云的客户没有能力做前端的开发,他们更喜欢的方式是使用一个virtio-net的驱动,他们使用正常的socket接口来和他们原来一样进行开发。


对于DPDK的导入,还有一个问题就控制路径的实现。我们在deep dive中详细解释。


DPDK的细节


记得自己在刚刚接触PCIE Flash的时候,因为之前的HardDisk的性能和PCIE Flash的差别很大,因此在大部分的应用程序没有准备好之前,你要做各种各样的设置从而优化PCIE Flash的性能。同样,DPDK也需要:

  1.  CPU的亲和:DPDK需要把每个不同线程绑定在特定的CPU上从而得到最佳的并行化。这个也就意味着CPU最好各司其职,不要有应用程序在CPU之间切换。

  2. 大页:DPDK有自己独立的内存管理方法。通过使用2M或者更大的page,他们可以降低cache miss以及TLB的lookup。



  1. 无锁的ring buffer 这个是DPDK的高效的一个核心,通过调用ring library进行队列的处理,可以提供支持burst 进队和出队的操作。

  2. PMD  使用PMD 驱动就避免了中断。

  3. 支持VFIO :很多人把VFIO看作是PCIE 设备passthrough的代名词,其实是错误的。PCIE设备的passthrough在hyperviosr出现不久就可以支持,而基于vt-d技术的VFIO本质上是提供了安全的内存访问保护的高性能接口,当然它的定义不局限于SRIOV。[2]


同时,DPDK也提供了vhost-user的用户态库实现vhost的协议。以及virtio-pmd。


OVS-DPDK

这个已经是DPDK的一个标准模块了,在用户态实现了OVS的fast path,这样OVS的slow path和fast path都是在用户态,成功避免了用户/kernel切换,并利用DPDK的高性能。


Vhost-user with DPDK

vhost原本是一套消息机制来从qemu实现来卸载virtio的数据路径。因此DPDK的vhost-user 库是一套用户态的vhost协议的实现,可以让qume把virtio的数据路径卸载给任意的DPDK应用程序,比如OVS-DPDK。

vhost-user库和vhost-net的主要不同就是通路。vhost-net是使用ioctl来实现的,而vhost-user库是通过socket接口收发特定的消息。


DPDK可以配置成Socket的模式,作为server端让qume作为client端进行连接。通过这种方式,可以解耦和DPDK和VM,DPDK端可以重启,而VM不需要。在Socket通讯上,所有的请求来自Qemu,vhost-user库可以让QEMU定义数据路径的卸载:

  1.  功能的协商 :virtio以及vhost-user的功能协商都是通过支持功能的bitmap机制实现。

  2. 内存空间的配置:Master定义内存map空间,handler可以通过mmap()进行访问。

  3. Vring的配置:Qemu设置virtqueue的数量以及内存空间地址。vhost-user可以支持多队列,因此virtqueue可以有多个。

  4. Kick /Call的文件描述符:通常情况下和之前一样,使用irqfd和iovenetfd。

通过以上的方式,基于DPDK的应用可以通过和Guest共享内存可以进行包的处理,同时通过irqfd和ioeventfd和guest收发notification,而不用Qemu参与。


Virtio-Device-Model with Qemu

  1.  它仿真了一个virtio设备,通过提供个Guest一个PCIE设备可以被probed而且可以提供配置空间信息。它把ioeventfd接口映射到仿真设备的memory-mapper I/O 空间,把irqfd映射到它的Global System Interrupt。这样guest就不用感知notification和irq都被vhost-user 库接管了。

  2. 这个设备不用自己实现virtio的数据路径的功能,而是作为一个master使用vhost-user的协议去卸载virtio数据路径到vhost-user DPDK实现。

  3. 它需要处理控制路径的请求,它需要把请求翻译成vhost-user 的request,作为master发送给slave。


    下图是vhost-user 库和virtio-pci device的总体。


  1.  virtio的内存空间是Guest分配的。

  2. 上图的virtio设备的驱动和virtio设备是按照正常的virtio协议交互,设备提供了基于PCI的BAR的配置接口。

  3. virtio-device-model 使用vhost-user 协议配置vhost-user DPDK模块,并设置irqfd和ioeventfd的文件描述符。

  4. virtio的内存空间是通过mmap的syscall 映射给 host上的vhost-user 库

  5. DPDK应用可以直接通过共享内存读写网络包,并使用irqfd和ioeventfd和Guest进行交互。


Guest的用户态实现

我们之间讲的都是如何从host的kernel卸载数据路径到用户态的DPDK。但是如果Guest的应用也想使用DPDK呢?如果在Guest上实现一个用户态的网络协议,需要:

  1.  VFIO接口,VFIO之前已经讲过,这个是一个用户态的驱动开发框架,它可以实现用户态应用直接访问设备。(bypass kernel)

  2. Virtio-pmd driver 实现virtio协议的Poll Mode Driver

  3. IOMMU Driver:这个iommu驱动管理虚拟的IOMMU,vIOMMU是一个管理DMA设备的I/O地址映射的仿真设备。


VFIO

再次强调一下VFIO,DPDK支持的UIO在虚拟化环境中是usafe的,主要原因是Guest和Host内存访问权限问题。[3]


Iommu 驱动,这个也是虚拟化的问题。我一直推荐这个,这个可能是我看过的最好的来自AMD的文档了。http://pages.cs.wisc.edu/~basu/isca_iommu_tutorial/IOMMU_TUTORIAL_ASPLOS_2016.pdf


vIOMMU and DPDK整合

通过vfio设备驱动可以把vIOMMU和任何的用户态的网络应用进行整合。这个VFIO驱动会进行设备的隔离以及自动添加iova-GPA的映射。


DPDK的大页内存的使用机制使用静态的内存池作为包的缓存以及虚拟队列,因此设备的TLB的同步信息会大大减少,这个和之前讲的网络的TSO和LSO的效果类似。同样,大页内存可以优化TLB的查找,因为可以使用更少的元数据.

vIOMMU和vhost-user的整合

当一个仿真设备在qemu里面的试图通过DMA访问guest virtio的I/O空间的时候,它还是要访问viommu的TLB去查找page映射并进行一个安全的DMA操作。但是如果真正的DMA已经被卸载到使用DPDK的vhost-user 库的外部进程上。

当vhost-user直接访问这段共享内存时,它必须把IOVA翻译成自己的内存。它请求QEMU的vIOMM通过设备的TLB进行翻译。Vhost-user库(和vhost-net kernel驱动)使用PCIE 的地址翻译服务(ATS)请求[4]Qemu,这个通路基于unix socket,在iommu设置的时候已经配置。总体的步骤:

  1.  QEMU 的vIOMMU翻译IOVA到GPGA

  2. Qemu的内存管理翻译GPA到 HVA

  3. Vhost-User翻译QEMO的HVA到它自己的HVA。通常添加QEMU的HVA到mmap的返回地址。


下图是Host DPDK和Guest DPDK的通讯



Full Picture


上图把目前讨论过的OVS-DPDK,IOMMU,VFIO以及vendor PMD和Guset DPDK全部放了进来。


目前下图可能是最复杂的流程图了。有必要再复习一下控制和数据路径的setup过程:


控制路径:


  1.  Host的OVS-DPDK启动的时候会创建一个Socket( server mode)用来和qemu进行virtio相关的通讯。

  2. qemu启动的时候会连接这个socket,如果vhost-user提供了VHOST_USER_PROTOCOL_F_SLAVE_REQ,qemu会创建第二个socket并提供给vhost-user,并建立连接,进行iotlb同步信息传输。

  3. 当QEMU和vhost-user 库的协商结束,有2个socket连接在他们之间。一个是virtio的配置,另一个是iotlb消息交互。

  4. Guest启动,vfio的驱动绑定PCI设备,它建立了对iommu的访问。

  5. 当一个DPDK应用在Guest上启动,它的初始化如下:

    1. 初始化PCI-VFIO设备。vfio驱动映射PCI的配置空间到用户内存。

    2. 分配virtqueue

    3. 使用vfio,发出一个DMA请求,把virtqueue的内存空间通过IOMMU的驱动mapping到vIOMMU设备。

    4. 进行virtio设备功能的协商。这在里,virtqueue使用的地址是IOVA。映射ioeventfd和irqfd。

    5. 最后,DPDK应用分配内存作为网络的缓存。同时添加这段内存空间到vIOMMU。



数据路径:

  1.  Guest上的DPDK应用通过virtio-pmd发送一个网络包。它写入缓存空间,并增加对于的ring描述符。

  2. Host空间的vhost-user PMD pollingvirtqueue,它会立刻检测到新描述符并开始处理。

  3. 对于每个virtqueue的描述符,vhost-user会映射到buffer (IOVA到Vhost-User HVA)。只有在这段buffer的page没有在vhost-user的IOTLB中,才会请求QEMU进行page walk。正常情况下,DPDK都使用静态的大页内存,需要QEMU pagewalk的概率很低。

  4. Vhost-user PMD复制数据到mbufs中(DPDK的message buffer)

  5. 把这个描述符添加到used 的ring上,这时已经在polling的guest的DPDK应用就知道请求已经被处理了。

  6. Host端的DPDK对于mbufs中的数据进行处理。


总结:

DPDK对于OVS的加速对于网络虚拟化的吸引力很大,OVS对于CPU的消耗会随着网络节点的数量增加而指数级增加。

Virtio-net提供了一个高效的安全的Guest和Host的交互通路,这个对于在两边使用DPDK很重要。

Vhost-user library实现了网络处理的DPDK卸载。

在Guest上,需要使用virtio-pmd来创建一个快速的datapath。


总体来讲,通过virtio的virqueue,在host和guest都有DPDK应用使用polling在检测ring的描述符。这样的确实现了数据路径的高性能,但是就是有点苦了CPU。毕竟,云计算是卖CPU的,这个就是AWS在收购了annapurna labs之后并没有使用下图的架构。



[1]https://en.wikipedia.org/wiki/6WIND

[2]https://wiki.qemu.org/Features/VT-d

[3]https://software.intel.com/en-us/articles/memory-in-dpdk-part-2-deep-dive-into-iova

[4]https://composter.com.ua/documents/ats_r1.1_26Jan09.pdf





高端微信群介绍

创业投资群


AI、IOT、芯片创始人、投资人、分析师、券商

闪存群


覆盖5000多位全球华人闪存、存储芯片精英

云计算群


全闪存、软件定义存储SDS、超融合等公有云和私有云讨论

AI芯片群


讨论AI芯片和GPU、FPGA、CPU异构计算

5G群


物联网、5G芯片讨论

第三代半导体群

氮化镓、碳化硅等化合物半导体讨论

储芯片群

DRAM、NAND、3D XPoint等各类存储介质和主控讨论

汽车电子群

MCU、电源、传感器等汽车电子讨论

光电器件群

光通信、激光器、ToF、AR、VCSEL等光电器件讨论

渠道群

存储和芯片产品报价、行情、渠道、供应链




< 长按识别二维码添加好友 >

加入上述群聊




长按并关注

带你走进万物存储、万物智能、

万物互联信息革命新时代

微信号:SSDFans
SSDFans AI+IOT+闪存,万物存储、万物智能、万物互联的闪存2.0时代即将到来,你,准备好了吗?
评论 (0)
  • 一、行业背景与需求智能门锁作为智能家居的核心入口,正从单一安防工具向多场景交互终端演进。随着消费者对便捷性、安全性需求的提升,行业竞争已从基础功能转向成本优化与智能化整合。传统门锁后板方案依赖多颗独立芯片(如MCU、电机驱动、通信模块、语音模块等),导致硬件复杂、功耗高、开发周期长,且成本压力显著。如何通过高集成度方案降低成本、提升功能扩展性,成为厂商破局关键。WTVXXX-32N语音芯片通过“单芯片多任务”设计,将语音播报、电机驱动、通信协议解析、传感器检测等功能整合于一体,为智能门锁后板提供
    广州唯创电子 2025-04-18 09:04 125浏览
  • 置信区间反映的是“样本均值”这个统计量的不确定性,因此使用的是标准误(standard error),而不是直接用样本标准差(standard deviation)。标准误体现的是均值的波动程度,而样本标准差体现的是个体数据的波动程度,两者并非一回事,就如下图所显示的一样。下面优思学院会一步一步解释清楚:一、标准差和标准误,究竟差在哪?很多同学对“标准差”和“标准误”这两个概念傻傻分不清楚,但其实差别明显:标准差(Standard Deviation,σ或s):是衡量单个数据点相对于平均值波动的
    优思学院 2025-04-17 13:59 25浏览
  •   无人机蜂群电磁作战仿真系统全解析   一、系统概述   无人机蜂群电磁作战仿真系统是专业的仿真平台,用于模拟无人机蜂群在复杂电磁环境中的作战行为与性能。它构建虚拟电磁环境,模拟无人机蜂群执行任务时可能遇到的电磁干扰与攻击,评估作战效能和抗干扰能力,为其设计、优化及实战应用提供科学依据。   应用案例   目前,已有多个无人机蜂群电磁作战仿真系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机蜂群电磁作战仿真系统。这些成功案例为无人机蜂群电磁作战仿真系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-17 16:29 74浏览
  • 【摘要/前言】4月春日花正好,Electronica就在浪漫春日里,盛大启幕。2025年4月15-17日,慕尼黑上海电子展于上海新国际博览中心成功举办。伴随着AI、新能源汽车、半导体的热潮,今年的Electronica盛况空前。请跟随Samtec的视角,感受精彩时刻!【 Samtec展台:老虎的朋友圈技术派对】借天时、占地利、聚人和,Samtec 展台人气爆棚!每年展会与大家相聚,总能收获温暖与动力~Samtec展台位于W3展馆716展位,新老朋友相聚于此,俨然一场线下技术派对!前沿D
    电子资讯报 2025-04-17 11:38 42浏览
  •   无人机电磁兼容模拟训练系统软件:全方位剖析   一、系统概述   北京华盛恒辉无人机电磁兼容模拟训练系统软件,专为满足无人机于复杂电磁环境下的运行需求而打造,是一款专业训练工具。其核心功能是模拟无人机在电磁干扰(EMI)与电磁敏感度(EMS)环境里的运行状况,助力用户评估无人机电磁兼容性能,增强其在复杂电磁场景中的适应水平。   应用案例   目前,已有多个无人机电磁兼容模拟训练系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机电磁兼容模拟训练系统。这些成功案例为
    华盛恒辉l58ll334744 2025-04-17 14:52 34浏览
  • 近日,全球6G技术与产业生态大会(简称“全球6G技术大会”)在南京召开。紫光展锐应邀出席“空天地一体化与数字低空”平行论坛,并从6G通信、感知、定位等多方面分享了紫光展锐在6G前沿科技领域的创新理念及在空天地一体化技术方面的研发探索情况。全球6G技术大会是6G领域覆盖广泛、内容全面的国际会议。今年大会以“共筑创新 同享未来”为主题,聚焦6G愿景与关键技术、安全可信、绿色可持续发展等前沿主题,汇聚国内外24家企业、百余名国际知名高校与科研代表共同商讨如何推动全行业6G标准共识形成。6G迈入关键期,
    紫光展锐 2025-04-17 18:55 135浏览
  • 1. 在Ubuntu官网下载Ubuntu server  20.04版本https://releases.ubuntu.com/20.04.6/2. 在vmware下安装Ubuntu3. 改Ubuntu静态IP$ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by 'subiquity'network:  renderer: networkd&nbs
    二月半 2025-04-17 16:27 68浏览
  • 自动驾驶技术的飞速发展,正在重新定义未来出行的边界。从感知到决策,从规划到控制,每一个环节都离不开海量、精准的高质量数据支撑。然而,随着传感器数量的增加和数据规模的指数级增长,行业正面临一系列挑战:多源传感器数据的时间同步难题、复杂数据格式的适配、测量技术的灵活性不足、设备集成周期冗长等,这些问题正成为自动驾驶研发与测试的“隐形瓶颈”。基于技术积累与行业洞察,本文分享一套创新的ADAS时空融合数据采集方案。通过硬件与软件的深度协同优化,能够很好地解决数据采集中的核心痛点,还为自动驾驶研发提供了高
    康谋 2025-04-17 09:54 51浏览
  • 一、汽车智能化浪潮下的蓝牙技术革新随着智能网联汽车的快速发展,车载信息娱乐系统(IVI)正从单一的驾驶辅助向“第三生活空间”转型。蓝牙技术作为车内无线连接的核心载体,承担着音频传输、设备互联、数据交互等关键任务。然而,传统方案中MCU需集成蓝牙协议栈,开发周期长、成本高,且功能扩展性受限。WT2605C蓝牙语音芯片应势而生,以双模蓝牙SOC架构重新定义车用蓝牙系统的开发模式,通过“多、快、好、省”四大核心价值,助力车企快速打造高性价比的智能座舱交互方案。二、WT2605C芯片的四大核心优势1.
    广州唯创电子 2025-04-17 08:38 29浏览
  •   无人机蜂群电磁作战仿真系统软件,是专门用于模拟、验证无人机蜂群在电磁作战环境中协同、干扰、通信以及对抗等能力的工具。下面从功能需求、技术架构、典型功能模块、发展趋势及应用场景等方面展开介绍:   应用案例   目前,已有多个无人机蜂群电磁作战仿真系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机蜂群电磁作战仿真系统。这些成功案例为无人机蜂群电磁作战仿真系统的推广和应用提供了有力支持。   功能需求   电磁环境建模:模拟构建复杂多样的电磁环境,涵盖各类电磁干扰源与
    华盛恒辉l58ll334744 2025-04-17 16:49 70浏览
  • 现阶段,Zigbee、Z-Wave、Thread、Wi-Fi与蓝牙等多种通信协议在智能家居行业中已得到广泛应用,但协议间互不兼容的通信问题仍在凸显。由于各协议自成体系、彼此割据,智能家居市场被迫催生出大量桥接器、集线器及兼容性软件以在不同生态的设备间构建通信桥梁,而这种现象不仅增加了智能家居厂商的研发成本与时间投入,还严重削减了终端用户的使用体验。为应对智能家居的生态割裂现象,家居厂商需为不同通信协议重复开发适配方案,而消费者则需面对设备入网流程繁琐、跨品牌功能阉割及兼容隐患等现实困境。在此背景
    华普微HOPERF 2025-04-17 17:53 52浏览
  •   无人机电磁环境效应仿真系统:深度剖析   一、系统概述   无人机电磁环境效应仿真系统,专为无人机在复杂电磁环境下的性能评估及抗干扰能力训练打造。借助高精度仿真技术,它模拟无人机在各类电磁干扰场景中的运行状态,为研发、测试与训练工作提供有力支撑。   应用案例   目前,已有多个无人机电磁环境效应仿真系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机电磁环境效应仿真系统。这些成功案例为无人机电磁环境效应仿真系统的推广和应用提供了有力支持。   二、系统功能  
    华盛恒辉l58ll334744 2025-04-17 15:51 72浏览
  • 一、行业背景与需求随着智能化技术的快速发展和用户对便捷性需求的提升,电动车行业正经历从传统机械控制向智能交互的转型。传统电动车依赖物理钥匙、遥控器和独立防盗装置,存在操作繁琐、功能单一、交互性差等问题。用户期待通过手机等智能终端实现远程控制、实时数据监控及个性化交互体验。为此,将蓝牙语音芯片集成至电动车中控系统,成为推动智能化升级的关键技术路径。二、方案概述本方案通过在电动车中控系统中集成WT2605C蓝牙语音芯片,构建一套低成本、高兼容性的智能交互平台,实现以下核心功能:手机互联控制:支持蓝牙
    广州唯创电子 2025-04-18 08:33 116浏览
  • 一、行业背景与产品需求随着社会对清洁效率与用户体验要求的提升,洗地机行业迎来快速发展期。面对激烈的市场竞争,产品差异化成为制胜关键。传统洗地机普遍存在两大痛点:操作交互单一化与成本控制困境。尤其对于老年用户群体,缺乏语音状态提示和警示功能,导致操作门槛升高;而硬件方案中MCU与语音功能的耦合设计,则增加了系统复杂度与开发成本。WT588F/WTV/WT2003系列语音芯片的引入,为洗地机行业提供了低成本、高集成、强扩展性的解决方案,既满足用户友好性需求,又助力厂商实现硬件架构优化。二、方案核心亮
    广州唯创电子 2025-04-17 08:22 32浏览
  •   北京华盛恒辉无人机电磁兼容模拟训练系统软件是专门用于模拟与分析无人机在复杂电磁环境中电磁兼容性(EMC)表现的软件工具。借助仿真技术,它能帮助用户评估无人机在电磁干扰下的性能,优化电磁兼容设计,保障无人机在复杂电磁环境中稳定运行。   应用案例   目前,已有多个无人机电磁兼容模拟训练系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机电磁兼容模拟训练系统。这些成功案例为无人机电磁兼容模拟训练系统的推广和应用提供了有力支持。   系统功能   电磁环境建模:支持三维
    华盛恒辉l58ll334744 2025-04-17 15:10 55浏览
我要评论
0
2
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦