网卡的DMA环缓冲区和TX/RX环是什么关系?

4va*_*ch3 8 linux networking nic linux-kernel dma

我知道对于网卡,操作系统必须为其分配 tx/rx 环,以便当操作系统要接收/传输数据包时,网卡将知道数据包在哪里以及要传输哪些数据包。

当我阅读有关 DMA 的内容时,我看到了名为 DMA 环形缓冲区的内容。DMA环和tx/rx环是同一个东西吗?或者是什么关系?

Alo*_*sad 10

  1. 环形缓冲区包含 RAM 中缓冲区的起始地址和结束地址。TX Ring 将包含 RAM 中 Buffer 的地址,其中包含要传输的数据。RX Ring 将包含 RAM 中 NIC 将放置数据的缓冲区地址。

    这些环存在于 RAM 中。

  2. TX 缓冲区和 RX 缓冲区位于 TX/RX 环指向的 RAM 中。

  3. 现在网卡寄存器在 RAM 中有环形缓冲区的位置。

现在 1 和 2 可以是 DMA 缓冲区,它们被称为 DMA TX/RX ring 和 DMA TX/RX 缓冲区。现在,由于 RX/TX 环必须贯穿始终,因此它们被制成一致/相干 DMA 类型的内存。虽然缓冲区是流式/单 DMA 类型的内存

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

  • 漂亮的图画@Alok。只是好奇,你是从某个来源复制它们还是手工制作它们:) (2认同)

Tgi*_*gul 7

简短回答:这些都是一样的。

更多详细信息:首先,请参阅与您的问题非常相关的这篇文章

这篇文章中它说:

异步方法的一种变体经常出现在网卡上。这些卡通常希望看到在与处理器共享的内存中建立的循环缓冲区(通常称为 DMA 环形缓冲区);每个传入的数据包都放置在环中的下一个可用缓冲区中,并发出中断信号。然后驱动程序将网络数据包传递给内核的其余部分,并在环中放置一个新的 DMA 缓冲区。

DMA 环允许 NIC 直接访问软件使用的内存。软件(内核情况下的 NIC 驱动程序)正在为环分配内存,然后将其映射为 DMA 内存,因此 NIC 知道它可以访问它。TX 数据包将由软件在此内存中创建,并由 NIC 读取和传输(通常在软件向 NIC 发送信号后,它应该开始传输)。RX 数据包将由 NIC 写入此内存,并由软件读取和处理(通常在发出中断以表示有工作之后)。

希望这可以帮助。