我们正在构建一个测试工具,以便在UDP多播上推送二进制消息。
原型正在使用Twisted反应器循环来推送消息,这实现了我们所需的流量 - 大约每秒120000条消息。
我们的测试机器上有16个核心,显然我想将这个核心传播到这些核心上,以便真正使线束飞行。
有没有人对我们如何构建应用程序(使用事件循环方法或CSP样式方法)来提升此输出有任何想法。
原型中的大部分时间都花在写入UDP上 - 作为IO我不应该感到惊讶,但是我错过了什么?
欢迎任何想法。
答案 0 :(得分:1)
多个NIC,硬件或内核接口是限制。使用Broadcom Corporation NetXtreme BCM5704S千兆以太网适配器,我每秒只能达到69,000个数据包。尝试使用同一子网上所有四个NIC的四核英特尔千兆服务器适配器。
答案 1 :(得分:1)
当在Python应用程序中利用多个核心的问题出现时,显而易见的答案是使用多个进程。使用Twisted,您可以使用reactor.spawnProcess
启动子进程。您也可以通过其他方式启动应用程序的16个实例(如shell脚本)。当然,这要求您的应用程序可以在一次运行多个实例的情况下合理运行。究竟如何划分工作,以便每个流程可以承担一些工作取决于工作的性质。
我希望在你让所有16个内核完全倾斜之前,单个GigE链路已经饱和。确保您专注于系统中的瓶颈。正如Steve-o所说,您可能还需要机器中的多个NIC。