网卡的DMA ring buffer和TX/RXring有什么关系?

What is the relationship of DMA ring buffer and TX/RX ring for a network card?

我知道对于网卡来说,OS必须为其分配tx/rx环,这样当OS要receive/transmit包时,网卡就会知道数据包在哪里,要传输哪些数据包。

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

简答:这些是一样的。

更多详情: 首先,请参阅与您的问题非常相关的this post

this article 中说:

A variant of the asynchronous approach is often seen with network cards. These cards often expect to see a circular buffer (often called a DMA ring buffer) established in memory shared with the processor; each incoming packet is placed in the next available buffer in the ring, and an interrupt is signaled. The driver then passes the network packets to the rest of the kernel, and places a new DMA buffer in the ring.

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

希望对您有所帮助。

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

    RAM 中存在这些环。

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

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

现在 1 和 2 可以是 DMA able buffer ,它们被称为 DMA TX/RX ring 和 DMA TX/RX buffer。 现在,由于 RX/TX 环必须始终保留,因此它们被制成 consistent/coherent DMA 类型的内存。 制作缓冲区时 streaming/Single DMA 类型的内存

DMA 环形缓冲区和 TX/RX 环形是一回事。
DMA 有两种类型的环形缓冲区

  • TX 环形缓冲区 - 用于将数据从内核传输到设备
  • RX 环形缓冲区 - 用于从设备接收数据到内核