从内核到用户空间(DMA)

时间:2012-06-21 11:21:17

标签: c networking linux-kernel kernel dma

最近,我一直在阅读很多网站,关于10gb / s NIC的书籍,他们的DMA以及linux内核处理数据的方式(10/100 mb / s NIC)以及一些问题来到我的网站上心神。

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

并且

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

或者是他们没有想到的更好的解决方案:/

谢谢。

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我记得听过英特尔在渥太华Linux研讨会上的一些人的演讲,这些演讲完全实现了你提出的建议。当他们测量结果与正常套接字接口时,他们惊讶地发现,对于许多工作负载,这种方法没有表现得更好,有时甚至更糟(!)然后是套接字接口。

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