我在Linux x86_64上使用基于以太网10 Gbit/s的TCP/IP。TCP/IP中的数据包处理中断代码是什么?
但是在CPU-Core之一发生中断时会发生什么?
是不是真的,出现这种情况:
- 中断的代码计算IP数据包的校验
- 代码中断将数据从内核空间缓冲区到所需的套接字缓冲区
- 代码中断将数据从以太网卡上的缓冲区复制到内核空间中的缓冲区(或通过在以太网上使用DMA控制器发生中断之前发生,并且由以太网卡启动?)
我在Linux x86_64上使用基于以太网10 Gbit/s的TCP/IP。TCP/IP中的数据包处理中断代码是什么?
但是在CPU-Core之一发生中断时会发生什么?
是不是真的,出现这种情况:
你的问题是硬件,协议栈和用户空间的混合。中断的
代码计算IP数据包的校验
这部分协议 - 我想这里的某个地方,从内核中断拷贝数据网/支持IPv4/ip_input.c
代码 - 空间缓冲区到所需的套接字缓冲区
混合的原型和用户空间,例如这里net/ipv4/tcp_input.c
中断代码将数据从以太网卡上的缓冲区复制到内核空间中的缓冲区(或者在中断产生之前,通过在以太网上使用DMA控制器并由以太网卡启动?)
这是例如drivers/net中/ 8139cp.c
下一页硬件 - 我想你是误会了“中断”一词 - 有硬件中断和软件中断。 这里唯一的硬件中断是来自以太网控制器的rx/tx中断。
不是一个完整的回答你的问题:
一切有可能划分网络分成两个部分的第一实际协议(净利润/ IPv4的目录),它实现了各种网络硬件 和部分(drivers/net中) 。
并非所有的硬件驱动程序都实现中断驱动技术的一些驱动程序,用于高带宽适配器使用轮询技术(NAPI接口 - 我简要描述)。
我建议你阅读下面的文章:
Linux网络内核(http://www.ecsl.cs.sunysb.edu/elibrary/linux/network/LinuxKernel.pdf)
谢谢!您能否说,在硬件中断期间,至少要复制多少次数据以及读取多少次(例如,用于校验和)? (当我使用带有套接字的以太网使用TCP时,如果它很重要) – Alex 2015-01-21 14:14:24
NAPI〜1中断(正如我在到达时所说的那样,它被禁用并且轮询模式被设置),如果不是NAPI中断可能发生的次数与数据到达,传输并且数据在任何地方都被正确地读取。在硬件中断期间不计算校验和(它可以不是IP层校验和), - 它是协议层的责任,并且在这里被封为http://lxr.free-electrons.com/source/net/ipv4/ip_input .c#L376适用于ip层。 – Maquefel 2015-01-22 06:27:14
非常感谢!即对于NAPI,在1个硬件中断中,数据只复制1次。但是,您是否可以在中断发生时澄清此时以太网帧的数据:以太网卡上的硬件缓冲区中还是已经存在于CPU-RAM缓冲区中? – Alex 2015-01-22 13:01:42
你是在谈论一个内核驱动程序吧?我无法理解'使用BSD套接字()和使用epoll()解复用'之间的联系,以及有关驱动程序实际工作方式的问题。或者一般的关于epoll设施的问题?看起来你已经在你的问题中合并了3个不同的东西。 – Maquefel 2015-01-21 10:13:50
@Maquefel我删除了有关BSD套接字和epoll的说明。是的,我关于内核驱动程序,以及中断代码中发生了什么。 – Alex 2015-01-21 10:18:53
硬件内核驱动程序或实际协议? – Maquefel 2015-01-21 10:40:09