CN116991449B - 内核子系统热升级方法、设备及存储介质 - Google Patents

内核子系统热升级方法、设备及存储介质 Download PDF

Info

Publication number
CN116991449B
CN116991449B CN202311268459.5A CN202311268459A CN116991449B CN 116991449 B CN116991449 B CN 116991449B CN 202311268459 A CN202311268459 A CN 202311268459A CN 116991449 B CN116991449 B CN 116991449B
Authority
CN
China
Prior art keywords
kernel
subsystem
data dependency
data
upgrade
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311268459.5A
Other languages
English (en)
Other versions
CN116991449A (zh
Inventor
丁天琛
赵鑫鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202311268459.5A priority Critical patent/CN116991449B/zh
Publication of CN116991449A publication Critical patent/CN116991449A/zh
Application granted granted Critical
Publication of CN116991449B publication Critical patent/CN116991449B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种内核子系统热升级方法、设备及存储介质。在本申请实施例中,针对需要进行热升级的内核子系统,首先,基于边界配置信息从内核源文件中提取出内核子系统的当前源代码,并对当前源代码进行升级得到函数代码升级数据,以及识别内核子系统的至少一个数据依赖关系;接着,构建对内核子系统进行热升级所需的热升级脚本文件;最后,在内核的运行过程中,利用热升级脚本文件对内核子系统的函数代码和数据依赖关系分别进行热升级。由此,在内核不停机的情况下,实现了内核子系统的独立热升级,为定制化内核子系统的新特性提供了便利;也可以避免因为子系统升级而升级整个内核所引发的各种不确定性风险。

Description

内核子系统热升级方法、设备及存储介质
技术领域
本申请涉及云技术领域,尤其涉及一种内核子系统热升级方法、设备及存储介质。
背景技术
Linux内核是个宏内核,它由大量子系统组成,这些子系统是紧密耦合的,不可灵活拆卸的;与子系统相对的另一个概念是内核模块,他们是可以灵活拆卸的。扩展的伯克利包过滤器(extended Berkeley Packet Filter,eBPF)是Linux内核中的一个子系统,旨在提供高性能、可编程的数据包处理能力,可用于实现网络过滤、安全检测、流量分析等应用场景。
编程人员不断提供各种新特性的eBPF子系统,这些eBPF子系统分布在不同版本的Linux内核中。用户想要使用具有新特性的eBPF子系统,需要在停机状态下对整个Linux内核进行更新,不仅会造成服务中断,而且内核版本的更新代价非常大,容易引入新的问题。因此,亟需一种针对eBPF子系统进行独立热升级的方法。
发明内容
本申请的多个方面提供一种内核子系统热升级方法、设备及存储介质,用以针内核子系统进行独立热升级,解决现有内核升级面临的服务中断等问题。
本申请实施例提供一种内核子系统热升级方法,包括:基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码,并对第一内核子系统的当前源代码进行升级以得到函数代码升级数据;基于第一内核子系统的初始化函数和/或调试结果,识别第一内核子系统的至少一个数据依赖关系;根据函数代码升级数据和至少一个数据依赖关系,构建针对第一内核子系统进行热升级所需的热升级脚本文件;在内核的运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件;根据热升级脚本文件,对第一内核子系统的当前源代码中的当前函数代码和至少一个数据依赖关系分别进行热升级。
本申请实施例提供一种内核子系统热升级方法,包括:在内核运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件;根据热升级脚本文件,对第一内核子系统的至少一个数据依赖关系分别进行热升级;其中,热升级脚本文件是第一内核子系统的至少一个数据依赖关系构建得到,第一内核子系统的至少一个数据依赖关系是基于第一内核子系统的初始化函数和/或调试结构识别出的。
本申请实施例提供一种内核子系统热升级装置,包括:代码升级处理模块,用于基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码,并对第一内核子系统的当前源代码进行升级以得到函数代码升级数据;数据依赖处理模块,用于基于第一内核子系统的初始化函数和/或调试结果,识别第一内核子系统的至少一个数据依赖关系;脚本文件构建模块,用于根据函数代码升级数据和至少一个数据依赖关系,构建针对第一内核子系统进行热升级所需的热升级脚本文件;命令接收模块,用于在内核的运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件;热升级模块,用于根据热升级脚本文件,对第一内核子系统的当前源代码中的当前函数代码和至少一个数据依赖关系分别进行热升级。
本申请实施例提供一种电子设备,包括:存储器和处理器;存储器中存储有计算机程序,处理器,与存储器耦合,用于执行计算机程序,以实现内核子系统热升级方法中的步骤。
本申请实施例提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器实现内核子系统热升级方法中的步骤。
在本申请实施例中,针对需要进行热升级的内核子系统,首先,基于边界配置信息从内核源文件中提取出内核子系统的当前源代码,并对内核子系统的当前源代码进行升级得到函数代码升级数据,以及识别内核子系统的至少一个数据依赖关系;接着,构建对内核子系统进行热升级所需的热升级脚本文件;最后,在内核的运行过程中,响应于针对内核子系统的热升级指令,利用热升级脚本文件对内核子系统的函数代码和数据依赖关系分别进行热升级。由此,在内核不停机的情况下,实现了内核子系统的独立热升级,为定制化内核子系统的新特性提供了便利;另外,由于不需要对整个内核进行升级,也可以避免因为子系统升级而升级整个内核所引发的各种不确定性风险。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请实施例提供的一种内核子系统热升级方法的流程图;
图1b为本申请实施例提供的eBPF子系统与内核中其他子系统之间的依赖关系示意图;
图2为本申请实施例提供的又一种内核子系统热升级方法的流程图;
图3为本申请实施例提供的又一种内核子系统热升级方法的流程图;
图4为本申请实施例提供的一种内核子系统热升级装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
Linux内核是个宏内核,它由大量子系统组成,这些子系统是紧密耦合的,不可灵活拆卸的;与子系统相对的另一个概念是内核模块,他们是可以灵活拆卸的。扩展的伯克利包过滤器(extended Berkeley Packet Filter,eBPF)是Linux内核中的一个子系统,旨在提供高性能、可编程的数据包处理能力,可用于实现网络过滤、安全检测、流量分析等应用场景。
编程人员不断提供各种新特性的eBPF子系统,这些eBPF子系统分布在不同版本的Linux内核中。用户想要使用具有新特性的eBPF子系统,需要在停机状态下对整个Linux内核进行更新,不仅会造成服务中断,而且内核版本的更新代价非常大,容易引入新的问题。因此,亟需一种针对eBPF子系统进行独立热升级的方法。
为此,本申请实施例提供一种内核子系统热升级方法、设备及存储介质。在本申请实施例中,针对需要进行热升级的内核子系统,首先,基于边界配置信息从内核源文件中提取出内核子系统的当前源代码,内核源文件也即内核对应的源文件;并对内核子系统的当前源代码进行升级得到函数代码升级数据,以及识别内核子系统的至少一个数据依赖关系;接着,构建对内核子系统进行热升级所需的热升级脚本文件;最后,在内核的运行过程中,响应于针对内核子系统的热升级指令,利用热升级脚本文件对内核子系统的函数代码和数据依赖关系分别进行热升级。由此,在内核不停机的情况下,实现了内核子系统的独立热升级,为定制化内核子系统的新特性提供了便利;另外,由于不需要对整个内核进行升级,也可以避免因为子系统升级而升级整个内核所引发的各种不确定性风险。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请实施例提供的一种内核子系统热升级方法的流程图。参见图1a,该方法可以包括以下步骤:
101、基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码,并对第一内核子系统的当前源代码进行升级以得到函数代码升级数据。
102、基于第一内核子系统的初始化函数和/或调试结果,识别第一内核子系统的至少一个数据依赖关系。
103、根据函数代码升级数据和至少一个数据依赖关系,构建针对第一内核子系统进行热升级所需的热升级脚本文件。
104、在内核的运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件。
105、根据热升级脚本文件,对第一内核子系统的当前函数代码和至少一个数据依赖关系分别进行热升级。
在本实施例中,内核提供操作系统的最基本的功能,负责管理系统的进程、内存、设备驱动程序、文件和网络系统。内核例如包括但不限于:宏内核、微内核或混合内核。通常,宏内核或混合内核包含大量内核子系统,这些内核子系统是紧密耦合的。以Linux内核为例,Linux内核包括eBPF子系统、用于文件管理的文件管理子系统、用于网络管理的网络管理子系统、用于内核模块管理的内核模块管理子系统等各种内核子系统。在此,将需要进行热升级的内核子系统称作为第一内核子系统。第一内核子系统例如为eBPF子系统,但并不以此为限。
实际应用中,内核源文件包括多个实现内核子系统的功能的源代码。针对第一内核子系统,首先,基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码,使得能够独立对第一内核子系统进行代码升级,并为后续对第一内核子系统进行独立的热升级提供基础。第一内核子系统的当前源代码是指当前存在于内核源文件中的第一内核子系统的程序代码,也就是内核源文件中需要进行热升级的部分源代码。
其中,边界配置信息由用户根据第一内核子系统的功能进行配置,是基于对第一内核子系统的边界划分需求定的。边界配置信息例如包括但不限于:接口函数、内部函数、外部函数、公共数据、私有数据、结构体成员等等,其中,通过接口函数,实现内部函数与外部函数之间的间接调用。内部函数可以理解为定义在第一内核子系统内,只能被内部函数或接口函数调用。这里所说的外部函数可以理解为定义在第一内核子系统外,能够被外部函数和/或内部函数调用。若一个函数参与多条调用路径中,只要有其中任意一条调用路径中该函数被外部函数直接调用了,那么,该函数则别标记为外部函数。
进一步可选的,为了准确提取第一内核子系统的当前源代码,基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码的可选实现方式为:基于边界配置信息,从内核源文件中获取同时与包含第一内核子系统在内的至少两个内核子系统存在关联关系的边界元素;根据边界元素,从内核源文件中提取第一内核子系统的当前源代码。
具体而言,边界元素包括:内部函数符号、外部函数符号、结构体成员符号、私有数据符号、公有数据符号、函数调用关系、接口函数符号和函数指针符号。需要说明的是,这里所说的各种符号可以理解为内核符号表就是为开发人员通过符号来访问程序体的对应地址,建立了一个动态可变更的映射表格。换言之,开发人员在使用某个函数或者变量的时候,只需要输入对应的符号,而不需要知道符号对应的地址。
在本实施例中,从内核源文件中提取第一内核子系统的当前源代码后,代码开发人员可以根据开发需求基于第一内核子系统的当前源代码进行代码开发,以对第一内核子系统的当前源代码进行升级,并获取对第一内核子系统的当前源代码进行升级得到的函数代码升级数据。实际应用中,第一内核子系统的当前源代码可以包括一个或多个函数代码,函数代码是实现函数功能的代码。函数代码升级数据例如包括但不限于:新增的函数代码、更新的函数代码等等。可以理解的是,相对于升级前的源代码,第一内核子系统升级后的源代码中可能会出现新增的函数代码、删除的函数代码或更新的函数代码,更新的函数代码是指对升级前的源代码中函数代码进行修改得到的。
在本实施例中,在从内核源文件中提取出第一内核子系统的当前源代码并对第一内核子系统的当前源代码进行升级之后,可以识别第一内核子系统的至少一个数据依赖关系。这里的数据依赖关系是指第一内核子系统与内核中其他子系统之间存在的数据依赖关系,例如,其他子系统的功能需要依赖第一内核子系统提供数据支持才能实现,或者,第一内核子系统的功能需要依赖其他子系统提供数据支持才能实现。在此说明,第一内核子系统和内核中其他子系统或内核模块之间还可能存在调用关系,即第一内核子系统可能被其他子系统调用,第一内核子系统也可能调用其他子系统。
初始化函数是一种特殊具有初始化功能的函数,通常分散在内核源文件中的各个文件中,不同子系统具有各自初始化函数,初始化函数在内核启动初期被执行,能够完成其所属子系统的数据依赖关系的注册。对第一内核子系统来说,其初始化函数可在第一内核子系统启动初期被执行,在该过程中完成第一内核子系统的数据依赖关系的注册,基于此,可以对第一内核子系统的初始化函数进行分析,从而确定第一内核子系统的至少一个数据依赖关系。
在一些情况中,除了对初始化函数进行分析获取第一内核子系统的数据依赖关系之外,还可以通过对第一内核子系统进行调试,对调试结果进行分析,从中获取未在初始化函数中定义的数据依赖关系。
在得到第一内核子系统的函数升级代码和至少一个数据依赖关系之后,可以根据该函数代码升级数据和至少一个数据依赖关系,构建用于对第一内核子系统的当前源代码进行热升级所需的热升级脚本文件。
示例性的,在构建热升级脚本文件时,针对函数代码升级数据,构建用于函数代码升级的第一脚本数据,第一脚本数据中包含第一内核子系统的函数代码升级数据。在构建热升级脚本文件时,针对至少一个数据依赖关系,构建用于数据依赖关系升级的第二脚本数据,第二脚本数据中包含各个数据依赖关系及其对应的数据依赖方向和热升级命令。
在一种可选的实现方式中,为了较好地进行数据依赖关系的热升级,针对至少一个数据依赖关系,构建用于数据依赖关系升级的第二脚本数据时,可以分析各个数据依赖关系对应的数据依赖方向,并根据数据依赖方向,确定各个数据依赖关系进行热升级所需的热升级命令;根据各个数据依赖关系对应的数据依赖方向,将各个数据依赖关系分类为被第一内核子系统依赖的第一类数据依赖关系和依赖第一内核子系统的第二类数据依赖关系;根据第一类数据依赖关系及各自对应的热升级命令和第二类数据依赖关系及各自对应的热升级命令,构建第二脚本数据。
具体而言,数据依赖关系对应的数据依赖方向可以指示“第一内核子系统被其他子系统依赖”或指示“第一内核子系统依赖于其他子系统”。第一内核子系统被其他子系统依赖可以理解为其他子系统的功能需要依赖第一内核子系统提供数据支持才能实现。第一内核子系统依赖于其他子系统可以理解为第一内核子系统的功能需要依赖其他子系统提供数据支持才能实现。
在本实施例中,根据数据依赖方向,确定各个数据依赖关系进行热升级所需的热升级命令。热升级命令用于解除原有数据依赖关系并重新注册新的数据依赖关系,数据依赖方向不同,热升级命令也会有所不同,这些热升级命令可以是内核原本支持的命令,也可以是新增的命令,对此不做限定。例如,若数据依赖方向指示“第一内核子系统依赖于其他子系统”,则热升级命令用于解除第一内核子系统在热升级前向内核源文件中其他子系统注册的原有数据依赖关系,并向其他子系统或内核模块重新注册新的数据依赖关系。若数据依赖关系对应的数据依赖方向指示“第一内核子系统依赖于其他子系统”,热升级命令用于解除内核源文件中其他子系统向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
可以理解的是,在将各个数据依赖关系进行分类时,将数据依赖方向指示“第一内核子系统依赖于其他子系统”的数据依赖关系划分为被第一内核子系统依赖的第一类数据依赖关系;将数据依赖方向指示“第一内核子系统被其他子系统依赖”的数据依赖关系划分为依赖第一内核子系统的第二类数据依赖关系。
在本实施例中,构建的第二脚本数据可以包括第一类数据依赖关系及各自对应的热升级命令和第二类数据依赖关系及各自对应的热升级命令。这样,运行第二脚本数据,可以根据各个数据依赖关系各自热升级命令对各个数据依赖关系进行热升级。
基于上述操作,在内核的运行过程中,允许对第一内核子系统进行热升级。具体地,用户可以通过命令窗口或其它方式发出针对第一内核子系统的热升级命令。该热升级命令是新增的命令,并不限定热升级命令的格式,该热升级命令指向上文中的热升级脚本文件。基于此,可接收针对第一内核子系统的热升级指令,并根据热升级脚本文件,对第一内核子系统的当前函数代码和至少一个数据依赖关系分别进行热升级。其中,对第一内核子系统进行热升级包括对第一内核子系统的当前源代码中的当前函数代码和至少一个数据依赖关系分别进行热升级。
可选的,在对第一内核子系统的热升级时,首先,从热升级脚本文件中,解析出用于函数代码热升级的第一脚本数据和用于数据依赖关系热升级的第二脚本数据。可选的,热升级脚本文件中可以包括用于分割或区分第一脚本数据和第二脚本数据的分隔符,基于该分割符可以从热升级脚本文件中准确解析出第一脚本数据和第二脚本数据。所述分隔符可以是符合热升级脚本文件所采用的脚本语言要求的任何具有分割作用的符号,例如“***”、“///”等。
在本实施例中,对第一内核子系统的热升级时,执行第一脚本数据,以根据函数代码升级数据对第一内核子系统的当前源代码中的当前函数代码进行热升级,简称为第一内核子系统的当前函数代码的热升级。关于第一内核子系统的当前函数代码的热升级过程可以采用但不限于下述两种实施方式:
在一可选实施例A1中,在进行第一内核子系统的函数代码热升级时,可以执行第一脚本数据,从函数代码升级数据中获取与接口函数相关的函数代码升级数据和与内部函数相关的函数代码升级数据;根据与接口函数相关的函数代码升级数据,对第一内核子系统中的当前接口函数执行升级操作;根据与内部函数相关的函数代码升级数据,对第一内核子系统中的当前内部函数执行升级操作;其中,第一内核子系统升级后的接口函数用于实现外部函数与第一内核子系统升级后的内部函数之间的调用。
可以理解的是,与接口函数相关的函数代码升级数据例如包括但不限于:新增的接口函数、更新的接口函数等等。相对于升级前的源代码,第一内核子系统升级后的源代码中可能会出现新增的接口函数和更新的接口函数,更新的接口函数是指对升级前的源代码中接口函数进行修改得到的。
与内部函数相关的函数代码升级数据例如包括但不限于:新增的内部函数、和更新的内部函数等等。可以理解的是,相对于升级前的源代码,第一内核子系统升级后的源代码中可能会出现新增的内部函数或更新的内部函数,更新的内部函数指对升级前的源代码中内部函数进行修改得到的。
在对接口函数进行热升级之前,还包括:获取第一内核子系统中当前接口函数所在调用路径上的多个函数以及多个函数所在进程的进程描述符;根据多个函数所在进程的进程描述符,检测多个函数中是否存在具有设定行为的函数;在多个函数中不存在具有设定行为的函数的情况下,确定第一内核子系统的栈是安全的,在栈安全的情况下,执行根据函数代码升级数据中的接口函数,对第一内核子系统中的当前接口函数执行替换操作的操作。
在一可选实施例A1中,在进行第一子系统的当前函数代码热升级时,可以执行第一脚本数据,从函数代码升级数据中获取升级后的接口函数和升级后的内部函数,升级后的接口函数用于实现外部函数与升级后的内部函数之间的调用;然后,利用升级后的接口函数,替换第一内核子系统的当前函数代码中待升级的接口函数,以完成当前函数代码中接口函数的热升级;然后,由于升级后的接口函数用于实现外部函数与升级后的内部函数之间的调用,这样在升级后的接口函数被外部函数调用时,会自动调用升级后的内部函数,完成当前函数代码中内部函数的热升级,最终完成当前函数代码的整体热升级。
在本实施例中,对第一内核子系统的热升级时,还执行第二脚本数据,以对第一内核子系统的至少一个数据依赖关系进行热升级。
可选地,在进行数据依赖关系升级时,可以执行第二脚本数据,获取第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令;根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系。
在一可选的实现方式中,若第一内核子系统的各个数据依赖关系划分为第一类数据依赖关系和第二类数据依赖关系,则进行数据依赖关系升级时,可以执行第二脚本数据,获取被第一内核子系统依赖的第一类数据依赖关系和依赖于第一内核子系统的第二类数据依赖关系;对于第一类数据依赖关系,执行对应热升级命令,以解除第一内核子系统在热升级前向内核源文件中其他子系统注册的原有数据依赖关系,并向其他子系统或内核模块重新注册新的数据依赖关系;对于第二类数据依赖关系,执行对应热升级命令,以解除内核源文件中其他子系统向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
在本实施例中,第一内核子系统实现为eBPF子系统,如图1b所示,eBPF子系统至少依赖于Linux内核中的文件管理子系统、网络管理子系统、内核模块管理子系统、调度子系统、内核诊断子系统、控制组群(control groups,cgroup)子系统、内存管理子系统等各种其他子系统。在这些依赖关系中,一些是数据依赖关系,一些是函数调用关系。例如,eBPF子系统与文件管理子系统、网络管理子系统以及内核模块管理子系统之间存在数据依赖关系;eBPF子系统与网络管理子系统、调度子系统、内核诊断子系统、cgroup子系统以及内存管理子系统之间存在函数调用关系。基于此,对于第一类数据依赖关系,执行对应热升级命令,以解除eBPF子系统在热升级前向内核源文件中其他子系统注册的原有数据依赖关系,并向其他子系统或内核模块重新注册新的数据依赖关系时,可以包括以下至少一种:
第一种:执行与文件管理子系统对应的热升级命令,以解除eBPF子系统在热升级前向文件管理子系统注册的原有数据依赖关系,并向文件管理子系统重新注册新的数据依赖关系。
在一些可选的实施例中,与文件管理子系统对应的热升级命令可能包括文件系统的删除命令和注册命令,则执行文件系统的删除命令,以删除eBPF子系统在热升级前向文件管理子系统注册的原有文件系统bpffs;执行文件系统的注册命令,以向文件管理子系统重新注册新的文件系统bpffs。
具体而言,文件管理子系统(file system,简称fs)下包括多个文件系统,文件管理子系统例如bpffs文件系统、sysfs文件系统、procfs文件系统等十多个文件系统。
举例说明:bpffs文件系统也称作BPF(Berkeley Packet Filter,伯克利包过滤器)文件系统,用于在Linux内核中运行高级网络过滤和数据包处理程序。sysfs文件系统是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用;procfs文件系统是一个基于内存的文件系统,它的作用是记录进程的相关信息。
在一些可选实施例中,与文件管理子系统对应的热升级命令可能包括挂载点的删除命令和创建命令,则执行挂载点的删除命令,以删除文件管理子系统中用于挂载原有文件系统的原有挂载点路径;执行挂载点的创建命令,以向文件管理子系统重新创建用于挂载新的文件系统的挂载点路径。
具体而言,用户通过挂载点路径来访问文件系统bpffs的。当注册新的文件系统bpffs后,需要为该新的文件系统bpffs创建新的挂载点路径,例如/sys/fs/bpf。
在一些可选的实施例中,与文件管理子系统对应的热升级命令可能包括BTF路径的删除命令和创建命令,则执行BTF路径的删除命令,以删除eBPF子系统在热升级前向文件管理子系统中注册的原有BTF文件路径;执行BTF路径的创建命令,以向文件管理子系统重新创建与热升级后的eBPF子系统适配的新的BTF文件路径。
具体而言,BTF文件是对外提供内核的BTF信息的文件,BTF是编码BPF程序和map结构等相关的调试信息的元数据格式。当eBPF子系统由于升级引入新特性后,BTF信也会相应发生变化,移除旧的BTF文件路径(也即原有BTF文件路径)并创建新的BTF文件路径,例如/sys/kernel/btf/vmlinux。
第二种:执行与网络管理子系统对应的热升级命令,以解除eBPF子系统在热升级前向网络管理子系统注册的原有数据依赖关系,并向网络管理子系统重新注册新的数据依赖关系。
在一些可选实施例中,eBPF子系统与网络管理子系统的网络命名空间存在挂载关系。基于此,与网络管理子系统对应的热升级命令包括网络命名空间的卸载命令和网络命名空间的挂载命令,则执行网络命名空间的卸载命令,以将eBPF子系统在热升级前的函数代码从网络管理子系统所管理的网络命名空间中删除;执行网络命名空间的挂载命令,以在网络命名空间中重新挂载eBPF子系统在热升级后的函数代码。
在一些可选实施例中,eBPF子系统与网络管理子系统存在与网络设备相关的事件通知回调关系。基于此,与网络管理子系统对应的热升级命令包括回调接口的第一删除命令和回调接口的第一注册命令,则执行回调接口的第一删除命令,以删除eBPF子系统在热升级前向网络管理子系统注册的用于网络设备事件通知的原有回调接口;执行回调接口的第一注册命令,以向网络管理子系统重新注册用于网络设备事件通知的新的回调接口。
在一些可选的实施例中,eBPF子系统与网络管理子系统存在与数据包处理相关的回调关系。基于此,与网络管理子系统对应的热升级命令包括回调接口的第二删除命令和回调接口的第二注册命令,则执行回调接口的第二删除命令,以删除eBPF子系统在热升级前向网络管理子系统注册的用于数据包处理的原有回调接口;执行回调接口的第二注册命令,以向网络管理子系统重新注册用于数据包处理的新的回调接口。
网络管理子系统可提供多种不同的数据包传输协议,不同的数据包传输协议例如包括但不限于:轻量级的隧道协议(light weight tunnels,lwtunnel)和基于传输控制协议(Transmission Control Protocol,TCP)的上层协议(Upper Layer Protocol,ULP)。基于此,eBPF子系统可以向网络管理子系统中的lwtunnel接口注册用于对lwtunnel接口接收到的数据包进行处理的回调接口;相应地,对应的热升级命令包括回调接口的第二删除命令和回调接口的第二注册命令,则执行回调接口的第二删除命令,以删除eBPF子系统在热升级前向网络管理子系统中的lwtunnel接口注册的用于数据包处理的原有回调接口;执行回调接口的第二注册命令,以向网络管理子系统中的lwtunnel接口重新注册用于数据包处理的新的回调接口。和/或,eBPF子系统向网络管理子系统中的TCP ULP接口注册用于对TCPULP接口接收到的数据包进行处理的回调接口;相应地,对应的热升级命令包括回调接口的第二删除命令和回调接口的第二注册命令,则执行回调接口的第二删除命令,以删除eBPF子系统在热升级前向网络管理子系统中的TCP ULP接口注册的用于数据包处理的原有回调接口;执行回调接口的第二注册命令,以向网络管理子系统中的TCP ULP接口重新注册用于数据包处理的新的回调接口。
第三种:执行与内核模块管理子系统对应的热升级命令,以解除eBPF子系统在热升级前向内核模块管理子系统注册的原有数据依赖关系,并向内核模块管理子系统重新注册新的数据依赖关系。
在一些可选的实施例中,与内核模块管理子系统对应的热升级命令包括事件通知的删除命令和事件通知的注册命令,则执行事件通知的删除命令,以删除eBPF子系统在热升级前向内核模块管理子系统注册的原始事件通知消息;执行事件通知的注册命令,以向内核模块管理子系统重新注册新的事件通知消息。
具体而言,事件通知信息可以用于对任何事件进行通知,任何事件例如包括但不限于:文件管理子系统、网络管理子系统、内核模块管理子系统等各种子系统的安装事件或卸载事件。原始事件通知消息是热升级之前的旧的事件通知消息;新的事件通知消息和原始事件通知消息关注的事件可能相同或不同。
在本实施例中,若第一内核子系统为eBPF子系统,eBPF子系统被文件管理子系统、网络管理子系统、内核模块管理子系统等其他子系统等依赖,则对于第二类数据依赖关系,执行对应热升级命令,以解除内核源文件中其他子系统向eBPF子系统注册的原有数据依赖关系,并重新向热升级后的eBPF子系统注册新的数据依赖关系。
示例性的,eBPF子系统被网络管理子系统依赖,则执行与网络管理子系统对应的热升级命令,以解除网络管理子系统在热升级前向eBPF子系统注册的原有数据依赖关系,并重新向热升级后的eBPF子系统注册新的数据依赖关系。
在一些可选的实施例中,与网络管理子系统对应的热升级命令包括迭代器的删除命令和迭代器的注册命令,则执行迭代器的删除命令,以删除网络管理子系统在热升级前向eBPF子系统注册的至少一种原有迭代器;执行迭代器的注册命令,重新向热升级后的eBPF子系统注册至少一种新的迭代器。
可选地,向eBPF子系统注册的至少一种迭代器例如包括但不限于:eBPF map迭代器、eBPF程序迭代器、TCP/UDP(User Data Protocol,用户数据报协议)网络数据包迭代器、IPV6(Internet Protocol Version 6,互联网协议第6版)路由迭代器。eBPF map迭代器是与eBPF map相关的迭代器,eBPF map是一个通用的数据结构,存储不同类型的数据,提供了用户态和内核态数据交互、数据存储、多程序共享数据等功能;eBPF程序迭代器是与eBPF程序相关的迭代器。
本申请实施例提供的技术方案,针对需要进行热升级的内核子系统,首先,获取对内核子系统的当前源代码进行升级的函数代码升级数据,以及识别内核子系统的至少一个数据依赖关系;接着,构建对内核子系统进行热升级所需的热升级脚本文件;最后,在内核的运行过程中,响应于内核子系统的热升级指令,利用热升级脚本文件对内核子系统的函数代码和数据依赖关系分别进行热升级。由此,在内核不停机的情况下,实现了内核子系统的独立热升级,为用户定制化内核子系统的新特性提供了便利。另外,由于不需要对整个内核进行升级,也可以避免因为子系统升级而升级整个内核所引发的各种不确定性风险。
图2为本申请实施例提供的另一种内核子系统热升级方法的流程图。参见图2,该方法可以包括以下步骤:
201、在内核运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件。
202、根据热升级脚本文件,对第一内核子系统的当前源代码中的当前函数代码和至少一个数据依赖关系分别进行热升级。
其中,热升级脚本文件是第一内核子系统的函数代码升级数据和至少一个数据依赖关系构建得到,函数代码升级数据是对第一内核子系统的当前源代码进行升级得到。
在本实施例中,并未限定对第一内核子系统的当前源代码进行升级的实施方式,可以采用前述实施例提供的方式,但并不限于此。关于该方法实施例中各步骤的实现方式可以参见前述实施例的相关描述,在此不再赘述。
本申请实施例提供的技术方案,在内核的运行过程中,响应于内核子系统的热升级指令,利用热升级脚本文件对内核子系统的函数代码和数据依赖关系分别进行热升级。由此,在内核不停机的情况下,实现了内核子系统的独立热升级,为用户定制化内核子系统的新特性提供了便利。另外,由于不需要对整个内核进行升级,也可以避免因为子系统升级而升级整个内核所引发的各种不确定性风险。
图3为本申请实施例提供的另一种内核子系统热升级方法的流程图。参见图3,该方法可以包括以下步骤:
301、在内核运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件。
302、根据热升级脚本文件,对第一内核子系统的至少一个数据依赖关系分别进行热升级。
其中,热升级脚本文件是第一内核子系统的至少一个数据依赖关系构建得到,第一内核子系统的至少一个数据依赖关系是基于第一内核子系统的初始化函数和/或调试结构识别出的。
进一步可选的,根据热升级脚本文件,对第一内核子系统的至少一个数据依赖关系进行热升级,包括:执行热升级脚本文件,获取第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令;根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系。
关于该方法实施例中各步骤的实现方式可以参见前述实施例的相关描述,在此不再赘述。
本申请实施例提供的技术方案,在内核的运行过程中,响应于内核子系统的热升级指令,利用热升级脚本文件对内核子系统的数据依赖关系进行热升级。由此,在内核不停机的情况下,实现了内核子系统中数据依赖关系的独立热升级,为用户定制化内核子系统的新特性提供了便利。
图4为本申请实施例提供的一种内核子系统热升级装置的结构示意图。参见图4,该装置可以包括:
代码升级处理模块41,用于基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码,并对第一内核子系统的当前源代码进行升级以得到函数代码升级数据;
数据依赖处理模块42,用于基于第一内核子系统的初始化函数和/或调试结果,识别第一内核子系统的至少一个数据依赖关系;
脚本文件构建模块43,用于根据函数代码升级数据和至少一个数据依赖关系,构建用于针对第一内核子系统进行热升级所需的热升级脚本文件;
命令接收模块44,用于在内核的运行过程中,接收针对第一内核子系统的热升级指令,热升级指令指向热升级脚本文件;
热升级模块45,用于根据热升级脚本文件,对第一内核子系统的当前源代码中的当前函数代码和至少一个数据依赖关系分别进行热升级。
进一步可选的,热升级模块45具体用于:从热升级脚本文件中,解析出用于函数代码热升级的第一脚本数据和用于数据依赖关系热升级的第二脚本数据;执行第一脚本数据,以根据函数代码升级数据对第一内核子系统的当前源代码中的当前函数代码进行热升级;执行第二脚本数据,以对第一内核子系统的至少一个数据依赖关系进行热升级。
进一步可选的,热升级模块45对第一内核子系统的至少一个数据依赖关系进行热升级时,具体用于:执行第二脚本数据,获取第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令;根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系。
进一步可选的,热升级模块45执行第二脚本数据,获取第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令时,具体用于:
执行第二脚本数据,获取被第一内核子系统依赖的第一类数据依赖关系和依赖于第一内核子系统的第二类数据依赖关系;
相应地,热升级模块45根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系时,具体用于:
对于第一类数据依赖关系,执行对应热升级命令,以解除第一内核子系统在热升级前向内核源文件中其他子系统注册的原有数据依赖关系,并向其他子系统或内核模块重新注册新的数据依赖关系;对于第二类数据依赖关系,执行对应热升级命令,以解除内核源文件中其他子系统向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
进一步可选的,第一内核子系统为扩展的伯克利包过滤器eBPF子系统。
进一步可选的,对于第一类数据依赖关系,执行对应热升级命令,以解除第一内核子系统在热升级前向内核源文件中其他子系统注册的原有数据依赖关系,并向其他子系统或内核模块重新注册新的数据依赖关系,包括以下至少一种:
执行与文件管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向文件管理子系统注册的原有数据依赖关系,并向文件管理子系统重新注册新的数据依赖关系;
执行与网络管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向网络管理子系统注册的原有数据依赖关系,并向网络管理子系统重新注册新的数据依赖关系;
执行与内核模块管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向内核模块管理子系统注册的原有数据依赖关系,并向内核模块管理子系统重新注册新的数据依赖关系。
进一步可选的,执行与文件管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向文件管理子系统注册的原有数据依赖关系,并向文件管理子系统重新注册新的数据依赖关系,包括以下至少一种:
执行文件系统的删除命令,以删除第一内核子系统在热升级前向文件管理子系统注册的原有文件系统bpffs;执行文件系统的注册命令,以向文件管理子系统重新注册新的文件系统bpffs;
执行挂载点的删除命令,以删除文件管理子系统中用于挂载原有文件系统的原有挂载点路径;执行挂载点的创建命令,以向文件管理子系统重新创建用于挂载新的文件系统的挂载点路径;
执行BTF路径的删除命令,以删除第一内核子系统在热升级前向文件管理子系统中注册的原有BTF文件路径;执行BTF路径的创建命令,以向文件管理子系统重新创建与热升级后的第一内核子系统适配的新的BTF文件路径。
进一步可选的,执行与网络管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向网络管理子系统注册的原有数据依赖关系,并向网络管理子系统重新注册新的数据依赖关系,包括以下至少一种:
执行网络命名空间的卸载命令,以将第一内核子系统在热升级前的函数代码从网络管理子系统所管理的网络命名空间中删除;执行网络命名空间的挂载命令,以在网络命名空间中重新挂载第一内核子系统在热升级后的函数代码;
执行回调接口的第一删除命令,以删除第一内核子系统在热升级前向网络管理子系统注册的用于网络设备事件通知的原有回调接口;执行回调接口的第一注册命令,以向网络管理子系统重新注册用于网络设备事件通知的新的回调接口;
执行回调接口的第二删除命令,以删除第一内核子系统在热升级前向网络管理子系统注册的用于数据包处理的原有回调接口;执行回调接口的第二注册命令,以向网络管理子系统重新注册用于数据包处理的新的回调接口。
进一步可选的,执行与内核模块管理子系统对应的热升级命令,以解除第一内核子系统在热升级前向内核模块管理子系统注册的原有数据依赖关系,并向内核模块管理子系统重新注册新的数据依赖关系,包括:
执行事件通知的删除命令,以删除第一内核子系统在热升级前向内核模块管理子系统注册的原始事件通知消息;执行事件通知的注册命令,以向内核模块管理子系统重新注册新的事件通知消息。
进一步可选的,对于第二类数据依赖关系,执行对应热升级命令,以解除内核源文件中其他子系统向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系,包括:
执行与网络管理子系统对应的热升级命令,以解除网络管理子系统在热升级前向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
进一步可选的,执行与网络管理子系统对应的热升级命令,以解除网络管理子系统在热升级前向第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系,包括:
执行迭代器的删除命令,以删除网络管理子系统在热升级前向第一内核子系统注册的至少一种原有迭代器;执行迭代器的注册命令,重新向热升级后的第一内核子系统注册至少一种新的迭代器。
进一步可选的,热升级模块45对第一内核子系统的当前源代码中的当前函数代码进行热升级时,具体用于:执行第一脚本数据,从函数代码升级数据中获取与接口函数相关的函数代码升级数据和与内部函数相关的函数代码升级数据;根据与接口函数相关的函数代码升级数据,对第一内核子系统中的当前接口函数执行升级操作;根据与内部函数相关的函数代码升级数据,对第一内核子系统中的当前内部函数执行升级操作;其中,第一内核子系统升级后的接口函数用于实现外部函数与第一内核子系统升级后的内部函数之间的调用。
进一步可选的,热升级模块45根据函数代码升级数据和至少一个数据依赖关系,构建用于对内核源文件中的第一内核子系统进行热升级所需的热升级脚本文件时,具体用于:针对函数代码升级数据,构建用于函数代码升级的第一脚本数据,第一脚本数据中包含第一内核子系统的函数代码升级数据;针对至少一个数据依赖关系,构建用于数据依赖关系升级的第二脚本数据,第二脚本数据中包含各个数据依赖关系及其对应的数据依赖方向和热升级命令。
进一步可选的,热升级模块45针对至少一个数据依赖关系,构建用于数据依赖关系升级的第二脚本数据时,具体用于:分析各个数据依赖关系对应的数据依赖方向,并根据数据依赖方向,确定各个数据依赖关系进行热升级所需的热升级命令;根据各个数据依赖关系对应的数据依赖方向,将各个数据依赖关系分类为被第一内核子系统依赖的第一类数据依赖关系和依赖第一内核子系统的第二类数据依赖关系;根据第一类数据依赖关系及各自对应的热升级命令和第二类数据依赖关系及各自对应的热升级命令,构建第二脚本数据。
进一步可选的,代码升级处理模块41基于与第一内核子系统适配的边界配置信息,从内核源文件中提取第一内核子系统的当前源代码时,具体用于:基于边界配置信息,从内核源文件中获取同时与包含第一内核子系统在内的至少两个内核子系统存在关联关系的边界元素;根据边界元素,从内核源文件中提取第一内核子系统的当前源代码。
图4所示的装置可以执行图1a所示实施例所示的方法,其实现原理和技术效果不再赘述。对于上述实施例中的图4所示的装置其中各个模块、单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤401至步骤403的执行主体可以为设备A;又比如,步骤401和402的执行主体可以为设备A,步骤403的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如401、402等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图5为本申请实施例提供的一种电子设备的结构示意图。如图5所示,该电子设备包括:存储器51和处理器52;
存储器51,用于存储计算机程序,并可被配置为存储其它各种数据以支持在计算平台上的操作。这些数据的示例包括用于在计算平台上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器51可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random-AccessMemory,SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable read only memory,EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM),可编程只读存储器(Programmable read-only memory,PROM),只读存储器(Read-Only Memory,ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器52,与存储器51耦合,用于执行存储器51中的计算机程序,以用于:执行内核子系统热升级方法中的步骤。
进一步,如图5所示,该电子设备还包括:通信组件53、显示器54、电源组件55、音频组件56等其它组件。图5中仅示意性给出部分组件,并不意味着电子设备只包括图5所示组件。另外,图5中虚线框内的组件为可选组件,而非必选组件,具体可视电子设备的产品形态而定。本实施例的电子设备可以实现为台式电脑、笔记本电脑、智能手机或IOT(物联网,Internet of things)设备等终端设备,也可以是常规服务器、云服务器或服务器阵列等服务端设备。若本实施例的电子设备实现为台式电脑、笔记本电脑、智能手机等终端设备,可以包含图5中虚线框内的组件;若本实施例的电子设备实现为常规服务器、云服务器或服务器阵列等服务端设备,则可以不包含图5中虚线框内的组件。
关于处理器执行各动作的详细实施过程可参见前述方法实施例或设备实施例中的相关描述,在此不再赘述。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由电子设备执行的各步骤。
相应地,本申请实施例还提供一种计算机程序产品,包括计算机程序/指令,当计算机程序/指令被处理器执行时,致使处理器能够实现上述方法实施例中可由电子设备执行的各步骤。
上述通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi(WirelessFidelity,无线保真)、2G(2Generation,2代)、3G(3Generation,3代)、4G(4Generation,4代)/LTE(long Term Evolution,长期演进)、5G(5Generation,5代)等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NearField Communication,NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(Radio Frequency Identification,RFID)技术,红外数据协会(The Infrared DataAssociation,IrDA)技术,超宽带(Ultra Wide Band,UWB)技术,蓝牙(Bluetooth,BT)技术和其他技术来实现。
上述显示器包括屏幕,其屏幕可以包括液晶显示器(Liquid Crystal Display,LCD)和触摸面板(Touch Panel,TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
上述电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(microphone,MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(Central ProcessingUnit,CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变化内存(Phase Change RAM,PRAM)、静态随机存取存储器(Static Random-Access Memory,SRAM)、动态随机存取存储器(DynamicRandom Access Memory,DRAM)、其他类型的随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、电可擦除可编程只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(Digital versatile disc,DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (16)

1.一种内核子系统热升级方法,其特征在于,包括:
基于与第一内核子系统适配的边界配置信息,从内核源文件中提取所述第一内核子系统的当前源代码,并对所述第一内核子系统的当前源代码进行升级以得到函数代码升级数据;
基于所述第一内核子系统的初始化函数和/或调试结果,识别所述第一内核子系统的至少一个数据依赖关系;
根据所述函数代码升级数据和所述至少一个数据依赖关系,构建用于针对第一内核子系统进行热升级所需的热升级脚本文件;
在内核的运行过程中,接收针对所述第一内核子系统的热升级指令,所述热升级指令指向所述热升级脚本文件;
从所述热升级脚本文件中,解析出用于函数代码热升级的第一脚本数据和用于数据依赖关系热升级的第二脚本数据;
执行所述第一脚本数据,以根据所述函数代码升级数据对所述第一内核子系统的当前源代码中的当前函数代码进行热升级;
执行所述第二脚本数据,以对所述第一内核子系统的至少一个数据依赖关系进行热升级。
2.根据权利要求1所述的方法,其特征在于,执行所述第二脚本数据,以对所述第一内核子系统的至少一个数据依赖关系进行热升级,包括:
执行所述第二脚本数据,获取所述第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令;
根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系。
3.根据权利要求2所述的方法,其特征在于,执行所述第二脚本数据,获取所述第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令,包括:
执行所述第二脚本数据,获取被所述第一内核子系统依赖的第一类数据依赖关系和依赖于所述第一内核子系统的第二类数据依赖关系;
相应地,根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系,包括:
对于第一类数据依赖关系,执行对应热升级命令,以解除所述第一内核子系统在热升级前向所述内核源文件中其他子系统注册的原有数据依赖关系,并向所述其他子系统或内核模块重新注册新的数据依赖关系;
对于第二类数据依赖关系,执行对应热升级命令,以解除所述内核源文件中其他子系统向所述第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
4.根据权利要求3所述的方法,其特征在于,所述第一内核子系统为扩展的伯克利包过滤器eBPF子系统。
5.根据权利要求4所述的方法,其特征在于,对于第一类数据依赖关系,执行对应热升级命令,以解除所述第一内核子系统在热升级前向所述内核源文件中其他子系统注册的原有数据依赖关系,并向所述其他子系统或内核模块重新注册新的数据依赖关系,包括以下至少一种:
执行与文件管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述文件管理子系统注册的原有数据依赖关系,并向所述文件管理子系统重新注册新的数据依赖关系;
执行与网络管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述网络管理子系统注册的原有数据依赖关系,并向所述网络管理子系统重新注册新的数据依赖关系;
执行与内核模块管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述内核模块管理子系统注册的原有数据依赖关系,并向所述内核模块管理子系统重新注册新的数据依赖关系。
6.根据权利要求5所述的方法,其特征在于,执行与文件管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述文件管理子系统注册的原有数据依赖关系,并向所述文件管理子系统重新注册新的数据依赖关系,包括以下至少一种:
执行文件系统的删除命令,以删除所述第一内核子系统在热升级前向所述文件管理子系统注册的原有文件系统bpffs;执行文件系统的注册命令,以向所述文件管理子系统重新注册新的文件系统bpffs;
执行挂载点的删除命令,以删除所述文件管理子系统中用于挂载所述原有文件系统的原有挂载点路径;执行挂载点的创建命令,以向所述文件管理子系统重新创建用于挂载所述新的文件系统的挂载点路径;
执行BTF路径的删除命令,以删除所述第一内核子系统在热升级前向所述文件管理子系统中注册的原有BTF文件路径;执行BTF路径的创建命令,以向所述文件管理子系统重新创建与热升级后的第一内核子系统适配的新的BTF文件路径。
7.根据权利要求5所述的方法,其特征在于,执行与网络管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述网络管理子系统注册的原有数据依赖关系,并向所述网络管理子系统重新注册新的数据依赖关系,包括以下至少一种:
执行网络命名空间的卸载命令,以将所述第一内核子系统在热升级前的函数代码从所述网络管理子系统所管理的网络命名空间中删除;执行网络命名空间的挂载命令,以在所述网络命名空间中重新挂载所述第一内核子系统在热升级后的函数代码;
执行回调接口的第一删除命令,以删除所述第一内核子系统在热升级前向所述网络管理子系统注册的用于网络设备事件通知的原有回调接口;执行回调接口的第一注册命令,以向所述网络管理子系统重新注册用于网络设备事件通知的新的回调接口;
执行回调接口的第二删除命令,以删除所述第一内核子系统在热升级前向所述网络管理子系统注册的用于数据包处理的原有回调接口;执行回调接口的第二注册命令,以向所述网络管理子系统重新注册用于数据包处理的新的回调接口。
8.根据权利要求5所述的方法,其特征在于,执行与内核模块管理子系统对应的热升级命令,以解除所述第一内核子系统在热升级前向所述内核模块管理子系统注册的原有数据依赖关系,并向所述内核模块管理子系统重新注册新的数据依赖关系,包括:
执行事件通知的删除命令,以删除所述第一内核子系统在热升级前向所述内核模块管理子系统注册的原始事件通知消息;执行事件通知的注册命令,以向所述内核模块管理子系统重新注册新的事件通知消息。
9.根据权利要求4所述的方法,其特征在于,对于第二类数据依赖关系,执行对应热升级命令,以解除所述内核源文件中其他子系统向所述第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系,包括:
执行与网络管理子系统对应的热升级命令,以解除所述网络管理子系统在热升级前向所述第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系。
10.根据权利要求9所述的方法,其特征在于,执行与网络管理子系统对应的热升级命令,以解除所述网络管理子系统在热升级前向所述第一内核子系统注册的原有数据依赖关系,并重新向热升级后的第一内核子系统注册新的数据依赖关系,包括:
执行迭代器的删除命令,以删除所述网络管理子系统在热升级前向所述第一内核子系统注册的至少一种原有迭代器;执行迭代器的注册命令,重新向热升级后的第一内核子系统注册至少一种新的迭代器。
11.根据权利要求1所述的方法,其特征在于,执行所述第一脚本数据,以根据所述函数代码升级数据对所述第一内核子系统的当前源代码中的当前函数代码进行热升级,包括:
执行所述第一脚本数据,从所述函数代码升级数据中获取与接口函数相关的函数代码升级数据和与内部函数相关的函数代码升级数据;
根据与接口函数相关的函数代码升级数据,对所述第一内核子系统中的当前接口函数执行升级操作;
根据与内部函数相关的函数代码升级数据,对所述第一内核子系统中的当前内部函数执行升级操作;
其中,所述第一内核子系统升级后的接口函数用于实现外部函数与所述第一内核子系统升级后的内部函数之间的调用。
12.根据权利要求1-11任一项所述的方法,其特征在于,根据所述函数代码升级数据和至少一个数据依赖关系,构建针对第一内核子系统进行热升级所需的热升级脚本文件,包括:
针对所述函数代码升级数据,构建用于函数代码升级的第一脚本数据,所述第一脚本数据中包含所述第一内核子系统的函数代码升级数据;
针对所述至少一个数据依赖关系,构建用于数据依赖关系升级的第二脚本数据,所述第二脚本数据中包含各个数据依赖关系及其对应的数据依赖方向和热升级命令。
13.一种内核子系统热升级方法,其特征在于,包括:
在内核运行过程中,接收针对内核源文件第一内核子系统的热升级指令,所述热升级指令指向热升级脚本文件;
从所述热升级脚本文件中,解析出用于函数代码热升级的第一脚本数据和用于数据依赖关系热升级的第二脚本数据;
执行所述第一脚本数据,以根据所述函数代码升级数据对所述第一内核子系统的当前源代码中的当前函数代码进行热升级;
执行所述第二脚本数据,以对所述第一内核子系统的至少一个数据依赖关系进行热升级;其中,所述热升级脚本文件是所述第一内核子系统的函数代码升级数据和所述至少一个数据依赖关系构建得到,所述函数代码升级数据是对所述第一内核子系统的当前源代码进行升级得到;
其中,所述函数代码升级数据的获得方式为:基于与第一内核子系统适配的边界配置信息,从内核源文件中提取所述第一内核子系统的当前源代码,并对所述第一内核子系统的当前源代码进行升级以得到函数代码升级数据。
14.一种内核子系统热升级方法,其特征在于,包括:
在内核运行过程中,接收针对第一内核子系统的热升级指令,所述热升级指令指向热升级脚本文件;
根据所述热升级脚本文件,对所述第一内核子系统的至少一个数据依赖关系分别进行热升级,所述数据依赖关系的数据依赖方向指示所述第一内核子系统被所述内核中的其他子系统依赖或指示所述第一内核子系统依赖于所述其他子系统;
其中,所述热升级脚本文件是所述第一内核子系统的所述至少一个数据依赖关系构建得到,所述第一内核子系统的至少一个数据依赖关系是基于所述第一内核子系统的初始化函数和/或调试结构识别出的;
其中,对所述第一内核子系统的至少一个数据依赖关系进行热升级,包括:
执行所述热升级脚本文件,获取所述第一内核子系统的各个数据依赖关系及其对应的数据依赖方向和热升级命令;
根据各个数据依赖关系对应的数据依赖方向执行对应的热升级命令,以解除原有数据依赖关系并重新注册新的数据依赖关系。
15.一种电子设备,其特征在于,包括:存储器和处理器;所述存储器中存储有计算机程序,所述处理器,与所述存储器耦合,用于执行所述计算机程序,以实现权利要求1-14中任一项所述方法中的步骤。
16.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器实现权利要求1-14中任一项所述方法中的步骤。
CN202311268459.5A 2023-09-28 2023-09-28 内核子系统热升级方法、设备及存储介质 Active CN116991449B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311268459.5A CN116991449B (zh) 2023-09-28 2023-09-28 内核子系统热升级方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311268459.5A CN116991449B (zh) 2023-09-28 2023-09-28 内核子系统热升级方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116991449A CN116991449A (zh) 2023-11-03
CN116991449B true CN116991449B (zh) 2024-03-08

Family

ID=88528772

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311268459.5A Active CN116991449B (zh) 2023-09-28 2023-09-28 内核子系统热升级方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116991449B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108121574A (zh) * 2016-11-29 2018-06-05 阿里巴巴集团控股有限公司 一种内核模块的热升级方法、装置及虚拟机系统
CN110569106A (zh) * 2019-08-27 2019-12-13 Oppo广东移动通信有限公司 代码加载方法、装置、电子设备及计算机可读介质
CN110874226A (zh) * 2018-08-29 2020-03-10 山东华软金盾软件股份有限公司 一种android系统功能升级的方法
US10747516B1 (en) * 2019-03-21 2020-08-18 Xilinx, Inc. Applications for hardware accelerators in computing systems
WO2021234267A1 (fr) * 2020-05-20 2021-11-25 Orange Procede de securisation d'un appel systeme, procede de mise en place d'une politique de securite associee et dispositifs mettant en oeuvre ces procedes
CN114416148A (zh) * 2021-12-07 2022-04-29 深信服科技股份有限公司 一种虚拟机管理程序热升级方法、装置及存储介质
CN115408038A (zh) * 2022-08-29 2022-11-29 杭州朗和科技有限公司 用户态协议栈的热升级方法、装置、存储介质及设备
CN116028084A (zh) * 2023-01-10 2023-04-28 济南浪潮数据技术有限公司 一种基于OpenStack云平台跨版本热升级的方法、系统及终端

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108121574A (zh) * 2016-11-29 2018-06-05 阿里巴巴集团控股有限公司 一种内核模块的热升级方法、装置及虚拟机系统
CN110874226A (zh) * 2018-08-29 2020-03-10 山东华软金盾软件股份有限公司 一种android系统功能升级的方法
US10747516B1 (en) * 2019-03-21 2020-08-18 Xilinx, Inc. Applications for hardware accelerators in computing systems
CN110569106A (zh) * 2019-08-27 2019-12-13 Oppo广东移动通信有限公司 代码加载方法、装置、电子设备及计算机可读介质
WO2021234267A1 (fr) * 2020-05-20 2021-11-25 Orange Procede de securisation d'un appel systeme, procede de mise en place d'une politique de securite associee et dispositifs mettant en oeuvre ces procedes
CN114416148A (zh) * 2021-12-07 2022-04-29 深信服科技股份有限公司 一种虚拟机管理程序热升级方法、装置及存储介质
CN115408038A (zh) * 2022-08-29 2022-11-29 杭州朗和科技有限公司 用户态协议栈的热升级方法、装置、存储介质及设备
CN116028084A (zh) * 2023-01-10 2023-04-28 济南浪潮数据技术有限公司 一种基于OpenStack云平台跨版本热升级的方法、系统及终端

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Linux下Proc文件系统的编程剖析;郭松;谢维波;;华侨大学学报(自然科学版)(05);全文 *

Also Published As

Publication number Publication date
CN116991449A (zh) 2023-11-03

Similar Documents

Publication Publication Date Title
CN104885055B (zh) 一种应用数据同步的方法及装置
CN109918166B (zh) 小程序处理方法、装置及电子设备
CN107679113B (zh) 轻应用的获取方法、设备及电子设备
CN111897740B (zh) 用户界面的测试方法、装置、电子设备及计算机可读介质
CN110851204B (zh) 应用启动的方法及装置、应用打包的方法及装置
KR101614070B1 (ko) 무선 휴대 장치 부팅 방법 및 무선 휴대 장치
EP3657326B1 (en) Broadcast event processing method and device
WO2023061286A1 (zh) 操作系统启动方法、装置和电子设备
CN106201610A (zh) Web应用访问终端原生功能的方法及装置
CN111198859A (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN111611145A (zh) 崩溃信息收集方法、装置、存储介质及电子设备
CN114840214A (zh) 程序编译和启动方法、设备及存储介质
CN111158987A (zh) 微服务架构的健康检查方法及装置
CN112181467B (zh) 终端的存储器固件升级方法、装置、终端和存储介质
CN111488286B (zh) 一种Android模块独立开发的方法及装置
CN113448690A (zh) 监测方法及装置
CN116382791B (zh) 一种配置文件的保护方法及电子设备
CN116991449B (zh) 内核子系统热升级方法、设备及存储介质
CN110610080B (zh) 应用的隔离实现方法、移动终端、计算机设备和存储介质
CN112114804A (zh) 应用程序的生成方法、装置及系统
CN115373998A (zh) 应用程序优化方法、装置、设备及介质
CN116048609A (zh) 配置文件更新方法、装置、计算机设备和存储介质
CN112631609B (zh) 编译方法、装置、终端及存储介质
CN112346761B (zh) 前端资源上线方法、设备、系统及存储介质
CN114168183A (zh) 前端资源信息处理方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant