我們正在構建一個測試工具,將二進制消息推送到UDP多播上。生成UDP數據包的最快方法
該原型使用Twisted反應器循環來推出消息,這實現了我們所需的流量級別 - 每秒大約120000條消息。
我們在我們的測試機器上有16個內核,顯然我想將這些擴展到這些內核上以真正使線束飛行。
有沒有人有任何關於如何構建應用程序(使用事件循環方法或CSP樣式方法)來提高此輸出的想法。
原型中的大部分時間都花在寫入UDP上 - 因爲我不應該感到驚訝,但是我錯過了什麼?
任何想法歡迎。
我們正在構建一個測試工具,將二進制消息推送到UDP多播上。生成UDP數據包的最快方法
該原型使用Twisted反應器循環來推出消息,這實現了我們所需的流量級別 - 每秒大約120000條消息。
我們在我們的測試機器上有16個內核,顯然我想將這些擴展到這些內核上以真正使線束飛行。
有沒有人有任何關於如何構建應用程序(使用事件循環方法或CSP樣式方法)來提高此輸出的想法。
原型中的大部分時間都花在寫入UDP上 - 因爲我不應該感到驚訝,但是我錯過了什麼?
任何想法歡迎。
多網卡,硬件或內核接口是限制。使用Broadcom公司的NetXtreme BCM5704S千兆位以太網適配器,我只能達到每秒69,000個數據包。嘗試使用四個Intel千兆位服務器適配器以及同一子網上的所有四個NIC。
當在Python應用程序中利用多個核心的問題出現時,顯而易見的答案是使用多個進程。通過Twisted,您可以使用reactor.spawnProcess
來啓動子進程。您也可以用其他方式啓動應用程序的16個實例(如shell腳本)。這就要求您的應用程序可以在多個實例同時運行的情況下進行明智的操作。具體如何分配工作,以便每個流程都可以承擔一部分工作取決於工作的性質。
我希望單個GigE鏈路在你擁有全部16個內核運行完全傾斜之前就已經飽和了。確保你專注於系統的瓶頸。正如Steve-o所說的那樣,您可能還需要在機器中安裝多個NIC。