首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当NIC接收数据时,网络中断处理程序将执行什么操作?

当网络接口控制器(NIC)接收数据时,如果发生网络中断,处理程序将执行一系列操作来确保数据的完整性和系统的稳定性。以下是基础概念和相关操作的详细解释:

基础概念

  1. 网络接口控制器(NIC):这是计算机与网络连接的硬件设备,负责发送和接收数据包。
  2. 网络中断:指网络连接突然丢失或变得不稳定,可能是由于物理层问题、链路故障或其他网络问题引起的。

相关操作

  1. 检测中断
    • NIC通过硬件中断信号通知操作系统数据包到达或网络状态变化。
    • 操作系统内核中的中断处理程序会被触发。
  • 中断处理程序的执行步骤
    • 保存上下文:中断处理程序首先保存当前CPU的状态,以便稍后可以恢复执行。
    • 读取数据:从NIC的缓冲区中读取接收到的数据包。
    • 错误检查:检查数据包的完整性,如CRC校验,确保数据没有在传输过程中损坏。
    • 通知上层协议栈:将数据包传递给网络协议栈(如TCP/IP),以便进一步处理。
    • 恢复上下文:完成数据处理后,恢复之前保存的CPU状态。
  • 网络中断的特殊处理
    • 重试机制:如果检测到短暂的网络中断,系统可能会尝试重新发送未确认的数据包。
    • 错误报告:向应用程序或网络管理员报告网络中断事件,以便采取进一步的措施。
    • 断开连接:在持续的网络中断情况下,可能需要断开当前的网络连接,并尝试重新建立连接。

应用场景

  • 数据中心:确保服务器在网络波动时仍能稳定运行。
  • 移动设备:处理移动网络中的频繁切换和信号丢失。
  • 物联网设备:保证即使在网络不稳定的环境中也能可靠地传输数据。

可能遇到的问题及解决方法

  • 数据丢失:可能因为中断处理不及时导致数据包丢失。可以通过增加缓冲区大小或优化中断处理程序来解决。
  • 延迟增加:频繁的中断处理可能导致系统响应变慢。可以通过异步处理或使用DMA(直接内存访问)来减少CPU负载。
  • 错误累积:未正确处理的中断可能导致后续操作出现连锁错误。应确保每个中断都有明确的处理逻辑和错误恢复机制。

示例代码(伪代码)

代码语言:txt
复制
def network_interrupt_handler():
    save_cpu_context()
    try:
        data_packet = read_from_nic_buffer()
        if check_integrity(data_packet):
            pass_to_network_stack(data_packet)
        else:
            log_error("Data integrity check failed")
    except NetworkError as e:
        handle_network_error(e)
    finally:
        restore_cpu_context()

def handle_network_error(error):
    if is_transient_error(error):
        retry_sending_data()
    else:
        notify_admin(error)
        disconnect_network()

通过上述步骤和策略,可以有效地管理和应对网络中断带来的挑战,保障系统的可靠性和性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ethtool 原理介绍和解决网卡丢包排查思路

当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC 接收到的数据包无法及时写到 sk_buffer,就会产生堆积,当 NIC 内部缓冲区写满后,就会丢弃部分数据,引起丢包。...提到中断,就涉及到硬中断和软中断,首先需要简单了解一下它们的区别: 硬中断:由硬件自己生成,具有随机性,硬中断被 CPU 接收后,触发执行中断处理程序。...每个网卡都有一个中断处理程序,用于通知网卡该中断已经被接收了,以及把网卡缓冲区的数据包拷贝到内存中。 当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡立即发出中断。...内核通过执行网卡已注册的中断处理函数来做出应答。中断处理程序开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包。 这些都是重要、紧迫而又与硬件相关的工作。...当网络数据包被拷贝到系统内存后,中断的任务算是完成了,这时它把控制权交还给被系统中断前运行的程序。

1.5K30

网卡卸载(Nic Offload)-硬件卸载-DPU-智能网卡

简介为了降低CPU利用率, 将更多的CPU释放给业务使用, 大多数现代操作系统都支持某种形式的网络卸载,其中一些网络处理发生在网卡 NIC 而不是 CPU 上, 它可以释放系统其余部分的资源, 这样操作系统就能处理更多连接...可以创建最大允许 64KiB 的数据包,并提供发送 (Tx) 和接收 (Rx) 选项。当发送或接收大量数据时,这可能意味着每发送或接收 64KiB 的数据处理一个大数据包,而不是处理多个较小的数据包。...如果 NIC 无法处理分段/碎片,GSO 会绕过 NIC 硬件执行相同的操作。这是通过尽可能晚地延迟分段来实现的,例如,当数据包由设备驱动程序处理时。...它们可以在驱动程序中或使用 NIC 进行合并。LRO 的一个问题是它倾向于重新分段所有传入数据包,通常会忽略标头和其他可能导致错误的信息的差异。当启用 IP 转发时,通常无法使用 LRO。...NIC 将执行 TCP 分段(读取 - 它将把大数据块分成段)。支持 LRO 的 NIC 接收数据包并重新组装它们,然后再将数据传递到本地软件。

1.1K00
  • LINUX网络子系统中DMA机制的实现

    不论是最早的轮询方式,还是我们学过的中断方式。虽然中断方式相比轮询方式已经节省了大量的CPU资源。但是在处理大量的数据时,DMA相比中断方式进一步解放了CPU。...在I/O准备阶段,程序轮询方式的CPU一直在查询等待,而中断方式的CPU可以继续执行现行程序,但是当I/O准备就绪,设备向CPU发出中断请求,CPU响应以实现数据的传输,这个过程会占用CPU一段时间,而且这段时间比使用程序轮询方式的...每一个输入数据包被放置在环形缓冲区中下一个可用缓冲区,然后发出中断。接着驱动程序将网络数据包传给内核的其它部分处理,并在环形缓冲区中放置一个新的 DMA 缓冲区。...上图中虚线步骤的解释: 1.DMA 接口将网卡(NIC)接收的数据包(packet)逐个写入 sk_buff ,被写入数据的 sk_buff 变为 used 状态。...4.poll 函数对数据进行检查,例如将几个 sk_buff 合并,因为可能同一个数据可能被分散放在多个 sk_buff 中。 5.poll 函数将 sk_buff 交付上层网络栈处理。

    5.3K62

    分析核亲和性对高吞吐量的流的影响

    Linux网络接收处理消息在现代系统上主要有两种实现方式:首先通过中断处理(通常会联合处理),一旦NIC接收到特定数量的报文后,就会向处理器发起中断,然后NIC会通过DMA将报文传输到处理器(应该是先将报文放到...DMA,然后再向处理器发起中断),随后NIC驱动核OS内核会继续协议处理,直到给应用准备好数据;其次,通过NIC轮询(在Linux中称为NEW API,NAPI),这种方式下,内核会轮询NIC来检查是否有需要接收的网络数据...不论哪种方式,都存在两类亲和性:1)流亲和性,用于确定那个核将会中断处理网络流;2)应用亲和性,用于确定哪个核会执行接收网络数据的应用进程。...当执行网络处理[6]时,通常明智的做法是选择共享相同的最低缓存结构的核[18]。例如,当一个给定的核(如核A)被选择来执行协议/中断处理时,与核A共享L2缓存的核应该执行相应的用户应用程序。...当一个处理器核和另外一个核进行通信时,数据需要在系统(芯片)网络间进行传输。为了实现大规模数据复制和一致性,必须在WAN上进行数据的传输。那么这些网络有什么不同?

    92420

    扩展Linux网络栈

    扩展Linux网络栈 来自Linux内核文档。之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问。为了更好地理解本文章中的功能,将这篇文章穿插入内。...建议配置 当关注延迟或当接收中断处理成为瓶颈后应该启用RSS。将负载分担给多个CPU可以有效减小队列长度。对于低延迟网络来说,最佳设置是分配与系统中CPU数量一样多的队列。...作为一个软件实现,需要在数据路径的后端调用它。鉴于RSS会给流量选择CPU队列,因此会触发CPU运行硬件中断处理程序,RPS会在中断处理程序之上选择CPU来执行协议处理。...RPS相比RSS有一些优势: 可以使用任何NIC 可以方便地添加软件过滤器来哈希新的协议 不会增加硬件设备的中断频率(虽然它会引入内部处理中断(IPIs)) 在接收中断处理程序的下半部分会调用RPS(当一个驱动使用...当基于接收队列映射选择传输队列时,传输设备不会针对接收设备进行验证,因为这需要在数据路径中进行代价高昂的查找操作。 为特定传输流选择的队列会保存在对应的流(如TCP)socket结构体中。

    3.6K30

    Understanding TCPIP Network Stack

    网卡需要有驱动才能工作,驱动是加载到内核中的模块,负责衔接网卡和内核的网络模块,驱动在加载的时候将自己注册进网络模块,当相应的网卡收到数据包时,网络模块会调用相应的驱动程序处理数据。...,网卡会产生大量的中断,内核在中断上下文中,会浪费大量的资源来处理中断本身。...当有数据时,DMA 负责从 NIC 取数据,并在 Ring Buffer 上按顺序找到下一个 ready 的 Descriptor,将数据存入该 Descriptor 指向的 sk_buff 中,并标记槽为...如何合并或切分数据包 为了更有效率的执行把数据包增到或从socket缓冲区中删除这类操作而使用了链表,或者叫数据包链。next和prev指针用于这个场景。...2、内核将这个缓冲区通过DMA映射,把这个队列交给网卡 内核操作,双向映射 3、网卡收到数据,就直接放进这个环形缓冲区了——也就是直接放进主内存了;然后,向系统产生一个中断 硬件行为 4、内核收到这个中断

    64310

    业界第一个真正意义上开源100 Gbps NIC Corundum介绍

    AXI lite接口允许驱动程序更改调度程序参数并启用/禁用队列。当驱动程序将数据包排队发送时,第一个流接口从队列管理逻辑提供门铃事件。第二个流接口将由调度器生成的传输命令携带到发送引擎。...当网络协议栈将数据包排队以便在网络接口上传输时,数据包将通过与该接口关联的网络端口注入网络。...发送引擎负责协调数据包的传输操作。发送引擎处理来自传输调度程序的特定队列的传输请求。使用PCIe DMA引擎进行低级处理后,数据包将通过传输校验和模块,MAC和PHY。...在包括哈希和时间戳的底层处理之后,接收引擎将向PCIe DMA引擎发出一个或多个写请求,以将数据包数据写出到主机内存中。写操作完成后,接收引擎将构建一个完成记录,并将其传递给完成写模块。...该模块负责初始化NIC,注册内核接口,为描述符和完成队列分配DMA可访问的缓冲区,处理设备中断以及在内核和NIC之间传递网络流量。

    5.9K52

    搞了半天,终于弄懂了TCP Socket数据的接收和发送,太难~

    当一个新的数据包进入网络接口(NIC)时,通过被NIC中断或通过轮询NIC的方式通知内核获取数据。...通常内核是由中断驱动还是处于轮询模式取决于网络通信量;当NIC非常繁忙时,内核轮询效率更高,但如果NIC不繁忙,则可以使用中断来节省CPU周期和电源。...当内核从NIC获取数据包时,它会对数据包进行解码,并根据源IP、源端口、目标IP和目标端口找出与该数据包相关联的TCP连接。此信息用于查找与该连接关联的内存中的struct sock。...当应用程序调用write(2)时,它将数据从用户提供的缓冲区复制到内核写入队列中。随后,内核将把数据从写队列复制到NIC中,并实际发送数据。...支持第二种方式的理由是,当处理速率或连接速率趋向于爆发时,它过于“宽宏大量”。例如,在我们刚才描述的服务器中,假设有10个新连接同时出现,然后这一秒中没有更多的连接出现。

    9.3K41

    DPDK 网卡收包流程

    1、Linux网络收发包流程 1.1 网卡与liuux驱动交互 NIC 在接收到数据包之后,首先需要将数据同步到内核中,这中间的桥梁是 rx ring buffer。...1.2 linux驱动与内核协议栈交互 当 NIC 把数据包通过 DMA 复制到内核缓冲区 sk_buffer 后,NIC 立即发起一个硬件中断。...CPU 接收后,首先进入上半部分,网卡中断对应的中断处理程序是网卡驱动程序的一部分,之后由它发起软中断,进入下半部分,开始消费 sk_buffer 中的数据,交给内核协议栈处理。...特点快速执行; l下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。特点延迟执行; 上半部分硬件中断会打断 CPU 正在执行的任务,然后立即执行中断处理程序。...为了解决这个问题,现在的内核及驱动都采用一种叫 NAPI(new API)的方式进行数据处理,其原理可以简单理解为 中断 + 轮询,在数据量大时,一次中断后通过轮询接收一定数量包再返回,避免产生多次中断

    3.5K32

    Linux 网络子系统

    处理器检测到了这个信号后就会打断自己当前正在做的工作,转而去处理这次中断(所以才叫中断)。当然在转去处理中断和中断返回时都有保护现场和返回现场的操作,这里不赘述。 那软中断又是什么呢?...对于网卡收包来说,网卡收到数据包,通知内核数据包到了,中断处理将数据包存入内存这些都是急切需要完成的工作,放到上半部完成。而解析处理数据包的工作则可以放到下半部去执行。...主要执行的操作如下: 第5步中我们看到,网卡驱动实现了ethtool所需要的接口,也在这里注册完成函数地址的注册。当 ethtool 发起一个系统调用之后,内核会找到对应操作的回调函数。...NIC,再来数据不用触发硬中断了,把数据DMA拷入系统内存即可 5.硬中断触发的驱动程序会启动软中断,启用软中断目的是将数据包后续处理流程交给软中断慢慢处理,这个时候退出硬件中断了,但是注意和网络有关的硬中断...当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC接收到的数据包无法及时写到sk_buffer,就会产生堆积,当NIC内部缓冲区写满后,就会丢弃部分数据,引起丢包。

    3.7K21

    RecoNIC 入门:SmartNIC 上支持 RDMA 的计算卸载-FPGA-智能网卡-AMD-Xilinx

    RDMA 引擎负责处理 RDMA 流量,提供访问通过网络连接的远程对等点的主机或设备内存中的数据的能力。 流计算和后备计算块中实现的用户定义加速器可以直接处理设备内存中的数据,包括网络接收的数据。...在具有中断系统的设计中,当状态 FIFO 不为空时,LC 内核会触发系统中断,让主机相应地处理中断。 在轮询系统设计中,当状态 FIFO 中的输出就绪时,LC 内核将完成信号写入专用内存映射寄存器。...DMA 测试, DMA 测试示例评估主机和设备内存之间复制数据的功能。 当主机充当主设备时,它支持对 NIC 内存的读取和写入。 其用法如清单 1 所示。 图片 B....在延迟方面,当传输小数据大小(时,批量请求比单个请求可以实现近 10 倍的改进,即每次 RDMA 读取操作约 400 ns。...此外,当RDMA引擎注意到其SQ生产者索引门铃增加n时,它以流水线方式发出n个读操作。

    1.6K12

    Redis高负载下的中断优化

    将网卡收到的数据包转移到主机内存(NIC与驱动交互) NIC在接收到数据包之后,首先需要将数据同步到内核中,这中间的桥梁是rx ring buffer。...当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC接收到的数据包无法及时写到sk_buffer,就会产生堆积,当NIC内部缓冲区写满后,就会丢弃部分数据,引起丢包。...提到中断,就涉及到硬中断和软中断,首先需要简单了解一下它们的区别: 硬中断: 由硬件自己生成,具有随机性,硬中断被CPU接收后,触发执行中断处理程序。...硬中断的中断号及统计数据可以在/proc/interrupts中看到,对于多队列网卡,当系统启动并加载NIC设备驱动程序模块时,每个RXTX队列会被初始化分配一个唯一的中断向量号,它通知中断处理程序该中断来自哪个...NUMA 架构下的中断优化 这时我们再回归到中断的问题上,当两个NUMA节点处理中断时,CPU实例化的softnet_data以及驱动分配的sk_buffer都可能是跨node的,数据接收后对上层应用

    3K110

    智能网卡如何颠覆传统计算

    2019 年 9 月 3 日 ,Mellanox 宣布隆重推出 ConnectX-6 Dx 和 BlueField-2 – 新一代云Smart NIC 和 I/O 处理单元 (IPU) 解决方案,旨在大规模处理各类工作负载时实现无与伦比的数据中心安全性...即使在这种理想的假设下,这种微不足道的计算能力也仅仅能够在网络堆栈中执行一些LLC或内存访问,留给应用程序逻辑的东西少得可怜。...网络I/O性能为CPU和GPU带来挑战 网络I/O的性能问题长期以来一直备受关注,其重点在于消除操作系统网络堆栈中的低效率以及优化NIC-CPU交互。...此外,CPU和NIC硬件提供了几种机制来提高I/O处理的效率,例如,将数据直接引入CPU LLC(DDIO),并通过减少CPU内核之间的缓存争用(例如,接收端扩展)和降低中断频率(例如,中断调制)来提高可扩展性...当一个应用执行RDMA读或写请求时,不执行任何数据复制。在不需要任何内核内存参与的条件下,RDMA请求从运行在用户空间中的应用中发送到本地NIC(网卡),然后经过网络传送到远程NIC。

    2.8K12

    Boost UDP Transaction Performance

    TSO/GSO用于发送报文时,将上层聚合的数据进行分割,分割为不大于MTU的报文;GRO在接受侧,将多个报文聚合为一个数据,上送给协议栈。总之就是将报文的处理下移到了网卡上,减少了网络栈的负担。...RSS 在多核服务器上扩展了网络接收侧的处理 RSS本身是一个NIC特性 将报文分发到一个NIC中的多个队列上 每个队列都有一个不同的中断向量(不同队列的报文可以被不同的核处理) 可以运用于TCP/UDP...通常10G的NICs会支持RSS RSS是物理网卡支持的特性,可以将NIC的多个队列映射到多个CPU核上进行处理,增加处理的效率,减少CPU中断竞争。...此时软中断消耗的CPU就比较合理了,从下面火焰图可以看到中断处理消耗的CPU缩短了 ?...但并没有在输出方向上看到锁竞争,为什么? 避免Tx队列的锁竞争 这是因为ixgbe(Intel 10GbE NIC驱动)可以自动设置XPS ?

    1.4K10

    Intel-Nvidia-mellanox网卡-PF_RING-零拷贝-网络-存储等技术汇总-拓宽技术视野-DPU技术群

    这是可能的,因为每个虚拟适配器(在应用程序打开 Mellanox NIC 端口时创建)接收每个传入数据包的(零)副本。...数据包过滤:当每个应用程序打开一个虚拟适配器时,每个应用程序都可以指定独立的硬件内过滤规则(每个虚拟适配器的ip至32k)。...然而,通过使用PF_RING ZC驱动程序,结合RSS(接收端扩展)等硬件卸载功能,可以将性能和处理流量扩展至高达 100 Gbps。...这些通信开销消耗了原本可用于运行客户应用程序的 CPU 周期,最终导致网络运营商的部署成本高昂将网络操作卸载到 NIC 是一种实用的方法,可以部分减轻 CPU 管理(部分)网络相关状态的负担。...简而言之,我们表明,当 i) 转发平面更新和 ii) 数据包与 NIC 中的多个转发表匹配时,测试的 NIC 的转发吞吐量急剧下降。

    46401

    RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)

    这篇文章重点介绍程序员执行 ibv_post_send 后发生的机制。 快速 PCIe 背景 网络接口卡 (NIC) 通常通过 PCI Express (PCIe) 插槽连接到服务器。...然后,网络驱动程序准备包含 NIC 标头和指向有效负载的指针的设备特定 MD。 步骤 1:使用 8 字节原子写入内存映射位置,CPU(网络驱动程序)通知 NIC 已准备好发送消息。...它可以将 DoorBell 响铃次数从 n 减少到 1。 内联:发送数据时,CPU(网络驱动程序)将数据复制到 WQE 中。...Nvidia RDMA inline receive - Nvidia RDMA 内联接收 当 Inline-Receive 处于活动状态时,HCA 可以将接收到的数据写入接收 WQE 或 CQE。...在轮询 CQ 时,驱动程序将接收到的数据从 WQE/CQE 复制到用户的缓冲区。

    77531

    关于智能网卡, 您需要了解的相关的技术-DPU相关技术

    将计算从服务器的 CPU 卸载到 NIC 可以释放大量服务器的 CPU 资源,这使得 NIC 成为提供有竞争力的云服务的关键。 因此,了解将网络应用程序卸载到 NIC 的性能优势和局限性至关重要。...我们表明,虽然当今的 NIC 可以轻松支持数百千兆位的吞吐量,但频繁执行 NIC 数据包分类器的更新操作(如网络地址转换器 (NAT) 和负载均衡器对每个传入连接所做的操作)会导致吞吐量急剧下降,高达...数据包分类的一个关键挑战是分类器能够快速(i)将传入数据包与其数据包处理操作相匹配,以及(ii)调整数据包分类器的状态,例如通过插入新规则或更新现有规则。...简而言之,我们表明,当 i) 转发平面更新和 ii) 数据包与 NIC 中的多个转发表匹配时,测试的 NIC 的转发吞吐量急剧下降。...首先,我们表明,当内存利用率超过 ∼85% 时,这些 NIC 的第一个表会丢弃几乎所有流量。 我们还表明,在这种情况下,所分析的 NIC 的数据包处理延迟表现出长尾(高达 120 毫秒)。

    46720

    一种面向确定性低延迟网络数据应用的处理器-nanoPU

    NIC芯片上这段时间过程的时延确定性,因为这其中不只是操作系统调度或响应中断引起的不确定性(是否是实时操作系统),单就是CPU芯片内部就有cache机制引入的不确定性、虚拟地址向物理地址转换时可能页缺失引入的不确定性以及内部各种总线冲突带来的不确定性等等...在硬件中实现可编程传输逻辑需要支持NIC中的以下功能: 打包/重发缓冲区,用于将消息分解为数据包,并存储传出的数据包,直到接收方确认它们为止。 重组缓冲区以处理乱序数据包。...当运行在内核上的应用程序线程希望执行网络IO时,它将绑定到第4层端口号。然后,nanoPU为端口分配本地和全局RX / TX队列。...为了接收消息,应用程序仅从GPR netRX读取,从网络RX队列的头部提取数据。类似地,为了发送消息,应用程序将GPR netTX写入与网络TX队列尾部相对应的位置。...当每个核心队列有可用空间时,集中式队列将首先补充最短队列。JBSQ(1)等效于单队列模型。

    1.6K40
    领券