2010-02-12 175 views
4

我有兩個debian盒通過連接兩個10 GbE卡之間的CX4電纜連接。其中一個將非常快速地生成數據(在4Gbits/s和16Gbits/s之間),另一個需要能夠抓住所有這些數據並將其存儲在RAM中供以後解析。我不熟悉這種低級別編碼,並且樂於接受有關使用何種廣泛方法(我是否需要DMA?RDMA?)或可能適用的提示和技巧的任何想法。謝謝!如何快速讀取通過10GbE NIC傳輸的數據?

+0

試圖做一個羣集? – Malfist 2010-02-12 20:14:59

+0

在嘗試進行低級優化之前,我會建議您測試(配置文件)性能。 – mctylr 2010-02-12 21:14:26

回答

2

如果您希望不斷處理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是最好的。

+0

我應該更清楚一點。數據只會以這樣的速度進入5-10秒,所以在我擁有一堆RAM的情況下,捕獲它並且花費我的時間在事後進行後處理應該不是問題 - - 至少,這就是我所希望的。 – mindloss 2010-02-12 20:31:55

+0

下架nics將無法處理該速率下的數據短連發。 – nos 2010-02-12 20:35:13

+0

即使對於我提到的1Gb/ps的情況,我也很樂觀= D – 2010-02-12 20:39:15

4

我聽說過的可用於普通PC的唯一可以用於任何種類後期處理的拉伸飽和10GbE到用戶空間的nics是Napatech生產的 - 您必須使用它們的定製API。

而且你最好把這樣的卡相當長大了服務器的總線管道,以支持這種速度的(我想肯定是從任何種類的NVIDIA芯片組的指導離開這樣的盒子。)

+0

是的,那些東西需要花費一個手臂和一個t * st *** ckle:D – 2010-02-12 20:29:55

1

那麼,你將需要錢。一種方法可能是購買負載分擔開關,將輸入數據分成兩臺計算機並將其後處理成單個數據庫。

1

因爲你有一些方面可以簡化這種情況(穩定的點到點之間只有兩臺機器,沒有處理),我實際上會嘗試在系統之間使用單個TCP流的簡單或明顯的方法,並使用write()磁盤。然後衡量性能和配置文件,以確定哪裏出現瓶頸。

對於起點,閱讀關於C10K(10000個併發連接)問題,這是開發大多數高性能服務器的原因。它應該給你一個高性能服務器問題的強烈背景。當然你不需要擔心select/poll/epoll來建立新的連接,這是一個很大的簡化。

2

在你計劃任何特殊編程之前,你應該做一些測試,看看你可以用一個香草系統處理多少。在生產者機器上設置一個模擬數據文件和發送進程,並在消費機上創建一個簡單的接受器/解析器,並進行一系列性能分析 - 你會在哪裏遇到數據問題?你可以扔更好的硬件,還是可以調整處理速度?

確保您開始使用可支持您所期望的數據速率的硬件平臺?如果您使用的是英特爾的82598EB網卡,請確保已將其插入PCIe 2.0插槽,最好是插入x16插槽,以獲得從NIC到芯片組的全部帶寬。

有辦法來調整網卡驅動程序的參數,以您的數據流,以獲得最出你的設置中。例如,確保您在鏈接上使用巨型幀,以儘量減少TCP開銷。此外,您可以使用駕駛員的中斷節流率來加速低水平處理。

數據集的處理是否可並行化?如果您有一項任務將數據轉儲到內存中,您是否可以設置多個任務來同時處理數據塊?這將很好地利用多核CPU。

最後,如果沒有這就夠了,使用你收集找到系統,您可以調整獲得更好的性能的部分分析/定時數據。不要假設你知道你需要調整的地方:用真實數據備份 - 你可能會感到驚訝。

0

我認爲近期Linux內核支持萬兆數據包從nic->內核 但我懷疑有effiecent的方式將數據複製到用戶空間,即使酷睿i7 /至強5500平臺

0

什麼似乎發揮被遺忘:如果網卡的容量是10GB,並且您擔心接收器,您可以休息(相對)簡單:即使源能夠以這種速度生成數據,但將數據導入10GB產品線時也會遇到同樣的問題,接收器已經從線路進入RAM。

而且如果網卡是10GB這意味着位主頻爲這樣的速度,但沒有提到單個數據包之間的時間,而我們還沒有談論協議呢。

我想這個問題同時對於OP來說已經過時了,但是如果你有這樣一個任務,從一個定期編程的解決方案開始,以便能夠判斷什麼樣的速度增加對於你的特殊情況是必要的(你的情況是總是特殊;-)