4. 服务核
DPDK有一个称为服务核的概念,它可以动态地在DPDK逻辑核(lcore)上执行工作。 服务核的支持内置于EAL中,并提供API可选择地允许应用程序控制服务核在运行时的使用方式。
服务核概念是由服务(DPDK的组件,需要CPU周期来运行)和服务核(DPDK 逻辑核,负责运行服务)构建的。服务核概念的强大之处在于服务核和服务之间的映射可以配置为抽象化平台和环境之间的差异。
例如,Eventdev具有硬件和软件PMD。 其中,软件PMD需要lcore来执行调度操作,而硬件PMD则不需要。 对于服务核,应用程序不会直接注意到调度是在软件中完成的。
详细信息请参考服务核API的文档。
4.1. 服务核初始化
在DPDK应用程序中有两种方法可以使用服务核,使用服务核掩码,或者使用API动态添加cores。 两者中较简单的方法是将-s coremask参数传递给EAL,它将使用主DPDK核掩码中的任何cores,如果这些位也在服务核掩码中设置,则这些cores将成为服务核而不是DPDK应用程序cores。
4.2. 在Cores上使能服务
每个已注册的服务可以单独映射到一个服务核,或一组服务核上。在特定core上启用服务意味着lcore将运行该服务。 禁用该core的服务也会阻止lcore运行该服务。
使用此方法,可以将特定工作负载分配给每个服务核,并将N个工作负载映射到M个服务核。 每个服务lcore循环遍历该core上启用的服务,并调用函数来运行该服务。
!注意:lcore可以理解为DPDK中的一个任务线程
4.3. 服务核统计
服务核库能够收集运行时统计信息,例如对特定服务的调用次数以及服务使用的周期数。 循环计数集合是动态可配置的,允许任何应用程序随时分析系统上运行的服务。