2010-02-12 176 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来说已经过时了,但是如果你有这样一个任务,从一个定期编程的解决方案开始,以便能够判断什么样的速度增加对于你的特殊情况是必要的(你的情况是总是特殊;-)