dpdk-19.11 中 simd 指令使用现状分析

不同 simd 指令的识别

__m128i sse

uint64x2_t neon

__m256i avx2

__m512i avx512

vector altivec

1. dpdk 向量收发包函数对 simd 指令的使用

支持 arm neno 向量收发包函数的 pmd 驱动

  • bnxt
  • hns3
  • i40e
  • ixgbe
  • mlx5
  • virtio

支持 sse 向量收发包函数的 pmd 驱动

  • axgbe
  • hinic
  • fm10k
  • bnxt
  • i40e
  • iavf
  • ice
  • ixgbe
  • mlx5
  • virtio

支持 avx2 向量收发包函数的 pmd 驱动

  • bnxt
  • enic
  • i40e
  • iavf
  • ice
  • idxd dma 引擎

支持 avx512 向量收发包函数的 pmd 驱动

  • i40e
  • iavf
  • ice
  • virtio

支持 ppc 架构 altivec 向量收发包函数的 pmd 驱动

  • i40e
  • virtio
  • mlx5

其它使用场景

  • drivers/common/sfc_efx
  • drivers/event/dlb2/
  • drivers/raw/ioat/
  • drivers/event/cnxk

dpdk lib 中对 simd 的使用场景

distributor 库

distributor 库提供流量动态负载平衡功能,在这种场景下有一个分发器 lcore,负责负载平衡或分发数据包,以及一组 worker lcore,负责从分发器接收数据包和对它们进行操作。

此库中使用 sse 向量指令优化了匹配 flow 的过程。

memcpy 函数优化

使用 sse、avx512 指令优化 memcpy 函数,封装为 rte_memcpy 函数

计算 crc 值

sse、neon、avx512 三种向量指令的不同 crc 计算方式

LPM

DPDK LPM 库组件为 32 位密钥实现最长前缀匹配 (LPM) 表搜索方法,该方法通常用于在 IP 转发应用程序中查找最佳路由匹配

提供使用 sse、neon 指令实现的 rte_lpm_lookupx4 接口实现最长前缀匹配表搜索。

dpdk ACL 库中 ACL 规则检索优化

  • RTE_ACL_CLASSIFY_SSE

    :向量实现,最多可以并行处理 8 个流。需要 SSE 4.1 支持。要求最大 SIMD 位宽至少为 128。

  • RTE_ACL_CLASSIFY_AVX2

    :向量实现,最多可以并行处理16个流。需要 AVX2 支持。要求最大 SIMD 位宽至少为 256。

  • RTE_ACL_CLASSIFY_NEON

    :向量实现,最多可以并行处理8个流。需要 NEON 支持。要求最大 SIMD 位宽至少为 128。

  • RTE_ACL_CLASSIFY_ALTIVEC

    :向量实现,最多可以并行处理8个流。需要 ALTIVEC 支持。要求最大 SIMD 位宽至少为 128。

  • RTE_ACL_CLASSIFY_AVX512X16

    :向量实现,最多可以并行处理16个流。使用 256 位宽的 SIMD 寄存器。需要 AVX512 支持。要求最大 SIMD 位宽至少为 256。

  • RTE_ACL_CLASSIFY_AVX512X32

    :向量实现,最多可以并行处理32个流。使用 512 位宽的 SIMD 寄存器。需要 AVX512 支持。要求最大 SIMD 位宽至少为 512。

FIB

FIB 库为 32 位密钥或 128 位 IPv6 提供了快速的最长前缀匹配 (LPM) 搜索。它可以用于多种应用,其中最典型的是IPv4/IPv6转发。

FIB 库中使用 avx512 向量指令优化查表过程。

dpdk node 库中 ip4_lookup_node_process 接口的向量实现

ip4_lookup_node_process_vec 函数支持 x86 sse 与 arm neon 向量指令优化。

其它的查表相关使用场景

lib/efd/rte_efd_x86.h
lib/hash/rte_cmp_x86.h
lib/hash/rte_cuckoo_hash.c
lib/hash/rte_thash.h
lib/hash/rte_thash_x86_gfni.h
lib/member/rte_member_x86.h
lib/sched/rte_sched.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值