+
什么是Rx flexible descriptor
Intel E810系列网卡支持Rx flexible descriptor,这是一种可以通过软件定义格式并配置到网卡硬件中的Rx descriptor(接收描述符)。Flexible descriptor中的metadata和flags字段可以根据需求和应用场景,自定义为特定的内容。
Rx flexible descriptor的作用
一般Rx descriptor的作用在于网卡接收和解析数据包后,向驱动软件传达数据包的状态,并携带必要信息。由于硬件限制,传统的descriptor的格式是固定的,在任何应用场景下,面对不同的协议,其内容都是一致的。这会导致数据处理过程死板,且需要额外的CPU运算资源来将这些原始数据处理成软件需要的数据。Flexible descriptor则是在此基础上,让用户可以自定义descriptor所携带的内容。经过配置后的网卡硬件可以按照flexible descriptor的特殊格式,解析数据包并将指定内容直接填入descriptor的相应字段中。这一步简化了后续的软件处理过程,从而大大提高了处理速度,也使得功能更加丰富。
如何定义Rx flexible descriptor
通过使用E810网卡所支持的DDP(Dynamic Device Personalization)package文件,网卡可以在启动时加载DDP中已配置的flexible descriptor格式,并通过RXDID选择对应的flexible descriptor来使用。而根据DDP类型的不同(OS default,COMMS和Custom等),能选择使用的flexible descriptor格式也不同。所以用户在使用时需要特别注意DDP package的类型和版本,以及DPDK的版本。
E810网卡对flexible descriptor的支持
E810系列网卡提供了63个Descriptor Builder Profile,可以用来配置63种Rx descriptor格式,包括传统的16字节和32字节的两种legacy descriptor。这些profile都有对应的RXDID,网卡硬件通过由软件写入到相应寄存器中的RXDID值来决定要使用的Rx descriptor格式,软件也可根据收到的Rx descriptor中的RXDID字段验证当下所使用的Rx descriptor格式。
Rx flexible descriptor的通用格式
其中,用户可以灵活配置的字段为
1. metadata (FlexiMD.0 ~ FlexiMD.5)
2. flags (FlexiFlags.0