7

最近,我阅读了很多关于 10gb/s 网卡、它们的 DMA 以及 linux 内核(10/100 mb/s 网卡)处理数据的方式的网站和书籍,我想到了一些问题。

将 10GB/s 的数据流从 NIC 发送到用户空间的最简单方法是什么(我假设能够以相同的速率处理用户空间中的数据)。

您认为在用户空间内实现 DMA 缓冲区以直接从那里读取原始数据(并且显然以相同的速率处理它们)是一个好主意吗?

还是我没有想到的更好的解决方案:/

谢谢你。

4

3 回答 3

6

最简单的事情就是使用 Linux 的普通套接字。它可能不是最有效的,但它是最简单的。

有一些框架可以非常有效地在用户空间中接收和传输数据。它们将相同的缓冲区映射到 NIC (DMA) 和进程,因此不需要复制数据。
这些框架完全绕过内核——您必须直接与 NIC 交互。此类框架有,例如PF-RINGNetmap

于 2012-06-21T13:24:18.170 回答
2

我还建议看一下 PFQ 框架(https://github.com/pfq/PFQhttp://netgroup.iet.unipi.it/software/pfq/),它建立在 netmap 和pf_ring 概念并隐藏它们以允许在用户空间中进行简单的多核数据包处理。

于 2012-07-17T08:15:07.733 回答
0

我记得在渥太华 Linux 研讨会上听过英特尔的一些人发表的演讲,该演讲完全实现了您的建议。当他们测量结果与普通套接字接口时,他们惊讶地发现,对于许多工作负载,这种方法的性能并没有比套接字接口更好,有时更差(!)。

我搜索但现在无法在网上找到确切的论文,但也许这会给你一个提示......

于 2012-07-17T08:40:08.033 回答