C语言 为DPDK应用程序动态分配和释放内核

qxsslcnc  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(195)

我有一个dpdk应用程序正在运行,我有一个HandlePackets()单核函数,可以在单核中运行,每秒处理多达10000个数据包。现在假设我只是通过这个“./my_dpdk_app -l 5”启动dpdk应用程序,因此主线程将绑定到核心5,现在根据我想要分配新核的传入分组的数量,运行HandlePacket()函数并转发流量。当流量变低时,我还想释放不必要地运行HandlePackets的核心()函数,以便非dpdk进程可以使用它(据我所知,如果dpdk保留一个核心,甚至使用不到100%,则没有其他非dpdk进程可以使用它,如果我错了请纠正我..!)。
这种动态分配和释放核心到dpdk甚至可能吗?如果是这样,那么如何或是否有更好的方法来做到这一点?

yqlxgs2m

yqlxgs2m1#

我想我找到了答案。如果我为DPDK使用多进程客户端-服务器模型,其中DPDK应用程序分为2种类型的进程:
1.初级过程
1.次级过程
并且每个进程单独运行和分配核心。
在这里,主进程(服务器)初始化所有内存池、端口、缓冲区、rte_ring以及任何需要的东西,然后开始从NIC轮询。
并且,辅助进程实际上在发现后从RTE_RINGs轮询并进行处理。我还可以通过IPC(进程间通信)通道将统计信息传递给服务器进程,从而在客户端也节省了打印线程。
现在,正如我在运行时已经知道的(按每秒的数据包计数)我是否实际需要无论是否(和路由到)RTE_RINGs,我都不能启动辅助进程或在需要时启动它们(负载增加),然后在负载减少时停止它们,从而在可能的情况下节省CPU使用。也许我也要写一个bash程序,它的工作只是根据每秒传入的数据包在必要时运行和停止客户端进程。我实际上修改并运行了一个带有client_server模型的DPDK应用程序,但我没有意识到它可以这样帮助我。
纠正我,如果我错了,因为我是非常新的DPDK和仍在学习。

相关问题