CN117632533A - 一种中断消息处理方法及装置 - Google Patents
一种中断消息处理方法及装置 Download PDFInfo
- Publication number
- CN117632533A CN117632533A CN202211003207.5A CN202211003207A CN117632533A CN 117632533 A CN117632533 A CN 117632533A CN 202211003207 A CN202211003207 A CN 202211003207A CN 117632533 A CN117632533 A CN 117632533A
- Authority
- CN
- China
- Prior art keywords
- message
- interrupt
- cpu
- event
- identifier
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 19
- 238000000034 method Methods 0.000 claims abstract description 102
- 238000012545 processing Methods 0.000 claims abstract description 78
- 230000002093 peripheral effect Effects 0.000 claims description 134
- 230000008569 process Effects 0.000 claims description 53
- 238000013507 mapping Methods 0.000 claims description 44
- 230000001133 acceleration Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004891 communication Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 24
- 238000006243 chemical reaction Methods 0.000 description 20
- 238000001914 filtration Methods 0.000 description 14
- 230000002618 waking effect Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Power Sources (AREA)
Abstract
本申请提供了一种中断消息处理方法及装置。第一中断控制器,用于接收第一中断消息,将第一中断消息转换为第一event消息,并将第一event消息发送至第一CPU;第一CPU,用于在用户态响应于第一event消息,从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。该方法实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
Description
技术领域
本申请设计芯片技术领域,尤其涉及一种中断消息处理方法及装置。
背景技术
中央处理器(central processing unit,CPU)的工作状态可以包括内核态和用户态,内核态是操作系统内核所运行的模式,运行在该模式的进程,可以无限制地对系统内存、外围设备(例如硬盘、网卡)等进行访问;用户态指非特权状态,运行在该状态下的进程被硬件限制,不能进行某些特权操作。
为了减少CPU的耗能问题,可以尝试使用中断来降低CPU的能耗。即在没有数据时,使得CPU处于低功耗状态。有数据时,通过中断消息来唤醒CPU,使得CPU开始处理数据。
但是,在处理中断消息时,CPU需要从用户态切换至内核态,保存CPU的上下文、切换进程等操作。之后,CPU再切换至用户态,完成数据处理的任务事项。在处理中断消息的过程中,可以看出需多次在用户态和内核态之间切换,这对时延敏感性业务,是一个很大的挑战。
发明内容
本申请提供了一种中断消息处理方法及装置,实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
第一方面,本申请提供了一种中断消息处理装置,装置包括第一CPU和第一中断控制器,第一中断控制器与第一CPU通过总线通信,其中,第一中断控制器,用于接收第一中断消息,将第一中断消息转换为第一event消息,并将第一event消息发送至第一CPU;第一CPU,用于在用户态响应于第一event消息,从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
通过该方法,实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
结合第一方面,在一种可能的实现方式中,第一event消息中携带有CPU的标识;第一CPU,具体用于在接收到第一event消息后,确认出第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
结合第一方面,在一种可能的实现方式中,第一CPU,还用于在接收到第一event消息后,确认出第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
结合第一方面,在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;第一中断控制器,还用于获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断控制器,具体用于在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息,并将第一event消息发送至第一CPU。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
结合第一方面,在一种可能的实现方式中,第一中断控制器,还用于在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,发送第一中断消息给第一CPU;第一CPU,还用于在接收到第一中断消息后,在内核态响应第一中断消息,从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
结合第一方面,在一种可能的实现方式中,第一中断控制器,还用于接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
结合第一方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
结合第一方面,在一种可能的实现方式中,第一中断控制器,具体用于在接收到第一中断消息后,从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,第一中断控制器从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
结合第一方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
结合第一方面,在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;第一中断控制器,具体用于在接收到第一中断消息后,将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,第一中断控制器可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
结合第一方面,在一种可能的实现方式中,在第一event消息中携带的消息类型为第二消息类型的情况下,第一中断控制器,还用于将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。这样,第一中断控制器还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
结合第一方面,在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
结合第一方面,在一种可能的实现方式中,装置还包括第一外设模块,其中,第一外设模块,用于在触发第一事件时,产生第一中断消息;第一外设模块,还用于向第一中断控制器发送第一中断消息;第一中断控制器,具体用于接收第一外设模块发送的第一中断消息。
结合第一方面,在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
第二方面,本申请提供了一种中断消息处理方法,方法包括:获取第一中断消息;将第一中断消息转换为第一event消息;通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
通过该方法,实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
结合第二方面,在一种可能的实现方式中,第一event消息中携带有CPU的标识;通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件,具体包括:在第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
结合第二方面,在一种可能的实现方式中,方法还包括:在第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
结合第二方面,在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;在将第一中断消息转换为第一event消息之前,方法还包括:获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断消息转换为第一event消息,具体包括:在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
结合第二方面,在一种可能的实现方式中,方法还包括:在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,通过第一中断消息控制第一CPU在内核态从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
结合第二方面,在一种可能的实现方式中,在获取到第一映射表之前,方法还包括:接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
结合第二方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
结合第二方面,在一种可能的实现方式中,将第一中断消息转换为第一event消息,具体包括:从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,第一中断控制器从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
结合第二方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
结合第二方面,在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;将第一中断消息转换为第一event消息,具体包括:将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,第一中断控制器可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
结合第二方面,在一种可能的实现方式中,在第一event消息携带的消息类型为第二消息类型的情况下,方法还包括:将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
这样,第一中断控制器还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
结合第二方面,在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
结合第二方面,在一种可能的实现方式中,获取第一中断消息,具体包括:接收并获取到第一外设模块发送的第一中断消息。
结合第二方面,在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
第三方面,本申请提供了另一种中断消息处理装置,装置包括获取单元、获取单元和处理单元。其中获取单元,用于获取第一中断消息。
转换单元,用于将第一中断消息转换为第一event消息。
处理单元,用于通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
结合第三方面,在一种可能的实现方式中,第一event消息中携带有CPU的标识。处理单元,具体用于在第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
结合第三方面,在一种可能的实现方式中,处理单元,还用于在第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
结合第三方面,在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;转换单元,具体用于在将第一中断消息转换为第一event消息之前,方法还包括:获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断消息转换为第一event消息,具体包括:在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
结合第三方面,在一种可能的实现方式中,转换单元,还用于在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,通过第一中断消息控制第一CPU在内核态从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
结合第三方面,在一种可能的实现方式中,获取单元还用于在获取到第一映射表之前,接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
结合第三方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
结合第三方面,在一种可能的实现方式中,转换单元,具体用于从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,转换单元可以从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
结合第三方面,在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
结合第三方面,在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;将第一中断消息转换为第一event消息,具体包括:将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,转换单元可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
结合第三方面,在一种可能的实现方式中,在第一event消息携带的消息类型为第二消息类型的情况下,转换单元还用于将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
这样,转换单元还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
结合第三方面,在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
结合第三方面,在一种可能的实现方式中,获取单元,具体用于接收并获取到第一外设模块发送的第一中断消息。
结合第三方面,在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
第四方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述任一方面任一可能的实现方式中提供的一种中断消息处理方法。
第五方面,本申请提供了一种计算机程序产品,当计算机程序产品在装置上运行时,使得装置执行上述任一方面任一可能的实现方式中提供的一种中断消息处理方法。
第六方面,本申请实施例提供了一种芯片,该芯片包括处理器和通信接口,所述处理器用于从该通信接口调用并运行指令,当该处理器执行所述指令时,使得该芯片执行上述任一方面任一可能的实现方式中提供的一种中断消息处理方法。
第七方面,本申请实施例提供了一种芯片系统,该芯片系统包括上述任一方面任一可能的实现方式中所述的第一CPU和第一中断控制器。所述第一CPU和第一中断控制器,用于实现上述任一方面任一可能的实现方式中提供的一种中断消息处理方法。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存一种中断消息处理方法必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
对于第二方面至第七方面的有益效果,可以参考第一方面中有益效果的描述,本申请实施例在此不再赘述。
附图说明
图1为本申请实施例提供的一种网卡通过中断消息唤醒CPU的示意图;
图2为本申请实施例提供的一种系统架构图;
图3为本申请实施例提供的一种第一CPU处理第一中断信息的示意图;
图4为本申请实施例提供的一种生成并保存中断配置信息示意图;
图5A-图5B示例性示出了一种第一中断消息的消息体和第一event消息的消息体的示意图;
图5C为本申请实施例提供的一种第一中断消息的消息体的示意图;
图5D为本申请实施例提供的一种第一event消息的消息体的示意图;
图5E为本申请实施例提供的另一种第一event消息的消息体的示意图;
图5F为本申请实施例提供的又一种第一event消息的消息体的示意图;
图5G-图5H示例性示出了又一种第一中断消息的消息体和第一event消息的消息体的示意图;
图6为本申请实施例提供的一种第一CPU执行第一中断消息的流程图;
图7为本申请实施例提供的一种中断消息处理装置结构示意图;
图8为本申请实施例提供的一种中断消息处理方法的流程示意图;
图9为本申请实施例提供的另一种中断消息处理装置的流程示意图。
具体实施方式
下面将结合附图对本申请实施例中的技术方案进行清楚、详尽地描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在介绍本申请实施例之前,首先对本申请实施例涉及的技术术语进行解释。
1、CPU的工作状态
CPU的工作状态可以分为低功耗状态和非低功耗状态。
其中,CPU处于低功耗状态时,CPU停止运行。CPU处于非低功耗状态时,CPU正在运行。这样,在CPU没有事件需处理时,CPU可以处于低功耗状态,以减少CPU的功耗。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了,在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
有两种方式使得CPU进入低功耗状态。
方式一:在CPU没有事件处理时,CPU可以运行WFE(wait for interrupt)指令,使得CPU进入低功耗状态。在CPU进入低功耗状态之后,可以通过其他处于非低功耗模式的CPU向处于低功耗状态的CPU发送event消息,唤醒CPU,使得CPU进入非低功耗状态。
方式二:在CPU没有事件处理时,CPU可以运行WFI(wait for event)指令。使得CPU进入低功耗状态。在CPU进入低功耗状态之后,在外设模块监测到有事件需处理时,外设模块产生中断消息并向CPU发送中断消息,唤醒CPU,使得CPU进入非低功耗状态。
2、CPU唤醒
为了减少CPU的功耗,在没有任务处理时,可以让CPU进入低功耗模式。CPU进入低功耗模式。若有新的任务事项需要CPU执行,此时需要唤醒CPU,让CPU从低功耗模式变为非低功耗模式。
目前有两种方式唤醒CPU。方式一:中断消息唤醒。方式二:event消息唤醒。
(1)、中断消息
中断消息是指计算机运行过程中,出现某些情况需主机干预时,计算机能自动停止正在运行的程序并转入处理新的程序,处理完毕后又返回原被暂停的程序继续运行。
中断可消息用于唤醒CPU,即使得CPU从低功耗模式变为非低功耗模式。具体的,在有新的任务事项来临时,外设模块可以向CPU发送中断消息。由于中断消息只能在操作系统内核中处理,因此CPU在接收到中断消息后,CPU需要从用户态切换至内核态。在CPU切换至内核态之后,CPU需基于中断消息确定出是哪个外设模块发送的中断消息,并将CPU上下文保存在内存中。之后,CPU再切换至用户态,执行新的任务事项。在新的任务事项执行完毕之后,CPU再陷入内核,从内存中读取CPU上下文,将CPU上下文加载在寄存器中,接着中断之前的任务事项继续运行。
(2)、event消息(特定的事件)
特定的事件也是打断CPU现有状态的一种方式。在CPU处于低功耗模式下,其他未处于低功耗模式的CPU可以运行event消息唤醒处于低功耗模式的CPU。处于低功耗模式的CPU在接收到其他未处于低功耗模式的CPU发送的event消息之后,CPU可以直接在用户态处理event消息,CPU不需陷入内核响应event消息,CPU将从低功耗模式切换为非低功耗模式。在CPU切换至非低功耗模式之后,CPU将运行event消息之后的程序。
但是其他未处于低功耗模式的CPU不知道什么时候需唤醒处于低功耗模式的CPU。因此其他未处于低功耗模式的CPU是随机向处于低功耗模式的CPU发送event消息的。当其他未处于低功耗模式的CPU向处于低功耗模式的CPU发送event消息之后,处于低功耗模式的CPU在接收到event消息后,将从低功耗模式切换为非低功耗模式。在处于低功耗模式的CPU切换为非低功耗模式后,回去查看是否有事件到来,若在一定时间内没有事件,则切换为非低功耗模式后的CPU又会再次切换至低功耗模式。
并且,其他未处于低功耗模式的CPU是通过总线发送event消息的,由于处于低功耗模式的CPU的数量可能有多个,那么多个处于低功耗模式的CPU在接收到event消息后,均会由非低功耗模式切换为低功耗模式,存在误唤醒的问题。
3、CPU上下文和切换上下文
在CPU接收到中断消息,CPU由用户态切换至内核态之后,CPU需要基于中断消息确定出该中断消息是哪个外设模块发送的。CPU还需基于中断消息暂停前一个任务,执行新的任务。并基于切换后的进程或者线程执行新的任务事项。在切换执行的任务事项的过程中,需要保存CPU上下文,从而使CPU在切换进程后能正常运行之前被暂停的进程。
CPU的上下文指的是寄存器信息和程序计数器信息,寄存器和程序计数器为CPU执行任务之前,必须依赖的环境。其中,寄存器是CPU内置的容量小、但速度极快的内存。程序计数器则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令位置。
切换上下文指的是,在CPU接收到中断消息之前,将前一个任务的寄存器信息和程序计数器信息保存起来,前一个任务的寄存器信息和程序计数器信息会被保存在内核中,然后CPU将新任务的寄存器信息和程序计数器信息加载到寄存器和程序计数器中,最后在跳转到程序计数器所指的新位置,开始执行新任务。在新任务执行完毕之后,CPU再次将前一个任务的寄存器信息和程序计数器信息加载到寄存器和程序计数器中,开始继续执行前一个任务。
快速处理数据包的开发平台和接口(data plane developent kit,DPDK)或者高性能存储开发包(storage perforance developent kit,SPDK)等高性能IO(Input/Output)软件,为了实现高性能,实现在用户态,一直占用CPU polling(轮询),CPU利用率100%。例如在外设模块(例如网卡)在没有接收到网络包时,CPU也在运行(即“空转”),这样会增加CPU的耗能。
为了实现高性能的同时降低CPU的功耗,可以使用中断的方式来降低CPU的功耗。即在没有网络包时,CPU进入低功耗(idle)状态,节省耗能。在有网络包时,网卡通过中断的方式来唤醒CPU,完成收发包的任务事项。
接下来对于外设模块(例如网卡)如何通过中断消息唤醒CPU的具体实现进行说明。
图1示出了网卡通过中断消息唤醒CPU的示意图。
S101、网卡判断是否有网络包?
若网卡判断出与网络包,则执行S105;否则,执行S102。
S102、网卡判断是否满足休眠条件?
若网卡判断出满足休眠条件,则执行S103;否则,执行S101。
示例性的,休眠条件可以是网卡在预设时间内没有接收到网络包。
S103、满足休眠条件时,网卡调用eventfd函数向CPU发送第一通知,第一通知用于指示CPU进入低功耗模式。
S104、CPU在接收到第一通知后,进入低功耗模式,低功耗模式可以是WFI模式。
在CPU进入WFI模式之后,若CPU没有接收到网卡发送的中断消息,则CPU一直处于低功耗模式。只有在CPU接收到网卡发送的中断消息之后,CPU由低功耗模式切换为非低功耗模式,并开始执行收发包任务事项。
S105、网卡向CPU发送中断消息。
网卡可以调用eventfd函数向CPU发送中断消息,中断消息用于唤醒CPU。
S106、CPU接收中断消息,从低功耗模式切换为非低功耗模式,开始处理网络包。
由于中断消息只能在内核中处理,CPU接收中断消息,首先CPU需要从用户态切换为内核态。在CPU切换至内核态之后,CPU需基于中断消息确定出是哪个外设模块发送的中断消息,例如CPU确定出是由网卡发送的中断消息。CPU还需查找到对应的进程或者线程,并运行该进程或者线程执行新的任务事项,若CPU上运行有其他的进程,CPU需要暂停运行此进程,并将此进程的运行数据保存至内存。在用户态和内核态切换过程中、进程切换过程中,CPU还需保存CPU上下文。之后,CPU再从内核态切换为用户态。在CPU切换至用户态之后,CPU开始执行收发包任务事项。
从上述分析过程可以发现,中断消息唤醒CPU的方式,由于中断仅能在操作系统内核中处理,因此CPU需要在用户态和内核态之间切换,保存CPU上下文、在内核态中进行进程切换等一些操组,导致基于中断的唤醒方案收发包时延大,有时会导致丢包,影响业务。
基于此,本申请实施例提供了一种中断处理方法,具体的,该方法包括以下步骤:
步骤一:芯片接收第一外设模块发送的第一中断消息,第一中断消息用于唤醒处于低功耗模式的第一CPU,执行第一事件。
第一外设模块的类型为以下任意一种:存储设备(例如硬盘)、网络设备(例如网卡)、图形处理器(graphic processing unit,GPU)、加速处理器(accelerated processingunits,APU)、AI加速卡网络处理器(neural processor unit,NPU)等。其中,硬盘可以是以下任意一种:固态硬盘(solid state drive,SSD)、非易失性内存主机控制器接口规范(non-volatile memory express,NVMe)等。
第一中断消息中包括以下字段:消息类型、外设模块的标识、中断信息的标识、中断信息的路由标识。其中,消息类型为第一消息类型,第一消息类型用于指示该消息为中断消息。外设模块的标识为第一外设模块,第一外设模块用于指示发送该第一中断消息的是哪一个外设模块。中断信息的标识为中断一,中断一用于指示第一中断消息的中断标识。中断信息的路由标识为第一CPU,第一CPU用户指示处理第一中断消息的CPU标识。
步骤二:在接收到第一中断消息之后,芯片基于预设的规则将第一中断消息转换为第一event消息。
第一event消息中包括以下字段:消息类型和中断信息的路由标识。其中,消息类型为第二消息类型,第二消息类型用于指示该消息为event消息。中断信息的路由标识为第一CPU,第一CPU用户指示处理第一event消息的CPU标识。第一event消息中的中断信息的路由标识是芯片从第一中断消息中获取到的。
对于预设规则的介绍,可以参考后续图5A-图5H所示的实施例,本申请实施例在此不做赘述。
可选的,在芯片接收到第一中断消息之后,在芯片基于预设的规则将第一中断消息转换为第一event消息之前,芯片还需从内存读取到中断配置信息,在中断配置信息中查找是否有第一中断消息的中断标识,若有的话,则按照预设规则,将第一中断消息转化为第一event消息。若没有的话,则芯片直接将第一中断消息发送至第一CPU。
步骤三:在芯片将第一中断消息转换为第一event消息之后,芯片将第一event消息发送至第一CPU,第一event消息用于指示唤醒处于低功耗模式的第一CPU,执行第一事件。第一CPU在接收到第一event消息之后,第一CPU不需要陷入操作系统内核响应第一event消息,可以直接从第一外设模块中读取数据,执行第一事件。
可选的,若芯片没有将第一中断消息转化为第一event消息,则芯片直接将第一event消息发送至第一CPU,在芯片接收到第一中断消息之后,第一CPU需陷入操作系统内核响应第一中断消息,执行第一事件。
通过该方法,可以使得通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,第一CPU不必陷入操作系统内核,不需要保存CPU上下文,也不需要切换上下文。一方面,芯片将第一中断消息转换为第一event消息,通过第一event消息唤醒第一CPU,第一CPU可以直接执行第一event消息对应的第一事件,不需要陷入操作系统内核去响应第一event消息,缩短了唤醒CPU的时延。另一方面,第一event消息中携带有第一CPU的标识,芯片可以通过总线将第一event消息发送至第一CPU,实现点对点唤醒CPU,解决了当前通过event消息唤醒CPU导致误唤醒其他处于低功耗的CPU的问题。
可选的,不仅限于将中断消息转换为event消息,本申请实施例也可以适用于将event消息转换为中断消息,原理类似,本申请以下实施例以如何将中断消息转换为event消息为例进行说明。
图2示例性示出了了本申请实施例提供的一种系统架构图。
为了区分访问能力,将操作系统的运行状态分为用户态和内核态,一些安全系数高的操作,例如设置时钟、清理内存等操作,需要在内核态下处理,而不能在用户态在处理。应用程序在运行过程中,会反复地在用户态和内核态之间切换。其中,处于内核态的CPU可以访问任意的数据,包括内存等数据。处于用户态的CPU只能受限的访问内存,例如不允许访问内存等数据。
其中,当CPU运行在用户态时,应用程序(例如DPDK或者SPDK)可以提供接口,配置外设模块的中断转为event。中断策略配置模块可以用于接收中断标识,该中断标识为外设模块中需转为event的中断消息的中断标识。
当CPU运行在内核态时,内核态需提供用户态配置接口,实现用户态向内核态传递外设模块中需转为event消息的中断标识。内核态具备操作和配置外设模块的能力。中断配置模块用于将外设模块中需转为event消息的中断消息进行配置,即将外设模块的中断消息转成event消息,生成中断配置信息。在一些实施例中,中断配置信息也可以被称为中断映射表(例如第一映射表),中断映射表中记载了一个或多个需转为event消息的终中断消息的中断标识。
中断配置模块,还用于将中断配置信息发送至中断控制器。
硬件层包括中断控制器、内存和第一CPU。
中断控制器,用于将中断配置信息保存在内存中。
外设模块(例如网卡)上有第一事件时,例如接收到网络包之后,外设模块向中断控制器发送第一中断消息。
中断控制器,用于在接收到发送的第一中断消息后,从内存读取到中断配置信息,在中断配置信息中查找是否有第一中断消息的中断标识,若有的话,则按照预设规则,将第一中断消息转化为第一event消息。对于预设规则的介绍,可以参考后续图5A-图5H所示的实施例,本申请实施例在此不做赘述。
中断控制器,还用于将第一event消息发送至第一CPU。
第一CPU,用于在接收到第一event消息后,基于第一CPU的状态和第一event消息中携带的CPU标识,确定出是否接收第一event消息。若第一CPU的状态为低功耗状态、且第一event消息中携带的CPU标识为第一CPU的标识,则第一CPU接收第一event消息,从低功耗状态切换为非低功耗状态,并且无需陷入操作系统内核执行第一事件。
若在中断配置信息中查找没有第一中断消息的中断标识,则第一中断消息不可以转化为第一event消息,则中断控制器直接将第一中断消息发送至第一CPU。第一CPU从低功耗状态切换为非低功耗状态,且需陷入操作系统内核、执行保存上下文、切换进程等操作执行第一事件。
接下来结合中断控制器、内存和第一CPU,对第一CPU如何处理第一中断信息的进行详细的描述。
图3示例性示出了第一CPU处理第一中断信息的示意图。
如图3所示,中断控制器包含中断接收模块和中断转换模块。第一CPU包括event消息接收模块、中断消息接收模块、event消息过滤模块、中断消息过滤模块和CPU处理核。
其中,当外设模块有第一事件需要处理时,此时需唤处于低功耗模式的第一CPU,此时外设模块向第一CPU发送第一中断消息。
中断接收模块,用于接收外设模块发送的第一中断消息。之后,中断接收模块将第一中断消息发送至中断转换模块。
中断转换模块,用于在接收到第一中断消息后,为了确定出是否需将第一中断消息转换为event消息,中断转换模块需通过总线向内存发送第一请求,第一请求用于请求获取中断配置信息。
内存,用于在接收到第一请求后,将中断配置信息发送至中断转换模块。
中断转换模块,还用于在接收到中断配置信息后,若确定出中断配置信息里记载的中断的标识包括第一中断消息的中断标识,则确定出需将第一中断消息转换为event消息。若确定出中断配置信息里记载的中断的标识不包括第一中断消息的中断标识,则确定出不用将第一中断消息转换为event消息。
中断转换模块,还用于在中断转换模块确定出需将第一中断消息转换为event消息后,基于预设的规则将第一中断消息转化为第一event消息。对于预设规则的介绍,可以参考后续图5A-图5H所示的实施例,本申请实施例在此不做赘述。
中断转换模块,还用于在将第一中断消息转化为第一event消息后,向总线发送第一event消息。
CPU可以通过总线接收第一event消息。
例如,第一CPU中的event消息接收模块,可用于通过总线接收到第一event消息。
event消息接收模块,还用于在接收到第一event消息后,将第一event消息发送至event消息过滤模块。
event消息过滤模块,可用于在接收到第一event消息后,确定出是否将第一event消息后,发送至第一CPU的CPU处理核。具体的,event消息过滤模块基于第一CPU的状态、第一event消息中携带的CPU标识,确定出是否将第一event消息发送至第一CPU的CPU处理核。若第一CPU的状态为低功耗状态,且第一event消息中携带的CPU标识为第一CPU的标识,则event消息过滤模块将第一event消息,发送至第一CPU的CPU处理核。若第一CPU的状态为非低功耗状态,和/或第一event消息中携带的CPU标识不是第一CPU的标识,则event消息过滤模块将第一event消息丢弃。
在第一CPU的状态为低功耗状态,且第一event消息中携带的CPU标识为第一CPU的标识的情况下,CPU处理核接收到event消息过滤模块发送的第一event消息。
CPU处理核,还用于在接收到第一event消息之后,第一CPU从低功耗状态切换为非低功耗状态,且无需陷入操作系统内核响应第一event消息,直接在用户态执行第一事件。
中断转换模块,还用于在中断转换模块确定出不需要将第一中断消息转换为event消息后,向总线发送第一中断消息。
CPU可以通过总线接收第一中断消息。
例如,第一CPU中的中断消息接收模块,可用于通过总线接收到第一中断消息。
中断消息接收模块,还用于在接收到第一中断消息后,将第一中断消息发送至中断消息过滤模块。
中断消息过滤模块,可用于在接收到第一中断消息后,确定出是否将第一中断消息后,发送至第一CPU的CPU处理核。具体的,中断消息过滤模块基于第一CPU的状态、第一中断消息中携带的CPU标识,确定出是否将第一中断消息发送至第一CPU的CPU处理核。若第一CPU的状态为低功耗状态,且第一中断消息中携带的CPU标识为第一CPU的标识,则中断消息过滤模块将第一中断消息,发送至第一CPU的CPU处理核。若第一CPU的状态为非低功耗状态,和/或第一中断消息中携带的CPU标识不是第一CPU的标识,则中断消息过滤模块奖第一中断消息丢弃。
在第一CPU的状态为低功耗状态,且第一中断消息中携带的CPU标识为第一CPU的标识的情况下,CPU处理核接收到中断消息过滤模块发送的第一中断消息。
CPU处理核,还用于在接收到第一中断消息之后,第一CPU从低功耗状态切换为非低功耗状态,且需陷入操作系统内核,识别到第一中断消息是哪个外设模块发送的中断,并执行保存上下文、切换进程等操作执行第一事件。
本申请实施例提供的一种中断处理方法,可以动态设置外设模块的中断是否需转换为event,并生成中断配置信息保存在内存中。其中,中断配置信息用于中断控制器判断是否需将第一中断消息转换为第一event消息。
图4示例性示出了生成并保存中断配置信息示意图。
S401、在用户态,中断控制器接收第一中断信息的中断标识。
基于业务需求,在外设模块有事件处理需唤醒CPU时,外设模块可以向CPU发送中断消息,开发人员或者用户可以选择是否将外设模块的中断消息转为event消息。
示例性的,第一外设模块有第一事件需处理时,第一外设模块可以产生第一中断消息,并将第一中断消息通过中断控制器发送至第一CPU,第一中断消息用于唤醒处于低功耗状态的第一CPU,并使得第一CPU处于非低功耗状态,陷入操作系统内核确定出第一中断消息为第一外设模块发送的中断消息,并开始执行第一事件。
为了避免得第一CPU在接收到第一中断消息,需要陷入操作系统内核处理第一中断消息,执行第一事件的时延比较久。因此开发人员或者用户可以选择将第一中断消息转为event消息。即中断控制器接收第一中断信息的中断标识。
S402、在内核态,中断控制器获取到外设模块的中断标识。
在中断控制器获取到第一中断信息的中断标识后,在内核态中,中断控制器获取到外设模块的中断标识,外设模块的中断标识用于中断控制器确定出第一中断信息的中断标识是否为有效的中断标识。
S403、中断控制器确定出第一中断信息的中断标识是否为有效的中断标识?
在中断控制器获取到外设模块的中断标识后,中断控制器需确定出第一中断信息的中断标识是否为有效的中断标识。中断控制器需确定出第一中断信息的中断标识为有效的中断标识,即确定出第一中断信息的中断标识是哪个外设模块发送的中断消息的中断标识。
在一些实施例中,第一中断信息的中断标识也可以被称为第一中断信息的中断号。中断控制器可以基于中断信息的中断号,确定出是哪个外设模块发送的中断信息。
例如,中断控制器基于第一中断信息的中断标识确定出第一中断信息为第一外设模块发送的中断信息后,中断控制器确定出第一中断信息的中断标识为有效的中断标识。
具体的,外设模块可以为多个,不同的外设模块产生中断信息的标识不同。中断控制器可以基于中断信息的标识确定出外设模块的标识。中断控制器在获取到所有外设模块的中断信息的标识后,从所有外设模块的中断信息的标识中确定出是否包含第一中断信息的中断标识,若包含,则说明第一中断信息的中断标识为有效的中断标识,执行S404,并且中断控制器可以基于第一中断信息的中断标识确定出第一外设模块的标识。若不包含,则说明第一中断信息的中断标识为无效的中断标识,执行S405,即配置失败。
在一些实施例中,内存中保存中断映射表。中断映射表中记载了外设模块的标识、中断信息的标识和中断的路由标识的映射关系。其中,外设模块的标识和中断信息的标识为一一对应的关系,即表征了外设模块产生的中断信息。中断的路由标识用于指示响应该中断信息的CPU的标识,因此中断的路由标识也可以被称为CPU的标识。
表1
表1示例性示出了一种中断映射表。如表1所示,外设模块为网卡时,网卡可以产生第一中断信息,第一中断信息的标识为中断一,第一中断信息用于唤醒第一CPU。外设模块为硬盘时,网卡可以产生第二中断信息,第二中断信息的标识为中断二,且第二中断信息用于唤醒第二CPU。外设模块为GPU时,网卡可以产生第三中断信息,第三中断信息的标识为中断三,且第三中断信息用于唤醒第三CPU。
上述外设模块的标识、外设模块的标识和中断的路由标识为一一映射关系,即中断控制器可以基于中断信息的标识,查找到唯一的外设模块的标识,即确定出发送该中断信息的外设模块。
需要说明的是,第一中断信息、第二中断信息和第三中断信息也可以唤醒同一个CPU,本申请实施例对此不做限定。
在中断控制器确定出第一中断信息的中断标识是否为有效的中断标识之前,中断控制器可以从内存获取到中断映射表,在中断映射表中是否可以查找到第一中断信息的中断标识,若可以查找到,则说明第一中断信息的中断标识为有效的中断标识,若没有查找到,则说明第一中断信息的中断标识为无效的中断标识。
S404、中断控制器确定出第一中断信息的中断标识是否已经配置?
在中断控制器确定出第一中断信息的中断标识是否已经配置,避免重复配置。
具体的,中断控制器从内存中获取到中断配置信息,看是否可以从中断配置信息中查找到第一中断信息的中断标识。
表2
中断信息的标识 |
中断二 |
中断三 |
表2示例性示出了中断配置信息中记载的需将中断消息转为event消息的中断信息的标识。如表2所示,需将中断消息转为event消息的中断信息的标识包括中断二和中断三。
那么中断控制器可以获取到中断配置信息,看其中是否包括第一中断信息的中断标识。若可以查找到,则说明之前第一中断信息的中断标识已经被配置了,无需再重复配置,执行S405,即配置失败。
若在中断配置信息中没有查找到第一中断信息的中断标识,则说明之前第一中断信息的中断标识没有被配置,执行S406,可以将第一中断信息的中断标识添加在中断配置信息中,更新中断配置信息。
需要说明的是,中断控制器也可以先执行S404,在执行S403,本申请实施例对于S403和S404的执行顺序不做限定。
S405、配置失败。
S406、中断控制器在确定出第一中断信息的中断标识为有效的中断标识,且第一中断信息的中断标识没有被配置,获取到第一中断信息的中断标识。
S407、中断控制器将第一中断信息的中断标识添加在中断配置信息中,更新中断配置信息。
表3
中断信息的标识 |
中断二 |
中断三 |
中断一 |
如表3所示,中断控制器将第一中断信息的中断标识,例如中断一添加在中断配置信息中,更新中断配置信息,得到表3所示的更新后的中断配置信息。
S408、中断控制器将更新后的中断配置信息发送至内存,使得更新后的中断配置信息保存在内存中。
中断控制器将更新后的中断配置信息发送至内存,使得更新后的中断配置信息保存在内存中。
需要说明的是,中断控制器可以动态的更新内存中的中断配置信息,不仅可以在中断配置信息中新增中断信息的中断标识,也可以去除掉中断信息的中断标识,即去除掉的中断信息的中断标识,该中断信息无需转为event消息。
在中断控制器接收到第一外设模块发送的第一中断信息后,中断控制器从内存获取到中断配置信息,并确定出中断配置信息中包括第一中断信息的中断标识,则需将第一中断信息转换为第一event消息。
接下来对中断控制器如何将第一中断信息转换为第一event消息的,进行详细的描述。
方式一:中断控制器从第一中断消息的消息体中获取到中断信息的路由标识,填充在第一event消息的消息体中,得到第一event消息。
图5A-图5B示例性示出了一种第一中断消息的消息体和第一event消息的消息体的示意图。
其中,图5A为第一中断消息的消息体的示意图。
第一中断消息的消息体中包括以下字段:消息类型、外设模块的标识、中断信息的标识和中断信息的路由标识。其中,消息类型为第一消息类型,第一消息类型用于指示该消息为中断消息。外设模块的标识为第一外设模块,第一外设模块用于指示发送该第一中断消息的是哪一个外设模块。中断信息的标识为中断一,中断一用于指示第一中断消息的中断标识。中断信息的路由标识为第一CPU,第一CPU用户指示处理第一中断消息的CPU标识。
在一些实施例中,第一中断消息的消息体中还可以包括其他的字段,例如中断消息的类型等字段。在其他实施例中,第一中断消息的消息体中也可以不包括外设模块的标识字段,因为中断控制器可以基于中断信息的标识(即中断一)确定出发送第一中断消息的外设模块(即第一外设模块),本申请实施例对此不做限定。
在中断控制器得到第一中断消息的消息体后,中断控制器可以从第一中断消息的消息体中获取到中断信息的路由标识,并填充到第一event消息的消息体中,得到第一event消息。
图5B为第一event消息的消息体的示意图。
第一event消息的消息体包括以下字段:消息类型和中断信息的路由标识。其中,消息类型为第二消息类型,第二消息类型用于指示该消息为event消息。中断信息的路由标识为第一CPU,第一CPU用户指示处理第一event消息的CPU标识。中断信息的路由标识是从第一中断消息的消息体中得到的。
在一些实施例中,第一event消息的消息体中还可以包括其他的字段,例如event消息的类型等字段,event消息的类型可以用于指示该event消息是由中断消息转换得到的。本申请实施例对此不做限定。
方式二:中断控制器在接收到第一中断消息的消息体后,在第一中断消息的消息体的基础上增加一个event标识字段,并将该event标识字段的取值置为第一值,得到第一event消息,其中,第一值用于指示该消息类型为第一event消息。
图5C-图5F示例性示出了另一种第一中断消息的消息体和第一event消息的消息体的示意图。
其中,图5C为第一中断消息的消息体的示意图。
第一中断消息的消息体中包括以下字段:消息类型、外设模块的标识、中断信息的标识、中断信息的路由标识和event标识。其中,消息类型为第一消息类型,第一消息类型用于指示该消息为中断消息。外设模块的标识为第一外设模块,第一外设模块用于指示发送该第一中断消息的是哪一个外设模块。中断信息的标识为中断一,中断一用于指示第一中断消息的中断标识。中断信息的路由标识为第一CPU,第一CPU用户指示处理第一中断消息的CPU标识。event标识为元素0,元素0用于标识该消息类型为中断消息。
在一些实施例中,第一中断消息的消息体中还可以包括其他的字段,例如中断消息的类型等信息。在其他实施例中,第一中断消息的消息体中也可以不包括外设模块的标识,因为中断控制器可以基于中断信息的标识(即中断一)确定出发送第一中断消息的外设模块(即第一外设模块),本申请实施例对此不做限定。
图5D为一种第一event消息的消息体的示意图。
第一event消息的消息体包括以下字段:消息类型、外设模块的标识、中断信息的标识、中断信息的路由标识和event标识。其中,消息类型为第一消息类型。外设模块的标识为第一外设模块。中断信息的标识为中断一。中断信息的路由标识为第一CPU。event标识为元素1,元素1用于标识该消息类型为event消息。也就是说,中断控制器在接收到第一中断消息,确定出需将第一中断消息转换为第一event消息,则中断控制器将event标识由元素0修改为元素1,得到第一event消息。需要说明的是,虽然第一event消息的消息体中消息类型为第一消息类型,第一消息类型用于指示消息为中断消息,但是第一event消息的消息体中event标识的取值为元素1,即中断控制器可以基于第一消息类型和event标识的取值为元素1,确认出第一event消息为中断消息转换得到的event消息。
图5E为另一种第一event消息的消息体的示意图。
图5E所示的第一event消息的消息体的格式与图5D所示的第一event消息的消息体的格式类似,对于图5E所示的第一event消息的消息体的介绍,可以参考图5D所示的描述,本申请实施例在此不再赘述。图5E与图5D的不同之处在于,在中断控制器在接收到第一中断消息,确定出需将第一中断消息转换为第一event消息,中断控制器除了将event标识由元素0修改为元素1,还需将消息类型由第一消息类型修改为第二消息类型,得到第一event消息。
图5F为又一种第一event消息的消息体的示意图。
图5F所示的第一event消息的消息体的格式与图5D所示的第一event消息的消息体的格式类似,对于图5E所示的第一event消息的消息体的介绍,可以参考图5D所示的描述,本申请实施例在此不再赘述。图5E与图5D的不同之处在于,在中断控制器在接收到第一中断消息,确定出需将第一中断消息转换为第一event消息,中断控制器除了将event标识由元素0修改为元素1,还需将消息类型字段删除掉,得到第一event消息。
方式三:中断控制器在接收到第一中断消息的消息体后,在第一中断消息的消息体的基础上,将消息类型字段由第一消息类型修改为第二消息类型,得到第一event消息。
图5G-图5H示例性示出了又一种第一中断消息的消息体和第一event消息的消息体的示意图。
其中,图5G为第一中断消息的消息体的示意图。对图5G的介绍,可以参考图5A中实施例的描述,本申请实施例在此不再赘述。
图5H为第一event消息的消息体的示意图。图5H与图5G类似,图5H与图5G的不同之处在于,消息类型字段的取值不一样。图5G中,第一中断消息中消息类型字段的取值为第一消息类型,第一消息类型用于指示消息为中断消息。在中断控制器在接收到第一中断消息,确定出需将第一中断消息转换为第一event消息,中断控制器将第一中断消息中消息类型字段的取值由第一消息类型修改为第二消息类型,第二消息类型用于指示消息为even消息。
不仅限于方式一至方式三中示出的第一中断信息转换为第一event消息的具体实现,还可以基于其他的方式将第一中断信息转换为第一event消息,本申请实施例对此不做限定。
在中断控制器将第一中断消息转换为第一event消息之后,第一event消息中携带有中断信息的路由标识,即响应第一event消息的CPU的标识(即第一CPU)。这样,一方面,中断控制器可以通过总线将第一event消息发送至第一CPU,实现点对点唤醒CPU,解决了当前通过event消息唤醒CPU导致误唤醒其他处于低功耗的CPU的问题。另一方面,中断控制器将第一中断消息转换为第一event消息,通过第一event消息唤醒第一CPU,第一CPU可以直接执行第一event消息对应的第一事件,不需要陷入操作系统内核去响应第一event消息,缩短了唤醒CPU的时延。
图6示例性示出了第一CPU执行第一中断消息的流程图。
S601、中断控制器接收第一中断信息。
外设模块(例如网卡)上有第一事件时,例如接收到网络包之后,外设模块向中断控制器发送第一中断消息。
第一中断消息中携带有第一消息类型、第一外设模块的标识、第一中断消息的中断标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一外设模块的标识用于指示发送第一中断消息的外设模块的标识,第一CPU的标识用于指示处理第一中断消息的CPU的标识。
示例性的,若网卡接收到网络包之后,需要CPU读取网络包,此时网卡可以向第一CPU发送第一中断信息,第一中断消息用于唤醒第一CPU,使得第一CPU读取网络包。
S602、中断控制器获取到中断配置信息。
在中断控制器接收第一中断信息后,中断控制器需从内存中获取到中断配置信息,中断配置信息也可以被称为中断映射表(例如第一映射表),中断配置信息中记载了一个或多个需转为event消息的终中断消息的中断标识。
S603、中断控制器确定出是否需将第一中断信息转换为event消息?
中断控制器可以基于中断配置信息,确定出是否需要将第一中断信息转为event消息。
具体的,中断控制器可以从中断配置信息中,查找是否有第一中断消息的中断标识若有的话,则按照预设规则,将第一中断消息转化为第一event消息,中断控制器执行S604。若没有的话,则无需将第一中断消息转化为event消息,中断控制器执行S605。
S604、中断控制器基于预设的规则,将第一中断消息转换为第一event消息。
对于中断控制器如何将第一中断消息转化为第一event消息的,可以参考图5A-图5H所示的实施例,本申请实施例在此不再赘述。
S605、中断控制器将第一中断消息发送至第一CPU。
在确定出第一中断消息无需转为event消息的情况下,中断控制器可以通过总线将第一中断消息发送至第一CPU。
S606、中断控制器将第一event消息发送至第一CPU。
在中断控制器将第一中断消息转化为第一event消息后,中断控制器将第一event消息发送至第一CPU。
中断控制器可以通过总线将第一event消息发送至第一CPU。
S607、若第一CPU状态为低功耗状态,且第一event消息中携带的CPU标识为第一CPU,第一CPU接收第一event消息。
S608、第一CPU转换为非低功耗模式,无需陷入操作系统内核响应第一event消息,直接执行第一事件。
第一CPU在接收到第一event消息后,基于第一CPU的状态和第一event消息中携带的CPU标识,确定出是否接收第一event消息。若第一CPU的状态为低功耗状态、且第一event消息中携带的CPU标识为第一CPU的标识,则第一CPU接收第一event消息,从低功耗状态切换为非低功耗状态,并且无需陷入操作系统内核核响应第一event消息,直接执行第一事件。
若第一CPU的状态为非低功耗状态,和/或第一event消息中携带的CPU标识不是第一CPU的标识,则第一CPU将第一event消息丢弃。
示例性的,第一CPU的状态转换为非低功耗状态,第一CPU直接执行第一event消息的下一条指令,即判断是否有网络包到达。由于网卡是在确定出有网络包到达之后,才向第一CPU发送第一中断指令的,因此第一CPU在接收到第一event消息后,可以直接从网卡上读取网络包,完成收包流程。
S609、若第一CPU状态为低功耗状态,且第一中断消息中携带的CPU标识为第一CPU,第一CPU接收第一中断消息。
S610、第一CPU转换为非低功耗模式,陷入操作系统内核响应第一中断消息,执行第一事件。
第一CPU在接收到第一中断消息后,基于第一CPU的状态和第一中断消息中携带的CPU标识,确定出是否接收第一中断消息。若第一CPU的状态为低功耗状态、且第一中断消息中携带的CPU标识为第一CPU的标识,则第一CPU接收第一中断消息,从低功耗状态切换为非低功耗状态,陷入操作系统内核响应第一中断消息,执行第一事件。
若第一CPU的状态为非低功耗状态,和/或第一中断消息中携带的CPU标识不是第一CPU的标识,则第一CPU将第一中断消息丢弃。
示例性的,第一CPU的状态转换为非低功耗状态,由于第一中断消息只能在操作系统内核中处理,CPU接收到第一中断消息,首先CPU需要从用户态切换为内核态。在CPU切换至内核态之后,CPU需基于第一中断消息确定出是哪个外设模块发送的中断消息,例如CPU确定出是由网卡发送的第一中断消息。CPU还需查找到对应的进程或者线程,并运行该进程或者线程执行新的任务事项,若CPU上保存的有其他进程,CPU需要暂停运行此进程,在运行至新的进程,并将运行数据保存至内存。在用户态和内核态切换过程中、进程切换过程中,CPU还需保存CPU上下文。之后,CPU再从内核态切换为用户态。在CPU切换至用户态之后,CPU调用业务进程,从内存中读取运行数据,完成收包流程。
图7为本申请实施例提供的一种中断消息处理装置结构示意图。
一种可能的实施方式中,该装置700可以包括第一CPU和第一中断控制器。第一CPU和第一中断控制器通过总线通信。
其中,第一中断控制器用于接收第一中断消息,将第一中断消息转换为第一event消息,并将第一event消息发送至第一CPU。
第一CPU用于在用户态响应于第一event消息,从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
通过该方法,实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
在一种可能的实现方式中,第一event消息中携带有CPU的标识;第一CPU,具体用于在接收到第一event消息后,确认出第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
在一种可能的实现方式中,第一CPU,还用于在接收到第一event消息后,确认出第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;第一中断控制器,还用于获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断控制器,具体用于在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息,并将第一event消息发送至第一CPU。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
在一种可能的实现方式中,第一中断控制器,还用于在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,发送第一中断消息给第一CPU;第一CPU,还用于在接收到第一中断消息后,在内核态响应第一中断消息,从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
第一中断控制器,还用于接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
在一种可能的实现方式中,第一中断控制器,具体用于在接收到第一中断消息后,从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,第一中断控制器从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
结合第一方面,在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;第一中断控制器,具体用于在接收到第一中断消息后,将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,第一中断控制器可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
结合第一方面,在一种可能的实现方式中,在第一event消息中携带的消息类型为第二消息类型的情况下,第一中断控制器,还用于将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。这样,第一中断控制器还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
在一种可能的实现方式中,装置还包括第一外设模块,其中,第一外设模块,用于在触发第一事件时,产生第一中断消息;第一外设模块,还用于向第一中断控制器发送第一中断消息;第一中断控制器,具体用于接收第一外设模块发送的第一中断消息。
结合第一方面,在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
图8为本申请实施例提供的一种中断消息处理方法的流程示意图。
S801、获取第一中断消息。
S802、将第一中断消息转换为第一event消息。
在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;在将第一中断消息转换为第一event消息之前,方法还包括:获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断消息转换为第一event消息,具体包括:在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
在一种可能的实现方式中,方法还包括:在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,通过第一中断消息控制第一CPU在内核态从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
在一种可能的实现方式中,在获取到第一映射表之前,方法还包括:接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
结合第二方面,在一种可能的实现方式中,将第一中断消息转换为第一event消息,具体包括:从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,第一中断控制器从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
结合第二方面,在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;将第一中断消息转换为第一event消息,具体包括:将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,第一中断控制器可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
在一种可能的实现方式中,在第一event消息携带的消息类型为第二消息类型的情况下,方法还包括:将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
这样,第一中断控制器还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
S803、通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
通过该方法,实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
在一种可能的实现方式中,第一event消息中携带有CPU的标识;通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件,具体包括:在第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
在一种可能的实现方式中,方法还包括:在第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
结合第二方面,在一种可能的实现方式中,获取第一中断消息,具体包括:接收并获取到第一外设模块发送的第一中断消息。
结合第二方面,在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
图9为本申请实施例提供的另一种中断消息处理装置的流程示意图。
一种可能的实施方式中,装置900可以包括获取单元901、转换单元902和处理单元903。该装置900可用于执行图8实施例所示的一种中断消息处理方法。
其中,获取单元901,用于获取第一中断消息。
转换单元902,用于将第一中断消息转换为第一event消息。
处理单元903,用于通过第一event消息控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。
实现了通过中断消息的方式唤醒CPU时,将中断消息转化为event消息,实现对点唤醒CPU,缩短了处理中断消息的时延。
在一种可能的实现方式中,第一event消息中携带有CPU的标识。处理单元903,具体用于在第一event消息中携带的CPU的标识为第一CPU的标识,且第一CPU处于低功耗模式的情况下,控制第一CPU在用户态从低功耗模式转换为非低功耗模式,并在用户态处理第一事件。这样,第一event消息中携带有CPU的标识,可以实现点对点唤醒CPU。
在一种可能的实现方式中,处理单元903,还用于在第一event消息中携带的CPU的标识不是第一CPU的标识,和/或第一CPU处于非低功耗模式的情况下,丢弃第一event消息。
这样,第一CPU在接收到第一event消息后,会判断第一event消息是否是发给自己的,若是,则唤醒,处理第一事件,若否,则继续处于低功耗模式。
在一种可能的实现方式中,第一中断消息中还包括有第一中断消息的标识;转换单元902,具体用于在将第一中断消息转换为第一event消息之前,方法还包括:获取到第一映射表,第一映射表中包括一个或多个需要转成event消息的中断消息的标识;第一中断消息转换为第一event消息,具体包括:在确定出一个或多个需要转成event消息的中断消息的标识中包括第一中断消息的标识的情况下,将第一中断消息转换为第一event消息。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。对于需要装换为event消息的中断消息,可以将中断消息转换为event消息,直接在用户态响应该event消息。
在一种可能的实现方式中,转换单元902,还用于在确定出一个或多个需要转成event消息的中断消息的标识中不包括第一中断消息的标识的情况下,通过第一中断消息控制第一CPU在内核态从低功耗模式转换为非低功耗模式,再从内核态切换为用户态,并在用户态处理第一事件。
这样,对于不需要装换为event消息的中断消息,还是按照原本的执行流程执行中断消息,即先陷入内核态响应中断消息,在由内核态切换为用户态,在用户态执行任务事项。
在一种可能的实现方式中,获取单元901还用于在获取到第一映射表之前,接收第一映射表,并将第一映射表中的一个或多个需要转成event消息的中断消息的标识保存至内存。
这样,开发人员可以配置需将中断消息转换为event消息的对应的中断消息的标识。实现按需求将某些中断消息转换为event消息,某些中断消息可以不转换为event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;其中,第一消息类型用于指示第一中断消息的类型为中断消息,第一CPU的标识用于指示处理第一中断消息的CPU的标识;第一event消息中携带有第二消息类型、第一CPU的标识,其中,第二消息类型用于指示第一event消息的类型为event消息。
在一种可能的实现方式中,转换单元902,具体用于从第一中断消息中获取到第一CPU的标识,基于第一CPU的标识和第二消息类型得到第一event消息。
这样,转换单元902可以从第一中断消息中获取到字段信息,再基于获取到的字段信息生成第一event消息。
在一种可能的实现方式中,第一中断消息携带有第一消息类型、第一外设模块的标识、第一CPU的标识;第一event消息携带有第一消息类型或者第二消息类型、第一外设模块的标识、第一CPU的标识。
在一种可能的实现方式中,第一中断消息和第一event消息中还包括event标识字段,其中,第一中断消息中event标识字段的取值为第一值,第一event消息中event标识字段的取值为第二值,第二值与第一值不同;将第一中断消息转换为第一event消息,具体包括:将第一中断消息中event标识字段的取值修改为第二值,得到第一event消息。
这样,转换单元902可以直接在第一中断消息中修改event标识字段的取值,得到第一event消息。即在第一中断消息和第一event消息中event标识字段的取值不同。
在一种可能的实现方式中,在第一event消息携带的消息类型为第二消息类型的情况下,转换单元902还用于将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
这样,转换单元902还需将第一中断消息中第一消息类型修改为第二消息类型,得到第一event消息。
在一种可能的实现方式中,低功耗模式为:第一CPU停止运行;非低功耗模式为:第一CPU运行。
可选的,在CPU处于低功耗状态时,CPU中的取址单元、执行单元等功能单元都停止运行了在CPU处于非低功耗状态时,CPU内的取址单元、执行单元等功能单元开始运行。
在一种可能的实现方式中,获取单元901,具体用于接收并获取到第一外设模块发送的第一中断消息。
在一种可能的实现方式中,第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
本申请还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述图8实施例中提供的一种中断消息处理方法。
本申请还提供了一种计算机程序产品,当计算机程序产品在装置上运行时,使得装置执行上述图8实施例中提供的一种中断消息处理方法。
本申请实施例还提供了一种芯片,芯片包括处理器和通信接口,处理器用于从该通信接口调用并运行指令,当该处理器执行指令时,使得该芯片执行上述图8实施例中提供的一种中断消息处理方法。
本申请实施例提供了一种芯片系统,在一种可能的设计中,该芯片系统包括图7实施例所述的第一CPU和第一中断控制器。所述第一CPU和第一中断控制器,用于实现图8实施例中提供的一种中断消息处理方法。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存一种中断消息处理方法必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请的各实施方式可以任意进行组合,以实现不同的技术效果。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solidstate disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
总之,以上所述仅为本发明技术方案的实施例而已,并非用于限定本发明的保护范围。凡根据本发明的揭露,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (30)
1.一种中断消息处理装置,其特征在于,所述芯片包括第一CPU、第一中断控制器,所述第一中断控制器与所述第一CPU通过总线通信,其中,
所述第一中断控制器,用于接收第一中断消息,将所述第一中断消息转换为第一event消息,并将所述第一event消息发送至所述第一CPU;
所述第一CPU,用于在用户态响应于所述第一event消息,从所述低功耗模式转换为所述非低功耗模式,并在所述用户态处理第一事件。
2.根据权利要求1所述的装置,其特征在于,所述第一event消息中携带有CPU的标识;
所述第一CPU,具体用于确认出所述第一event消息中携带的所述CPU的标识为所述第一CPU的标识,且所述第一CPU处于所述低功耗模式的情况下,从所述低功耗模式转换为所述非低功耗模式,并在所述用户态处理所述第一事件。
3.根据权利要求2所述的装置,其特征在于,所述第一CPU,还用于在确认出所述第一event消息中携带的所述CPU的标识不是所述第一CPU的标识,和/或所述第一CPU处于所述非低功耗模式的情况下,丢弃所述第一event消息。
4.根据权利要求1-3任一项所述的装置,其特征在于,所述第一中断消息中还包括有所述第一中断消息的标识;
所述第一中断控制器,还用于获取到第一映射表,所述第一映射表中包括一个或多个需要转成event消息的中断消息的标识;
所述第一中断控制器,具体用于在确定出所述一个或多个需要转成event消息的中断消息的标识中包括所述第一中断消息的标识的情况下,将所述第一中断消息转换为所述第一event消息,并将所述第一event消息发送至所述第一CPU。
5.根据权利要求4所述的装置,其特征在于,所述第一中断控制器,还用于在确定出所述一个或多个需要转成event消息的中断消息的标识中不包括所述第一中断消息的标识的情况下,发送所述第一中断消息给所述第一CPU;
所述第一CPU,还用于在接收到所述第一中断消息后,在内核态响应所述第一中断消息,从所述低功耗模式转换为非低功耗模式,再从所述内核态切换为所述用户态,并在所述用户态处理所述第一事件。
6.根据权利要求4或5所述的装置,其特征在于,所述第一中断控制器,还用于接收所述第一映射表,并将所述第一映射表中的所述一个或多个需要转成event消息的中断消息的标识保存至内存。
7.根据权利要求1-6任一项所述的装置,其特征在于,所述第一中断消息携带有第一消息类型、所述第一外设模块的标识、所述第一CPU的标识;其中,所述第一消息类型用于指示所述第一中断消息的类型为中断消息,所述第一CPU的标识用于指示处理所述第一中断消息的CPU的标识;
所述第一event消息中携带有第二消息类型、所述第一CPU的标识,其中,所述第二消息类型用于指示所述第一event消息的类型为event消息。
8.根据权利要求7所述的装置,其特征在于,所述第一中断控制器,具体用于在接收到所述第一中断消息后,从所述第一中断消息中获取到所述第一CPU的标识,基于所述第一CPU的标识和所述第二消息类型得到所述第一event消息。
9.根据权利要求1-6任一项所述的装置,其特征在于,所述第一中断消息携带有第一消息类型、所述第一外设模块的标识、所述第一CPU的标识;
所述第一event消息携带有所述第一消息类型或者第二消息类型、所述第一外设模块的标识、所述第一CPU的标识。
10.根据权利要求9所述的装置,其特征在于,所述第一中断消息和所述第一event消息中还包括event标识字段,其中,所述第一中断消息中event标识字段的取值为第一值,所述第一event消息中event标识字段的取值为第二值,所述第二值与所述第一值不同;
所述第一中断控制器,具体用于在接收到所述第一中断消息后,将所述第一中断消息中所述event标识字段的取值修改为第二值,得到所述第一event消息。
11.根据权利要求9或10所述的装置,其特征在于,在所述第一event消息中携带的消息类型为所述第二消息类型的情况下,所述第一中断控制器,还用于将所述第一中断消息中所述第一消息类型修改为所述第二消息类型,得到所述第一event消息。
12.根据权利要求1-11任一项所述的装置,其特征在于,所述低功耗模式为:所述第一CPU停止运行;
所述非低功耗模式为:所述第一CPU运行。
13.根据权利要求1-12任一项所述的装置,其特征在于,所述装置还包括第一外设模块,其中,
所述第一外设模块,用于在触发所述第一事件时,产生所述第一中断消息;
所述第一外设模块,还用于向所述第一中断控制器发送所述第一中断消息;
所述第一中断控制器,具体用于接收所述第一外设模块发送的第一中断消息。
14.根据权利要求13所述的装置,其特征在于,所述第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
15.一种中断消息处理方法,其特征在于,所述方法包括:
获取第一中断消息;
将所述第一中断消息转换为第一event消息;
通过所述第一event消息控制所述第一CPU在用户态从所述低功耗模式转换为非低功耗模式,并在所述用户态处理第一事件。
16.根据权利要求15所述的方法,其特征在于,所述第一event消息中携带有CPU的标识;所述通过所述第一event消息控制所述第一CPU在用户态从所述低功耗模式转换为非低功耗模式,并在所述用户态处理第一事件,具体包括:
在所述第一event消息中携带的所述CPU的标识为所述第一CPU的标识,且所述第一CPU处于所述低功耗模式的情况下,控制所述第一CPU在所述用户态从所述低功耗模式转换为所述非低功耗模式,并在所述用户态处理所述第一事件。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
在所述第一event消息中携带的所述CPU的标识不是所述第一CPU的标识,和/或所述第一CPU处于所述非低功耗模式的情况下,丢弃所述第一event消息。
18.根据权利要求15-17任一项所述的方法,其特征在于,所述第一中断消息中还包括有所述第一中断消息的标识;在所述将所述第一中断消息转换为第一event消息之前,所述方法还包括:
获取到第一映射表,所述第一映射表中包括一个或多个需要转成event消息的中断消息的标识;
所述第一中断消息转换为第一event消息,具体包括:
在确定出所述一个或多个需要转成event消息的中断消息的标识中包括所述第一中断消息的标识的情况下,将所述第一中断消息转换为第一event消息。
19.根据权利要求18所述的方法,其特征在于,所述方法还包括:
在确定出所述一个或多个需要转成event消息的中断消息的标识中不包括所述第一中断消息的标识的情况下,通过所述第一中断消息控制所述第一CPU在内核态从所述低功耗模式转换为所述非低功耗模式,再从所述内核态切换为所述用户态,并在所述用户态处理所述第一事件。
20.根据权利要求18或19所述的方法,其特征在于,在所述获取到第一映射表之前,所述方法还包括:
接收所述第一映射表,并将所述第一映射表中的所述一个或多个需要转成event消息的中断消息的标识保存至内存。
21.根据权利要求15-20任一项所述的方法,其特征在于,所述第一中断消息携带有第一消息类型、所述第一外设模块的标识、所述第一CPU的标识;其中,所述第一消息类型用于指示所述第一中断消息的类型为中断消息,所述第一CPU的标识用于指示处理所述第一中断消息的CPU的标识;
所述第一event消息中携带有第二消息类型、所述第一CPU的标识,其中,所述第二消息类型用于指示所述第一event消息的类型为event消息。
22.根据权利要求21所述的方法,其特征在于,所述将所述第一中断消息转换为第一event消息,具体包括:
从所述第一中断消息中获取到所述第一CPU的标识,基于所述第一CPU的标识和所述第二消息类型得到所述第一event消息。
23.根据权利要求15-20任一项所述的方法,其特征在于,所述第一中断消息携带有第一消息类型、所述第一外设模块的标识、所述第一CPU的标识;
所述第一event消息携带有所述第一消息类型或者第二消息类型、所述第一外设模块的标识、所述第一CPU的标识。
24.根据权利要求23所述的方法,其特征在于,所述第一中断消息和所述第一event消息中还包括event标识字段,其中,所述第一中断消息中event标识字段的取值为第一值,所述第一event消息中event标识字段的取值为第二值,所述第二值与所述第一值不同;
所述将所述第一中断消息转换为第一event消息,具体包括:
将所述第一中断消息中所述event标识字段的取值修改为第二值,得到所述第一event消息。
25.根据权利要求23或24所述的方法,其特征在于,在所述第一event消息携带的消息类型为所述第二消息类型的情况下,所述方法还包括:
将所述第一中断消息中所述第一消息类型修改为所述第二消息类型,得到所述第一event消息。
26.根据权利要求15-25任一项所述的方法,其特征在于,所述低功耗模式为:所述第一CPU停止运行;
所述非低功耗模式为:所述第一CPU运行。
27.根据权利要求15-26任一项所述的方法,其特征在于,所述获取第一中断消息,具体包括:
接收并获取到第一外设模块发送的所述第一中断消息。
28.根据权利要求27所述的方法,其特征在于,所述第一外设模块的类型包括以下任意一项:网卡、硬盘、图形处理器GPU、加速处理器APU、AI加速卡NPU。
29.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述权利要求15-28任意一项所述的方法。
30.一种计算机程序产品,其特征在于,当所述计算机程序产品在芯片上运行时,使得所述芯片执行上述权利要求15-28任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003207.5A CN117632533A (zh) | 2022-08-19 | 2022-08-19 | 一种中断消息处理方法及装置 |
PCT/CN2023/112829 WO2024037482A1 (zh) | 2022-08-19 | 2023-08-14 | 一种中断消息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003207.5A CN117632533A (zh) | 2022-08-19 | 2022-08-19 | 一种中断消息处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632533A true CN117632533A (zh) | 2024-03-01 |
Family
ID=89940734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211003207.5A Pending CN117632533A (zh) | 2022-08-19 | 2022-08-19 | 一种中断消息处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117632533A (zh) |
WO (1) | WO2024037482A1 (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080079852A (ko) * | 2007-02-28 | 2008-09-02 | 삼성전자주식회사 | Cpu 가상화 방법 |
CN109787777B (zh) * | 2017-11-10 | 2020-04-03 | 北京金山云网络技术有限公司 | 一种网卡模式切换方法、装置、电子设备及存储介质 |
US10984096B2 (en) * | 2018-03-28 | 2021-04-20 | Intel Corporation | Systems, methods, and apparatus for detecting control flow attacks |
CN113010275B (zh) * | 2019-12-20 | 2024-01-30 | 大唐移动通信设备有限公司 | 一种中断处理方法和装置 |
CN114077379B (zh) * | 2020-08-19 | 2024-03-26 | 华为技术有限公司 | 一种计算机设备、异常处理的方法以及中断处理的方法 |
CN114371907A (zh) * | 2020-10-15 | 2022-04-19 | 华为技术有限公司 | 一种芯片系统、处理虚拟中断的方法及相应装置 |
CN113342554B (zh) * | 2021-08-02 | 2022-01-04 | 阿里云计算有限公司 | Io多路复用方法、介质、设备和操作系统 |
-
2022
- 2022-08-19 CN CN202211003207.5A patent/CN117632533A/zh active Pending
-
2023
- 2023-08-14 WO PCT/CN2023/112829 patent/WO2024037482A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024037482A1 (zh) | 2024-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8270299B2 (en) | Communicator-based token/buffer management for eager protocol support in collective communication operations | |
US20140331231A1 (en) | Hardware task manager | |
CN106648896B (zh) | 一种Zynq芯片在异构称多处理模式下双核共享输出外设的方法 | |
US20170329632A1 (en) | Device scheduling method, task manager and storage medium | |
CN116243995B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
JPWO2009113381A1 (ja) | マルチプロセッサシステム、マルチプロセッサシステムのos間デバイス共有方法 | |
CN111427751A (zh) | 基于异步处理机制对业务进行处理的方法及系统 | |
CN116257364B (zh) | 系统间的资源占用方法、装置、存储介质及电子装置 | |
US20190227918A1 (en) | Method for allocating memory resources, chip and non-transitory readable medium | |
US20090189686A1 (en) | Semiconductor integrated circuit and power control method | |
CN116868167A (zh) | 操作系统的运行控制方法和装置,以及嵌入式系统和芯片 | |
EP4361808A1 (en) | Resource scheduling method and device and computing node | |
CN116244229A (zh) | 硬件控制器的访问方法、装置、存储介质和电子设备 | |
CN116830082A (zh) | 嵌入式系统的启动控制方法和装置、存储介质和电子设备 | |
CN113961378B (zh) | 基于共享内存的进程间通信方法、装置及电子设备 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN108829530B (zh) | 一种图像处理方法及装置 | |
CN116414534A (zh) | 任务调度方法、装置、集成电路、网络设备及存储介质 | |
CN109819674B (zh) | 计算机存储介质、嵌入式调度方法及系统 | |
CN107172139B (zh) | 一种无线协议栈及其实现方法 | |
CN107329842B (zh) | 基于Qt信号槽机制的获取数据的方法及终端 | |
CN117632533A (zh) | 一种中断消息处理方法及装置 | |
JPH11120014A (ja) | マルチプロセッサ装置 | |
CN116868170A (zh) | 嵌入式系统的运行方法和装置、嵌入式系统及芯片 | |
CN116225741A (zh) | 异构多核核间通信调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |