网络处理器异常检测方法及系统 【技术领域】
本发明涉及通信技术领域, 更具体地说, 涉及一种网络处理器异常检测方法及系统。 背景技术 网络处理器 (Net Processor, 简称 : NP) 是面向网络应用领域的应用特定指令处 理器, 是面向数据分组处理的、 具有体系结构特征和 / 或特定电路的软件可编程器件。目前 在数据通信行业, 主流交换机和路由器几乎都以网络处理器作为流量转发和业务处理的核 心部件。 网络处理器的稳定运行, 是保证数据通信产品流量高性能转发的基础, 也是业务处 理安全、 稳定的基本条件。
近年来, 随着网络服务的日益丰富, 网络应用越来越复杂, 对网络处理器业务处理 能力的需求不断攀升, 业务实现方案日趋复杂, 对网络处理器转发性能的要求也越来越高, 这些必然导致网络处理器运行期间出现异常的可能性也随之增加。在各种故障中, 由于软 件和硬件原因导致的网络处理器死机异常占了较大比例, 主要包括处理器硬件异常死机和
硬件问题导致软件程序局部死循环, 例如访问外设异常导致的程序死循环等。这类故障对 网络中运营的业务危害极大, 一旦发生而不能及时进行处理将导致大量丢包、 长时间断流, 严重的甚至导致网络瘫痪, 必然会给运营商和网络用户造成巨大的经济损失。
目前, 业内设备制造商面对网络处理器运行期间出现的问题多采用人工排查的方 式, 耗费了大量的人力、 物力和财力, 也提高了运维成本, 给企业增加了额外的负担。 为了降 低企业的设备运维开销, 亟需一种能够检测网络处理器软硬件死机异常的技术方案, 以便 使处理器软件能在第一时间自动检测出故障。
专利申请号为 200410015057.5、 公开号为 CN1641600 的中国专利申请公开了一种 预报电子装置死机机率的方法, 该方法主要是通过统计系统执行侦错次数的指针值与预先 建立的用以预测系统执行状态系统状态的预测表进行比对, 以此作为判断系统状态稳定与 否的依据。该检测方法主要是侧重 “死机” 的预测, 且需要预先建立预测表, 而网络处理器 的业务处理往往较为复杂, 处理不同业务时, 系统状态大相径庭, 难以保持一成不变, 因此 该方法很难应用于网络处理器的死机异常检测。
专利申请号为 200910169532.7、 公开号为 CN101645035 的中国专利申请公开了 一种检测程序代码运行位置的方法和嵌入式系统, 通过运行插入有预定输出指令的程序代 码, 输出指令包含本预定输出指令在程序代码中的位置信息 ; 以及在运行到预定输出指令 时, 向外部接口输出位置信息, 由外部接口根据该位置信息控制在该外部接口上的发光二 极管显示预定输出指令在程序代码中的位置。该方案侧重序代码运行位置的检测, 且需要 外接发光二极管进行显示。 现有以网络处理器为核心的转发设备硬件组网均不会将其与发 光二极管这类外设连接, 且网络处理器运行频率相当高, 程序位置更新相当快, 无法通过外 接发光二极管的方式进行显示。发明内容 本发明所要解决的技术问题是针对现有技术的缺陷, 提出一种网络处理器异常检 测方法及系统, 用以提升以网络处理器为核心单元的网络设备运行期间故障的检测能力。
为了解决上述技术问题, 本发明提供了一种网络处理器异常检测方法, 包括 :
网络处理器各个线程的执行流程中增加有异常检测操作代码, 当网络处理器运行 到当前线程的所述异常检测操作代码时, 网络处理器将共享内存中异常保护标记数据区内 所述当前线程对应的标记位置为第一标记 ;
当定时器周期到达时, 协处理器检测共享内存中异常保护标记数据区的所有标记 位, 若检测出所有标记位不全为第一标记, 则确定不为第一标记的标记位对应的线程出现 异常 ; 若检测出所有标记位全为第一标记, 则协处理器将所有标记位置为第二标记。
进一步的, 所述网络处理器各个线程的执行流程中增加有异常检测操作代码包 括: 网络处理器各个线程的执行流程的公共流程中增加有异常检测操作代码 ; 或者, 网络 处理器各个线程的执行流程的分支流程中增加有异常检测操作代码。
进一步的, 所述网络处理器可以为单核网络处理器, 所述当网络处理器运行到当 前线程的所述异常检测操作代码时, 网络处理器将共享内存中异常保护标记数据区内所述 当前线程对应的标记位置为第一标记包括 :
当网络处理器运行到当前线程的所述异常检测操作代码时, 读取网络处理器的状 态寄存器, 提取当前线程的线程号 ;
网络处理器根据当前线程的线程号和共享内存中异常保护标记数据区的起始地 址, 计算得到所述当前线程对应的标记位 ;
网络处理器将所述当前线程对应的标记位置为第一标记。
进一步的, 所述网络处理器还可以为多核网络处理器, 所述当网络处理器运行到 当前线程的所述异常检测操作代码时, 网络处理器将共享内存中异常保护标记数据区内所 述当前线程对应的标记位置为第一标记包括 :
当网络处理器运行到当前线程的所述异常检测操作代码时, 读取网络处理器的状 态寄存器, 提取当前线程所在的处理器核号和当前线程的线程号 ;
网络处理器根据所述处理器核号和当前线程的线程号, 计算所述当前线程在网络 处理器所有线程中的序号 ;
网络处理器根据所述当前线程在网络处理器所有线程中的序号和共享内存中异 常保护标记数据区的起始地址, 计算得到所述当前线程对应的标记位 ;
网络处理器将所述当前线程对应的标记位置为第一标记。
进一步的, 所述定时器周期 T 定时器周期可以根据下式来设定 :
T 定时器周期≥ max[1/f 网络处理器频率 *T 平均指令周期 *N 指令行 +T 外设访问时间 ]
其中, f 网络处理器频率表示正常工作时所述网络处理器的频率 ; T 平均指令周期表示正常工 作时所述网络处理器执行每条指令平均消耗的周期 ; N 指令行表示程序中指令行数 ; T 外设访问时间 表示程序中最差情况下输入 / 输出操作消耗的时间。
本发明还提供了一种网络处理器异常检测系统, 包括 :
网络处理器, 所述网络处理器各个线程的执行流程中增加有异常检测操作代码, 所述网络处理器用于当运行到当前线程的所述异常检测操作代码时, 将共享内存中异常保
护标记数据区内所述当前线程对应的标记位置为第一标记 ;
协处理器, 用于当定时器周期到达时, 检测共享内存中异常保护标记数据区的所 有标记位, 若检测出所有标记位不全为第一标记, 则确定不为第一标记的标记位对应的线 程出现异常 ; 若检测出所有标记位全为第一标记, 则协处理器将所有标记位置为第二标 记;
共享内存, 用于存储所述网络存储器和所述协处理器写入的数据, 供所述协处理 器访问。
进一步的, 所述网络处理器各个线程的执行流程的公共流程中增加有异常检测操 作代码 ; 或者, 所述网络处理器各个线程的执行流程的分支流程中增加有异常检测操作代 码。
进一步的, 所述网络处理器可以为单核网络处理器, 所述网络处理器包括 :
第一读取模块, 用于当运行到当前线程的所述异常检测操作代码时, 读取网络处 理器的状态寄存器, 提取当前线程的线程号 ;
第一计算模块, 用于根据当前线程的线程号和共享内存中异常保护标记数据区的 起始地址, 计算得到所述当前线程对应的标记位 ; 第一写入模块, 用于将所述当前线程对应的标记位置为第一标记。
进一步的, 所述网络处理器还可以为多核网络处理器, 所述网络处理器包括 :
第二读取模块, 用于当运行到当前线程的所述异常检测操作代码时, 读取网络处 理器的状态寄存器, 提取当前线程所在的处理器核号和当前线程的线程号 ;
第二计算模块, 用于根据所述处理器核号和当前线程的线程号, 计算所述当前线 程在网络处理器所有线程中的序号 ;
第三计算模块, 用于根据所述当前线程在网络处理器所有线程中的序号和共享内 存中异常保护标记数据区的起始地址, 计算得到所述当前线程对应的标记位 ;
第二写入模块, 用于将所述当前线程对应的标记位置为第一标记。
进一步的, 所述定时器周期 T 定时器周期可以根据下式来设定 :
T 定时器周期≥ max[1/f 网络处理器频率 *T 平均指令周期 *N 指令行 +T 外设访问时间 ]
其中, f 网络处理器频率表示正常工作时所述网络处理器的频率 ; T 平均指令周期表示正常工 作时所述网络处理器执行每条指令平均消耗的周期 ; N 指令行表示程序中指令行数 ; T 外设访问时间 表示程序中最差情况下输入 / 输出操作消耗的时间。
本发明提供的网络处理器异常检测方法及系统, 利用了网络处理器软件流程的特 点, 能够及时、 有效地对线程的异常进行检测, 在不影响网络处理器转发性能和业务处理流 程的前提下, 大大提升了以网络处理器为核心单元的网络设备运行期间故障的检测能力。
附图说明
图 1 为本发明提供的网络处理器异常检测方法一实施例中网络处理器的处理流 程示意图 ;
图 2 为本发明提供的网络处理器异常检测方法一实施例中协处理器的处理流程 示意图 ;
图 3 为本发明提供的网络处理器异常检测系统一实施例的结构示意图。具体实施方式
本发明针对网络处理器为核心的典型转发设备的硬件和软件流程特点, 提出一种 网络处理器异常检测方法及系统, 其核心思想是预先在网络处理器各个线程的执行流程中 增加异常检测操作代码, 网络处理器和协处理器共享使用共享内存。当网络处理器运行到 当前线程的异常检测操作代码时, 网络处理器将共享内存中异常保护标记数据区内当前线 程对应的标记位置为第一标记 ; 当定时器周期到达时, 协处理器检测共享内存中异常保护 标记数据区的所有标记位, 若检测出所有标记位不全为第一标记, 则确定不为第一标记的 标记位对应的线程出现异常 ; 若检测出所有标记位全为第一标记, 则协处理器将所有标记 位置为第二标记。 本发明利用了网络处理器软件流程的特点, 能够及时、 有效地对线程的异 常进行检测, 在不影响网络处理器转发性能和业务处理流程的前提下, 大大提升了以网络 处理器为核心单元的网络设备运行期间故障的检测能力。
在以下实施例中, 主要针对死机这种异常进行示范性描述, 但本发明所述的异常 不仅限于此。
网络处理器是本发明的核心模块, 也是异常检测的对象。网络处理器中运行流量 转发和网络业务实现的相关程序, 本发明中, 网络处理器主要利用软件在运行期间反馈各 个线程的状态信息, 具体地将共享内存中异常保护标记数据区内当前线程对应的标记位置 为第一标记。网络处理器反馈的状态信息以下也称为死机信息。 协处理器通常可以为 ARM 等芯片, 其上一般运行操作系统, 负责管理内存、 加载网 络处理器源代码及响应中断等。协处理器的主频往往远低于网络处理器。本发明中协处理 器的主要作用是负责对网络处理器反馈的死机信息进行监控, 当发现状态异常时, 进行相 应处理。
共享内存可为网络处理器片内的可访问存储区, 例如 : 静态随机存储器 (Static Random Access Memory, 简称 : SRAM)、 动态随机存储器 (DynamicRandom Access Memory, 简 称: DRAM) 或双倍数据传输速率 (Double DataRate, 简称 : DDR) 存储器等存储单元。共享内 存可被网络处理器和协处理器共享使用。 本发明中共享内存的主要作用是存储网络处理器 反馈的死机信息, 并供协处理器进行访问。
下面结合附图及优选实施方式对本发明技术方案进行详细说明。
图 1 为本发明提供的网络处理器异常检测方法一实施例中网络处理器的处理流 程示意图, 如图 1 所示, 包括以下步骤 :
步骤 101、 在网络处理器各个线程的执行流程中增加异常检测操作代码 ;
为了达到较高的转发性能, 网络处理器通常具有多条线程并行运行, 每个线程可 独立运行, 对网络流量分阶段进行处理。 虽然各个线程处理任务不同, 但由于流量转发和业 务处理持续性的需要, 各个线程的软件执行流程基本是按照业务处理无限次循环的方式设 计, 即当线程完成初始化后, 以 “收包——处理——发包——收包” 这样的流程不断循环实 现其功能, 因而各个线程基本都存在与业务处理无关的公共流程, 例如 “收包” 或 “发包” 的 流程。在实际运行期间, 这些公共流程都必然会执行至少一次。因此本实施例可以在网络 处理器各个线程的执行流程的公共流程中增加异常检测操作代码。
对于某些线程由于功能需求不存在公共流程的情况, 可在网络处理器这些线程的
执行流程的分支流程中增加异常检测操作代码。
当然本实施例也可以直接在网络处理器各个线程的执行流程的分支流程中增加 有异常检测操作代码。
通过在网络处理器各个线程的执行流程中增加异常检测操作代码, 确保在正常执 行时, 线程能够周期性的运行异常检测操作代码 ; 若线程在运行过程中发生死循环、 死等信 号、 挂起等死机异常时, 则异常检测操作代码无法得到执行机会。
步骤 102、 当网络处理器运行到当前线程的所述异常检测操作代码时, 读取网络处 理器的状态寄存器, 提取当前线程的线程号 ;
步骤 103、 网络处理器根据当前线程的线程号和共享内存中异常保护标记数据区 的起始地址, 计算得到当前线程对应的标记位 ;
步骤 104、 网络处理器将当前线程对应的标记位置为第一标记。
本实施例中, 共享内存需开辟一块区域 ( 即异常保护标记数据区 ) 用于使网络处 理器与协处理器进行死机信息的交互。 网络处理器各个线程的死机信息与该区域的特定标 记位一一对应。 举例来说, 当网络处理器运行到当前线程的所述异常检测操作代码时, 表明 当前进程运行正常, 网络处理器将当前线程对应的标记位置为 “1” , 即标记位置 “1” 表示此 标记位对应的线程运行正常。 也即, 当线程完成一次循环时, 会在共享内存中对应的标记位 置 “1” 一次 ; 而当线程出现死机异常时, 程序无法执行到异常检测操作代码, 则无法完成置 “1” 操作。 上述步骤 102-104 适用于网络处理器为单核网络处理器的情况, 对于网络处理器 为多核网络处理器的情况, 步骤 102-104 可替换为 : 当网络处理器运行到当前线程的异常 检测操作代码时, 读取网络处理器的状态寄存器, 提取当前线程所在的处理器核号和当前 线程的线程号 ; 网络处理器根据处理器核号和当前线程的线程号, 计算当前线程在网络处 理器所有线程中的序号 ; 网络处理器根据当前线程在网络处理器所有线程中的序号和共享 内存中异常保护标记数据区的起始地址, 计算得到当前线程对应的标记位 ; 网络处理器将 当前线程对应的标记位置为第一标记。
图 2 为本发明提供的网络处理器异常检测方法一实施例中协处理器的处理流程 示意图, 如图 2 所示, 包括以下步骤 :
步骤 201、 协处理器设定定时器 ;
该定时器的周期 T 定时器周期可根据下式来设定 :
T 定时器周期≥ max[1/f 网络处理器频率 *T 平均指令周期 *N 指令行 +T 外设访问时间 ]
其中, f 网络处理器频率表示正常工作时网络处理器的频率 ; T 平均指令周期表示正常工作时 网络处理器执行每条指令平均消耗的周期 ; N 指令行表示程序中指令行数 ; T 外设访问时间表示程序 中最差情况下输入 / 输出操作消耗的时间。
为了降低网络处理器死机异常的误判概率, 定时器的周期不能设置过短。同时为 了保证系统死机异常检测的灵敏性, 本发明中, 定时器的周期 T 定时器周期大于或等于各线程计 算的最大值, 从而保证死机异常检测不会出现误测的情况。
在一开始设定定时器时, 还需初始化共享内存的异常保护标记数据区, 将其全部 置为 “0” 。
步骤 202、 判断网络处理器状态是否进入正常运行阶段, 若是, 则执行步骤 203 ; 否
则继续等待网络处理器进入正常运行阶段 ;
步骤 203、 协处理器等待定时器产生的有效的信号或中断 ;
本实施例中, 定时器产生有效的信号或中断表示定时器周期到达。
步骤 204、 当接收到定时器产生的有效的信号或中断时, 协处理器检测共享内存中 异常保护标记数据区的所有标记位 ;
本实施例中, 当接收到定时器产生的有效的信号或中断时, 协处理器可以先判断 死机检测功能是否启用, 具体可以为判断死机检测功能标记是否为有效的 ; 在启用的条件 下, 再去检测共享内存中异常保护标记数据区, 否则跳转步骤 203。
步骤 205、 判断所有标记位是否全为第一标记, 若是, 执行步骤 206 ; 否则执行步骤 207 ;
参照上述例子, 协处理器判断所有标记位是否全为 “1” , 若是, 则表明所有线程运 行正常 ; 若不是, 则表明不为 “1” 的标记位对应的线程出现异常。
步骤 206、 协处理器将所有标记位置为第二标记, 跳转步骤 203 ;
参照上述例子, 协处理器将所有标记位置为 “0” , 也即将共享内存中异常保护标记 数据区全部清 “0” 。
步骤 207、 确定不为第一标记的标记位对应的线程出现异常, 进一步根据设备情 况, 复位网络处理器、 设备重启。
本实施例中, 协处理器在初始化阶段, 将异常保护标记数据区全部清 “0” ; 系统正 常运行后, 定时读取共享内存中的异常保护标记数据区 ; 在正常运行情况下, 协处理器读取 到的异常保护标记数据区中各线程对应的标记位全部置 “1” , 表示各个线程运行正常 ; 此 后, 将异常保护标记数据区再次全部清 “0” , 从而等待网络处理器线程下一次置位 ; 当协处 理器读取到的异常保护标记数据区中某些标记位依然置 “0” 时, 表示该线程已处于死机异 常的状态 ; 这时协处理器可以采取复位网络处理器、 设备重启等方式, 使线程从死机状态中 恢复, 并采集故障信息。
图 3 为本发明提供的网络处理器异常检测系统一实施例的结构示意图。如图 3 所 示, 该系统包括 : 网络处理器 11、 协处理器 12 和共享内存 13, 其中 :
网络处理器 11 中具有多个线程并行运行, 各个线程的执行流程中增加有异常检 测操作代码, 网络处理器 11 用于当运行到当前线程的异常检测操作代码时, 将共享内存 13 中异常保护标记数据区内当前线程对应的标记位置为第一标记 ;
协处理器 12 用于当定时器周期到达时, 检测共享内存 13 中异常保护标记数据区 的所有标记位, 若检测出所有标记位不全为第一标记, 则确定不为第一标记的标记位对应 的线程出现异常 ; 若检测出所有标记位全为第一标记, 则协处理器将所有标记位置为第二 标记 ;
共享内存 13 用于存储网络存储器 11 和协处理器 12 写入的数据, 供协处理器 12 访问。
网络处理器 11 各个线程的执行流程的公共流程中可增加有异常检测操作代码 ; 或者, 网络处理器 11 各个线程的执行流程的分支流程中增加有异常检测操作代码。
图 3 所示的网络处理器 11 为单核网络处理器, 进一步的, 该网络处理器 11 可以包 括: 第一读取模块, 用于当运行到当前线程的异常检测操作代码时, 读取网络处理器的状态寄存器, 提取当前线程的线程号 ; 第一计算模块, 用于根据当前线程的线程号和共享内存中 异常保护标记数据区的起始地址, 计算得到当前线程对应的标记位 ; 第一写入模块, 用于将 当前线程对应的标记位置为第一标记。
可选地, 网络处理器也可以为多核网络处理器, 这样网络处理器包括 : 第二读取模 块, 用于当运行到当前线程的异常检测操作代码时, 读取网络处理器的状态寄存器, 提取当 前线程所在的处理器核号和当前线程的线程号 ; 第二计算模块, 用于根据处理器核号和当 前线程的线程号, 计算当前线程在网络处理器所有线程中的序号 ; 第三计算模块, 用于根据 当前线程在网络处理器所有线程中的序号和共享内存中异常保护标记数据区的起始地址, 计算得到当前线程对应的标记位 ; 第二写入模块, 用于将当前线程对应的标记位置为第一 标记。
协处理器 12 的定时器的周期 T 定时器周期可根据下式来设定 :
T 定时器周期≥ max[1/f 网络处理器频率 *T 平均指令周期 *N 指令行 +T 外设访问时间 ]
其中, f 网络处理器频率表示正常工作时网络处理器的频率 ; T 平均指令周期表示正常工作时 网络处理器执行每条指令平均消耗的周期 ; N 指令行表示程序中指令行数 ; T 外设访问时间表示程序 中最差情况下输入 / 输出操作消耗的时间。 为了降低网络处理器死机异常的误判概率, 定时器的周期不能设置过短。同时为 了保证系统死机异常检测的灵敏性, 本发明中, 定时器的周期 T 定时器周期大于或等于各线程计 算的最大值, 从而保证死机异常检测不会出现误测的情况。
本发明提供的网络处理器异常检测方法及系统, 利用了网络处理器软件流程的特 点, 能够及时、 有效地对线程的异常进行检测, 同时在检测到异常后进行自动恢复。在不影 响网络处理器转发性能和业务处理流程的前提下, 大大提升了以网络处理器为核心单元的 网络设备运行期间故障的检测能力和修复能力, 能够明显提高企业的经济效益。另外, 为 了尽可能降低操作共享内存对系统性能带来的影响, 结合系统硬件方案, 本发明选用输入 / 输出速度较快的共享内存。
最后, 需要注意的是 : 以上列举的仅是本发明的具体实施例子, 当然本领域的技术 人员可以对本发明进行改动和变型, 倘若这些修改和变型属于本发明权利要求及其等同技 术的范围之内, 均应认为是本发明的保护范围。