我有兩個debian盒通過連接兩個10 GbE卡之間的CX4電纜連接。其中一個將非常快速地生成數據(在4Gbits/s和16Gbits/s之間),另一個需要能夠抓住所有這些數據並將其存儲在RAM中供以後解析。我不熟悉這種低級別編碼,並且樂於接受有關使用何種廣泛方法(我是否需要DMA?RDMA?)或可能適用的提示和技巧的任何想法。謝謝!如何快速讀取通過10GbE NIC傳輸的數據?
回答
如果您希望不斷處理1 GB流量,您需要非常寬的總線和非常快的處理速度,我的經驗來自NIDS。您需要專門的硬件來持續執行NIDS處理100MB(1千兆以太網)數據(10 Gb是另一個Universe)。 Ram不會幫助你,因爲你可以在5-10秒內填寫GB並且1 GB包含很多請求。
如果您嘗試使用10次演出進行任何形式的業務或Web處理,您可能需要將負載分配器放在前面,以保證10GB的流量。我必須說明NIDS在看到流量的計算機上處理的流量是1:1,即在同一臺計算機上處理每個字節的最壞情況;而商業/網絡處理是1:很多:許多機器和許多要處理的字節數量級。
- 編輯 -
現在你已經提到,有(沒有標準的萬兆網卡可以跟得上的10Gb反正)數據傳輸之間的差距,我們需要知道的是什麼內容處理之前我們可以提出建議。
- 編輯2 -
的Berkeley DB(用一個簡單的數據模型數據庫)的行爲就像一個企業數據庫(在成交率而言)當您使用多個線程。如果你想以高速率寫入磁盤,你應該探索這個解決方案。你可能需要一個RAID設置來提高吞吐量 - 在IO吞吐量和保護方面,RAID 0 + 1是最好的。
我聽說過的可用於普通PC的唯一可以用於任何種類後期處理的拉伸飽和10GbE到用戶空間的nics是Napatech生產的 - 您必須使用它們的定製API。
而且你最好把這樣的卡相當長大了服務器的總線管道,以支持這種速度的(我想肯定是從任何種類的NVIDIA芯片組的指導離開這樣的盒子。)
是的,那些東西需要花費一個手臂和一個t * st *** ckle:D – 2010-02-12 20:29:55
那麼,你將需要錢。一種方法可能是購買負載分擔開關,將輸入數據分成兩臺計算機並將其後處理成單個數據庫。
因爲你有一些方面可以簡化這種情況(穩定的點到點之間只有兩臺機器,沒有處理),我實際上會嘗試在系統之間使用單個TCP流的簡單或明顯的方法,並使用write()
磁盤。然後衡量性能和配置文件,以確定哪裏出現瓶頸。
對於起點,閱讀關於C10K(10000個併發連接)問題,這是開發大多數高性能服務器的原因。它應該給你一個高性能服務器問題的強烈背景。當然你不需要擔心select/poll/epoll來建立新的連接,這是一個很大的簡化。
在你計劃任何特殊編程之前,你應該做一些測試,看看你可以用一個香草系統處理多少。在生產者機器上設置一個模擬數據文件和發送進程,並在消費機上創建一個簡單的接受器/解析器,並進行一系列性能分析 - 你會在哪裏遇到數據問題?你可以扔更好的硬件,還是可以調整處理速度?
確保您開始使用可支持您所期望的數據速率的硬件平臺?如果您使用的是英特爾的82598EB網卡,請確保已將其插入PCIe 2.0插槽,最好是插入x16插槽,以獲得從NIC到芯片組的全部帶寬。
有辦法來調整網卡驅動程序的參數,以您的數據流,以獲得最出你的設置中。例如,確保您在鏈接上使用巨型幀,以儘量減少TCP開銷。此外,您可以使用駕駛員的中斷節流率來加速低水平處理。
數據集的處理是否可並行化?如果您有一項任務將數據轉儲到內存中,您是否可以設置多個任務來同時處理數據塊?這將很好地利用多核CPU。
最後,如果沒有這就夠了,使用你收集找到系統,您可以調整獲得更好的性能的部分分析/定時數據。不要假設你知道你需要調整的地方:用真實數據備份 - 你可能會感到驚訝。
我認爲近期Linux內核支持萬兆數據包從nic->內核 但我懷疑有effiecent的方式將數據複製到用戶空間,即使酷睿i7 /至強5500平臺
什麼似乎發揮被遺忘:如果網卡的容量是10GB,並且您擔心接收器,您可以休息(相對)簡單:即使源能夠以這種速度生成數據,但將數據導入10GB產品線時也會遇到同樣的問題,接收器已經從線路進入RAM。
而且如果網卡是10GB這意味着位主頻爲這樣的速度,但沒有提到單個數據包之間的時間,而我們還沒有談論協議呢。
我想這個問題同時對於OP來說已經過時了,但是如果你有這樣一個任務,從一個定期編程的解決方案開始,以便能夠判斷什麼樣的速度增加對於你的特殊情況是必要的(你的情況是總是特殊;-)
- 1. NIC不一致的數據包傳輸,NIC性能測量
- 2. 如何通過USB高速傳輸數據?
- 3. 快速讀取Nexus數據庫表
- 4. 用於快速讀取數據的通用文件容器
- 5. 如何加快MongoDB中的數據讀取速度
- 6. NIC中收到的數據包沒有通過套接字讀取
- 7. 如何使用Wireshark提取通過SOCKS傳輸的HTTP數據?
- 8. 如何快速將大數據傳輸到MySQL(JDBC)?
- 9. 如何通過快速獲取數據來保持與excel的連接
- 10. 如何通過VMware perl sdk獲取羣集數據傳輸?
- 11. 如何添加現有的sqlite數據庫快速和讀取數據
- 12. 快速文件讀取
- 13. 如何快速通過保存在數據庫
- 14. 如何通過網絡快速發送數據?
- 15. 從硬盤快速讀取
- 16. ruby快速讀取std
- 17. jquery快速讀取文件
- 18. RabbitMQ傳輸速度加快?
- 19. 通過SocketChannel高速傳輸期間數據丟失
- 20. 如何通過快速異步塊
- 21. 輸入/通過termimal讀取
- 22. 通過System.in.read讀取輸入()
- 23. 內存泄漏同步讀取通過libUSB傳輸數據的中斷
- 24. 用指數快速讀取文件
- 25. 數據傳輸速率
- 26. android數據傳輸速率
- 27. 在數據庫之間快速傳輸行數
- 28. 快速的方法來讀取特定數據的Java
- 29. 如何通過KVO通知傳輸數據?
- 30. 快速只讀嵌入式「數據庫」?
試圖做一個羣集? – Malfist 2010-02-12 20:14:59
在嘗試進行低級優化之前,我會建議您測試(配置文件)性能。 – mctylr 2010-02-12 21:14:26