linux内核网络中的Ring Buffer在哪里?

问题描述 投票:0回答:1

我知道当你从NIC接收数据时,有一个环形缓冲区,NIC DMA数据进入其中,并且有些NIC支持多个环形缓冲区。但我想知道环形缓冲区存储在哪里,在哪个结构中,或者我应该在编写网络驱动程序时手动分配环形缓冲区?

环形缓冲区存储在哪里,是什么样的,如果给我源代码更好,非常感谢。

networking data-structures linux-kernel linux-device-driver
1个回答
0
投票

参考:https://www.researchgate.net/figure/The-shared-ring-buffers-FIFO- Between-NIC-and-the-device-driver_fig1_341642118 核心信息: enter image description here

你问:环形缓冲区存储在哪里,在哪个结构中,或者我应该在编写网络驱动程序时手动分配环形缓冲区?

它是由网络驱动程序创建的,使用内核的fifo数据结构,并且它的内存是通过内核的方法分配的,因此位于内核的数据段中。

内核(没有网络驱动程序)调用网络驱动程序来拉起网卡(硬件),网络驱动程序管理环形缓冲区以供内核的IP协议栈使用。

当数据来自网卡时,网卡会做两件事:

  1. 通过DMA将数据保存到环形缓冲区中
  2. 硬件中断:告诉CPU(内核线程)从环形缓冲区接收数据
© www.soinside.com 2019 - 2024. All rights reserved.