1.VPP模式
VPP有两种不同的工作模式:
单线程
多线程
2.单线程
在单线程模式中,主线程同时进行数据包处理和其他管理功能命令行接口(CLI)、API、stats)。这是默认设置,不需要特殊再去配置。
3.多线程
在多线程模式下,主线程处理管理功能(调试CLI、API、stats采集)。一个或多个工作线程处理数据包的从输入到输出。
3.1多线程配置
手动配置
主线程配置在核1,工作线程配置在2,3,4,5,6
cpu {
main-core 1
corelist-workers 2-6
}
自动配置
主线程配置在核1,工作线程配置在2,3,4,5,6,7
cpu {
skip-cores 1
workers 6
}
4.缓冲内存分配
VPP平台是支持NUMA的。它可以为不同CPU套接字(NUMA节点)上的缓冲区分配内存。在启动配置中,通过使用socket-mem语句,可以为每个CPU套接字定义分配的内存数量,这部分配置在dpdk中。
dpdk {
socket-mem 1024,1024
}
上面的配置在NUMA0上分配1GB内存,在NUMA1上分配1GB内存。每个工作线程使用自己本地的缓冲区。缓冲内存是从hugepages分配的。如果可用的话,VPP更推荐1G页面。如果不是,将使用2MB的页面。VPP会自动安装/卸载hugepages文件系统,因此不需要手动执行。只有在需要更大数量的mbufs时才需要socket-mem
注意:如果你正在运行最新的VPP版本,则不需要手动指定socket-mem。VPP将发现所有NUMA节点,默认情况下为每个节点分配512M。只有在需要更大数量的mbufs时才需要socket-mem。
参考资料:https://wiki.fd.io/view/VPP/Using_VPP_In_A_Multi-thread_Model