目录
参考文献
https://networkbuilders.intel.com/docs/open-vswitch-enables-sdn-and-nfv-transformation-paper.pdf
OvS 架构
openvswitch.ko :在内核态负责 “快速路径” 的数据转发。转发靠流表来完成,每一个流表都包含很多的匹配项(match fields)和相应的动作(actions)。
- match fields:定义了能够标识一个数据包的头部字段。
- actions:定义了能够对这个数据包操作的动作,比如:添加或去除 VLAN 标签、修改数据包的某个头部字段,以及控制数据包从端口的进出等等。
ovs-vswitchd:在用户态负责 “慢速路径” 的数据转发。
- ofproto:OpenFlow 交换机实现。
- netdev:和网络设备(包括物理的和虚拟的)交互的抽象接口层。
- dpif:用户空间数据转发路径的实现。
OvS-DPDK 架构
上图中的深色模块就是引入 DPDK 的相关模块。
- ofproto-dpif:实现了 ofproto 模块 API,直接操作 dpif 层。
- dpif-netdev:用户空间中 “快速路径” 的实现,它实现了 dpif 模块 API,可以直接操作 netdev 设备,能够实现数据包在用户空间的快速处理,减少和内核空间的切换开销。
- netdev-dpdk:应用 DPDK 库实现了 netdev 模块 API,提供了多种类型的接口,如下:
- Physical ports(PMD):使用 vfio 或者 igb_uio 实现的端口。
- vHost(dpdkvhostuser and dpdkvhostcuse):使用 librte_vhost 库实现的端口,用户可以基于这两种端口类型创建 vhost-user 和 vhost-cuse 端口来完成用户空间的数据转发,并且能够实现和 VM 的快速通信,只要提供 virtio 后端驱动 vhost 即可,virtio/vhost 被证实是用于 VM 通信的一套快速、安全、标准的接口。
- dpdkr:使用 librte_ring 实现,用户可以基于这种端口类型创建 dpdk-ring 端口来完成用户空间的数据转发,它能够实现和 VM 之间快速的零拷贝通信(使用 IVSHMEM 或者其他进程间通信方式)。
OvS-DPDK 在 VNF 中的应用
- DPDK 在宿主机中提供 OvS 数据平面,同时在 VNF 中加速网元应用。这种方案由于采用纯软件的形式实现,可编程灵活,DPDK 的参与也使得性能大大提高,基本可以媲美纯硬件的形式。
- SR-IOV pNIC 直接将 VF 直通到 VNF 中,然后在 VNF 中使用 DPDK 进行加速。
来源:oschina
链接:https://my.oschina.net/u/4321646/blog/4321637