Networking 网卡驱动程序中的DMA是同步的吗?
我的理解是,当NIC适配器接收到新数据包时,上半部分处理程序使用DMA将数据从RX缓冲区复制到主存。我认为这个处理程序不应该在传输完成之前退出或释放INT-pin,否则新数据包会损坏旧数据包Networking 网卡驱动程序中的DMA是同步的吗?,networking,io,driver,interrupt,dma,Networking,Io,Driver,Interrupt,Dma,我的理解是,当NIC适配器接收到新数据包时,上半部分处理程序使用DMA将数据从RX缓冲区复制到主存。我认为这个处理程序不应该在传输完成之前退出或释放INT-pin,否则新数据包会损坏旧数据包 然而,DMA通常被认为是异步的,它本身需要中断机制来通知CPU数据传输已经完成。因此,我的问题是,这里的DMA实际上是同步的,还是中断实际上可以在另一个中断处理程序中发生?通常,这种同步是通过NIC(设备驱动程序)和主机CPU之间的环描述符发生的。您将获得数据包路径的详细信息。我已经解释了下面的环描述符 编
然而,DMA通常被认为是异步的,它本身需要中断机制来通知CPU数据传输已经完成。因此,我的问题是,这里的DMA实际上是同步的,还是中断实际上可以在另一个中断处理程序中发生?通常,这种同步是通过NIC(设备驱动程序)和主机CPU之间的环描述符发生的。您将获得数据包路径的详细信息。我已经解释了下面的环描述符 编辑: 让我解释一下。如果您查看第3.2.3节,其中给出了RX描述符格式,它有状态字段,用于解决数据包所有权问题。关于谁拥有数据包(NIC驱动程序或CPU),有两个要点可以避免争用和数据包损坏 DMA(从I/O设备到主机内存):RX/TX环由“硬件描述符”和“缓冲区”(从主机内存雕刻而成)组成。当我们说DMA时,控制器将数据从硬件FIFO传输到主机内存
另一个例子:对于路由器/交换机,99%的时间任务是路由和交换,因此子例程和中断优先级完全不同,而且它们总是被成吨的数据包轰炸,因此在这种情况下,子例程将永远不会出现,直到有另一个数据包在间隔处。至少我在这种网络设备上工作过。C你能详细说明一下DMA和中断是如何结合在一起的吗?让我重新表述一下,看看我是否理解正确。中断中不再有中断。CPU在上半部分处理程序完成之前不能做其他事情,所以从这个意义上说,DMA是同步的。它也被称为“DMA”,因为内部机制(即环描述符)在从NIC到RAM的数据传输期间不需要CPU参与。只是一个次要问题,同步DMA不会导致忙等待或阻塞(在处理程序中)CPU,因为在DMA完成之前CPU不能做任何其他事情。但如果是这种情况,DMA的优势似乎要小得多,因为CPU只是通过忙等待来参与传输。第一个引用的链接实际上提到了NAPI和轮询模式驱动程序。它应该解决这个问题吗?这是您可以采用的方法之一跟随。你也可以跟随。非常感谢你的详细和耐心的解释:)