Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
COMPUTER SYSTEM, ACCESS METHOD AND APPARATUS FOR PERIPHERAL COMPONENT INTERCONNECT EXPRESS ENDPOINT DEVICE
Document Type and Number:
WIPO Patent Application WO/2014/176775
Kind Code:
A1
Abstract:
Proposed are a computer system, and an access method for a peripheral component interconnect express (PCIe) endpoint device. The computer system comprises: a processor, a PCIe bus and an access proxy, wherein the access proxy is respectively connected to the processor and the PCIe endpoint device; the processor is used for acquiring an operation instruction, which operation instruction indicates for the processor to access the PCIe endpoint device by means of the access proxy, and according to the operation instruction, sending an access request to the access proxy, which access request indicates for the access proxy to access the PCIe endpoint device; and the access proxy is used for sending a response message of the access request to the processor, after receiving the access request sent by the processor. Because the processor no longer directly accesses the PCIe endpoint device to be accessed, but completes access by means of the access proxy, the access proxy can return the response message of the access request to the processor, so that the processor avoids resetting the MCE.

Inventors:
DU GE (CN)
Application Number:
PCT/CN2013/075088
Publication Date:
November 06, 2014
Filing Date:
May 02, 2013
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HUAWEI TECH CO LTD (CN)
International Classes:
G06F13/38
Foreign References:
CN101206629A2008-06-25
CN101631083A2010-01-20
CN101763221A2010-06-30
CN101206621A2008-06-25
Other References:
See also references of EP 2811413A4
None
Download PDF:
Claims:
权利要求

1、 一种计算机系统, 所述计算机系统包括:

处理器;

高速外围组件互联 PCIe总线, 用于连接 PCIe端点设备;

所述计算机系统还包括访问代理, 所述访问代理分别连接所述处理器和 所述 PCIe端点设备;

所述处理器用于获取操作指令, 所述操作指令指示所述处理器通过所述 访问代理对所述 PCIe端点设备进行访问, 以及根据所述操作指令向所述访 问代理发送访问请求, 所述访问请求指示所述访问代理对所述 PCIe端点设 备进行访问;

所述访问代理用于在接收所述处理器发送的所述访问请求后, 向所述处 理器发送所述访问请求的响应消息。

2、 根据权利要求 1所述的计算机系统, 其特征在于, 所述计算机系统 还包括:

PCIe端点设备的驱动模块, 用于接收对所述 PCIe端点设备进行访问的 调用指令, 根据预先配置的 PCIe端点设备的访问接口生成所述操作指令, 所述预先配置的 PCIe端点设备的访问接口指向所述访问代理;

所述处理器具体用于获取所述 PCIe端点设备的驱动模块生成的所述操 作指令。

3、 根据权利要求 1所述的计算机系统, 其特征在于, 所述计算机系统 还包括: PCIe端点设备的驱动模块和主操作系统;

所述 PCIe端点设备的驱动模块用于接收对所述 PCIe端点设备进行访问 的调用指令, 调用所述主操作系统以进行对所述 PCIe端点设备的访问; 所述主操作系统用于响应所述 PCIe端点设备的驱动模块的调用, 根据 预先配置的 PCIe端点设备的访问接口生成所述操作指令, 所述预先配置的 PCIe端点设备的访问接口指向所述访问代理;

所述处理器具体用于获取所述主操作系统生成的所述操作指令。

4、 根据权利要求 1-3任一项所述的计算机系统, 其特征在于, 所述访 问代理还用于根据所述访问请求执行对所述 PCIe端点设备的访问。

5、 根据权利要求 4所述的计算机系统, 其特征在于, 所述访问代理由 直接存储器存取 DMA引擎实现;

所述处理器用于根据所述操作指令向所述访问代理发送访问请求为: 所述处理器具体用于根据所述操作指令, 向所述 DMA引擎发送数据搬 移请求;

所述访问代理用于根据所述访问请求执行对所述 PCIe端点设备的访问 为:

所述 DMA引擎具体用于根据所述数据搬移请求, 将所述 PCIe端点设 备的存储器中的指定数据搬移到所述计算机系统的存储器中, 或者将所述计 算机系统的存储器中的指定数据搬移到所述 PCIe端点设备的存储器中。

6、 根据权利要求 4或 5所述的计算机系统, 其特征在于,

所述访问代理还用于向所述处理器发送第一通知消息, 所述第一通知消 息表明对所述 PCIe端点设备访问成功;

所述处理器还用于在接收所述第一通知消息后, 获取访问结果。

7、 根据权利要求 4或 5所述的计算机系统, 其特征在于,

所述访问代理还用于向所述处理器发送第二通知消息, 所述第二通知消 息表明对所述 PCIe端点设备访问失败;

所述处理器还用于在接收所述第二通知消息后, 执行访问失败的后续处 理。

8、 根据权利要求 7所述的计算机系统, 其特征在于, 所述处理器用于 在接收所述第二通知消息后, 执行访问失败的后续处理为:

所述处理器用于在接收所述第二通知消息后,确定所述访问代理对所述 PCIe端点设备访问失败的原因;

若所述访问失败的原因是所述 PCIe端点设备异常离线, 所述处理器用 于中止对所述 PCIe端点设备的访问。

9、 根据权利要求 8所述的计算机系统, 其特征在于, 所述计算机系统 还包括 PCIe管理模块;

所述 PCIe管理模块用于获取所述 PCIe端点设备异常离线的通知,保留 为所述 PCIe端点设备分配的资源。

10、 根据权利要求 1-9任一项所述的计算机系统, 其特征在于, 所述访 问代理与所述处理器封装在一起。

11、 根据权利要求 1-9任一项所述的计算机系统, 其特征在于, 所述访 问代理与所述处理器固定连接;

所述访问代理用于通过与所述处理器的固定连接向所述处理器发送所 述访问请求的响应消息。

12、 根据权利要求 11所述的计算机系统, 其特征在于, 所述访问代理 与所述处理器固定连接包括:所述访问代理焊接在所述处理器所连接的印制 电路板上, 或者所述访问代理通过连接固件与所述处理器固定连接。

13、 根据权利要求 1-9任一项所述的计算机系统, 其特征在于, 所述计 算机系统还包括: PCIe交换器, 所述 PCIe交换器的上游端口通过所述 PCIe 总线与所述处理器连接, 所述 PCIe交换器的下游端口通过所述 PCIe总线与 所述 PCIe端点设备连接。

14、 根据权利要求 13所述的计算机系统, 其特征在于, 所述访问代理 封装在所述 PCIe交换器内部。

15、 根据权利要求 14所述的计算机系统, 其特征在于, 所述 PCIe交换 器焊接在所述处理器所连接的印制电路板上, 或者所述 PCIe交换器通过连 接固件与所述处理器固定连接。

16、 一种高速外围组件互联 PCIe端点设备的访问方法, 其特征在于, 计算机系统的处理器通过 PCIe总线连接所述 PCIe端点设备, 所述方法包 括:

所述处理器获取操作指令, 所述操作指令指示所述处理器通过访问代 理访问所述 PCIe端点设备;

所述处理器根据所述操作指令, 向所述访问代理发送访问请求, 所述 访问请求指示所述访问代理对所述 PCIe端点设备进行访问;

所述处理器接收所述访问代理发送的所述访问请求的响应消息。

17、 根据权利要求 16所述的方法, 其特征在于, 所述处理器获取操作 指令包括:

所述处理器获取 PCIe端点设备的驱动模块根据预先配置的 PCIe端点 设备的访问接口生成的所述操作指令, 所述预先配置的 PCIe端点设备的访 问接口指向所述访问代理; 或者,

所述处理器获取主操作系统根据预先配置的 PCIe端点设备的访问接口 生成的所述操作指令, 所述预先配置的 PCIe端点设备的访问接口指向所述 访问代理。

18、 根据权利要求 16或 17所述的方法, 其特征在于, 所述访问代理 由直接存储器存取 DMA 引擎实现, 所述操作指令具体指示所述处理器通 过所述 DMA引擎访问所述 PCIe端点设备;

所述处理器根据所述操作指令, 向所述访问代理发送所述访问请求包 括:

所述处理器根据所述操作指令, 向所述 DMA引擎发送数据搬移请求, 所述数据搬移请求指令所述 DMA引擎将所述 PCIe端点设备的存储器中的 指定数据搬移到所述计算机系统的存储器中, 或者将所述计算机系统的存 储器中的指定数据搬移到所述 PCIe端点设备的存储器中。

19、 根据权利要求 18所述的方法, 其特征在于, 所述操作指令中还指 示访问类型是读操作, 所述读操作的源地址和所述读操作的长度; 所述处理器根据所述操作指令, 向所述 DMA 引擎发送所述数据搬移 请求包括:

所述处理器获取所述计算机系统的存储器分配的所述读操作的目的地 址;

所述处理器向所述 DMA 引擎发送所述数据搬移请求, 所述数据搬移 请求中携带所述读操作的源地址、 所述读操作的目的地址和所述读操作的 长度, 以指示所述 DMA 引擎从所述读操作的源地址搬移所述读操作的长 度的数据到所述读操作的目的地址。

20、 根据权利要求 18所述的方法, 其特征在于, 所述操作指令中还指 示访问类型是写操作, 所述写操作的源地址、 所述写操作的目的地址和所 述写操作的长度;

所述处理器根据所述操作指令, 向所述 DMA 引擎发送所述数据搬移 请求包括:

所述处理器向所述 DMA 引擎发送所述数据搬移请求, 所述数据搬移 请求中携带所述写操作的源地址、 所述写操作的目的地址和所述写操作的 长度, 以指示所述 DMA 引擎从所述写操作的源地址搬移所述写操作的长 度的数据到所述写操作的目的地址。

21、 根据权利要求 16-20任一项所述的方法, 其特征在于, 还包括: 所述处理器接收所述访问代理发送的第一通知消息, 所述第一通知消 息表明所述访问代理对所述 PCIe端点设备访问成功;

所述处理器才艮据所述第一通知消息, 获取访问结果。

22、 根据权利要求 16-20任一项所述的方法, 其特征在于, 还包括: 所述处理器接收所述访问代理发送的第二通知消息, 所述第二通知消 息表明所述访问代理对所述 PCIe端点设备访问失败;

所述处理器根据所述第二通知消息, 执行访问失败的后续处理。

23、 根据权利要求 22所述的方法, 其特征在于, 执行所述访问失败的 后续处理包括:

所述处理器确定所述访问代理对所述 PCIe端点设备访问失败的原因, 若所述访问失败的原因是所述 PCIe端点设备异常离线,所述处理器中止对 所述 PCIe端点设备的访问。

24、 根据权利要求 23所述的方法, 其特征在于, 还包括:

获取所述 PCIe端点设备异常离线的通知, 保留为所述 PCIe端点设备分 配的资源。

25、 一种计算机, 其特征在于, 包括: 处理器、 存储器、 总线和通信接 口;

所述存储器用于存储计算机执行指令, 所述处理器与所述存储器通过所 述总线连接, 当所述计算机运行时, 所述处理器执行所述存储器存储的所述 计算机执行指令, 以使所述计算机执行如权利要求 16-24中任一所述的访问 方法。

26、 一种计算机可读介质, 其特征在于, 包括计算机执行指令, 当计算 机的处理器执行所述计算机执行指令时, 所述计算机执行如权利要求 16-24 中任一所述的访问方法。

27、一种高速外围组件互联 PCIe端点设备的访问方法,其特征在于, 所 述 PCIe端点设备通过 PCIe总线连接计算机系统的处理器, 所述方法包括: 接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成操作指令, 其中, 所 述预先配置的 PCIe端点设备的访问接口指向访问代理,所述操作指令用以 指示所述处理器通过所述访问代理访问所述 PCIe端点设备。

28、 根据权利要求 27所述的方法, 其特征在于, 所述接收调用指令包 括:

所述 PCIe端点设备的驱动模块接收所述调用指令;

相应地, 所述根据预先配置的所述 PCIe端点设备的访问接口, 生成所 述操作指令包括:

所述 PCIe端点设备的驱动模块根据预先配置的所述 PCIe端点设备的 访问接口, 生成对所述 PCIe端点设备进行访问的所述操作指令。

29、 根据权利要求 27所述的方法, 其特征在于, 所述接收调用指令包 括:

所述计算机系统的主操作系统接收 PCIe端点设备的驱动模块的所述调 用指令;

相应地, 所述根据预先配置的所述 PCIe端点设备的访问接口, 生成所 述操作指令包括:

所述主操作系统根据预先配置的所述 PCIe端点设备的访问接口,生成 对所述 PCIe端点设备进行访问的所述操作指令。

30、 一种高速外围组件互联 PCIe端点设备的访问装置, 其特征在于, 包括:

接收模块, 用于接收调用指令, 所述调用指令指示对所述 PCIe端点设 备进行访问;

生成模块, 用于根据预先配置的所述 PCIe端点设备的访问接口, 生成 操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问接口指向所述 访问代理, 所述操作指令用以指示所述处理器通过所述访问代理访问所述 PCIe端点设备。

31、 根据权利要求 30所述的方法, 其特征在于, 所述访问装置是所述

PCIe端点设备的驱动模块或者计算机系统的主操作系统。

32、 一种计算机, 其特征在于, 包括: 处理器、 存储器、 总线和通信接 口;

所述存储器用于存储计算机执行指令, 所述处理器与所述存储器通过 所述总线连接, 当所述计算机运行时, 所述处理器执行所述存储器存储的 所述计算机执行指令, 以使所述计算机执行如下方法: 接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成对所述 PCIe端点设 备进行访问的操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问 接口指向所述访问代理, 所述操作指令用以指示所述处理器通过所述访问 代理访问所述 PCIe端点设备。

33、 一种计算机可读介质, 其特征在于, 包括计算机执行指令, 当计 算机的处理器执行所述计算机执行指令时, 所述计算机执行如下方法: 接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成对所述 PCIe端点设 备进行访问的操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问 接口指向所述访问代理, 所述操作指令用以指示所述处理器通过所述访问 代理访问所述 PCIe端点设备。

34、 一种访问代理, 其特征在于, 所述访问代理应用于计算机系统中, 所述计算机系统包括处理器和高速外围组件互联 PCIe总线, 所述 PCIe总 线连接至少一个 PCIe端点设备;

所述访问代理分别连接所述处理器和所述 PCIe端点设备;

所述访问代理用于接收所述处理器对所述 PCIe端点设备的访问请求, 向所述处理器返回所述访问请求的响应消息, 以隔萬所述处理器与所述 PCIe端点设备之间的访问。

35、 根据权利要求 34所述的访问代理, 其特征在于, 所述访问代理还 用于根据所述访问请求执行对所述 PCIe端点设备的访问。

36、 根据权利要求 34或 35所述的访问代理, 其特征在于, 所述访问 代理由直接存储器存取(Direct Memory Access, DMA ) 引擎实现;

所述 DMA引擎具体用于接收所述处理器发送的数据搬移请求, 根据所 述数据搬移请求将所述 PCIe端点设备的存储器中的指定数据搬移到所述计 算机系统的存储器中, 或者将所述计算机系统的存储器中的指定数据搬移到 所述 PCIe端点设备的存储器中。

37、 根据权利要求 34或 35或 36所述的访问代理, 其特征在于, 所述 访问代理还用于向所述处理器发送第一通知消息, 所述第一通知消息表明 对所述 PCIe端点设备访问成功, 或者向所述处理器发送第二通知消息, 所 述第二通知消息表明对所述 PCIe端点设备访问失败。

38、 一种 PCIe交换器, 其特征在于, 所述 PCIe交换器应用于计算机 系统中,所述计算机系统包括处理器处理器和高速外围组件互联 PCIe总线, 所述 PCIe总线连接至少一个 PCIe端点设备;

所述 PCIe交换器的上游端口通过所述 PCIe总线与所述处理器连接, 所述 PCIe交换器的下游端口通过所述 PCIe总线与所述 PCIe端点设备连接; 所述 PCIe交换器内置如权利要求 34-37任意一项所述的访问代理。

39、一种为接入计算机系统中的高速外围组件互联 PCIe端点设备分配 资源的方法, 其特征在于, 包括:

为 PCIe端点设备的接入端口预留指定份额的资源, 所述指定份额的资 源大于或者等于所述 PCIe端点设备的资源需求量;

根据预留的所述指定份额的资源, 为所述 PCIe端点设备的接入端口分 配所预留的指定份额的资源。

40、 根据权利要求 39所述的方法, 其特征在于, 所述指定份额的资源 为所述计算机系统中资源需求量最大的类型的 PCIe端点设备的资源需求 量。

41、 根据权利要求 39或 40所述的方法, 其特征在于, 所述计算机系 统中接入的 PCIe端点设备与处理器组成一个 PCIe域, 为所述 PCIe域配置 对应的 PCIe树;

所述方法还包括: 在所述 PCIe树中记录为所述 PCIe端点设备的接入 端口所分配的所述指定份额的资源。

42、 根据权利要求 41所述的方法, 其特征在于, 所述方法还包括: 当所述 PCIe端点设备从所述计算机系统离线后, 保留所述 PCIe树中 记录的所述 PCIe端点设备的接入端口所分配的所述指定份额的资源。

43、 一种计算机系统, 其特征在于, 包括:

处理器;

高速外围组件互联 PCIe总线, 用于连接 PCIe端点设备;

基本输入输出系统 BIOS, 用于为所述 PCIe端点设备的接入端口预留 指定份额的资源,所述指定份额大于或者等于所述 PCIe端点设备的资源需 求量;

PCIe管理模块, 用于根据所述 BIOS预留的所述指定份额的资源, 为 所述 PCIe端点设备的接入端口分配所预留的指定份额的资源。

44、 根据权利要求 43所述的计算机系统, 其特征在于, 所述指定份额 为所述计算机系统中资源需求量最大的类型的 PCIe端点设备的资源需求 量。

45、 根据权利要求 43或 44所述的计算机系统, 其特征在于, 所述计 算机系统中接入的 PCIe端点设备与所述处理器组成一个 PCIe域,所述 PCIe 域配置对应的 PCIe树;

所述 PCIe管理模块还用于在所述 PCIe树中记录为所述 PCIe端点设备 的接入端口所分配的所述指定份额的资源。

46、 根据权利要求 45所述的计算机系统, 其特征在于, 所述 PCIe管 理模块还用于:

当所述 PCIe端点设备从所述计算机系统离线后, 保留所述 PCIe树中 记录的所述 PCIe端点设备的接入端口所分配的所述指定份额的资源。

Description:
一种计算机系统、 高速外围组件互联端点设备的访问方法、 和装 技术领域

本发明实施例涉及计算机技术,特别是一种高 速外围组件互联端点设备 的访问方法、 计算机系统和装置。 背景技术

高速夕卜围组件互联 ( Peripheral Component Interconnect Express , PCIe ), 是用于计算和通信平台上的高性能系统总线。 PCIe总线被广泛的应用在中央 处理器( central processing unit, CPU )和外围设备的互连系统中, 在计算和 存储设备中作为核心业务通道。 通过 PCIe总线与 CPU互连的外围设备可以 有多种, 例如网卡设备或固态硬盘(Solid State Disk, SSD )等, 本文件中 将此类设备统称为 PCIe端点设备。

PCIe总线作为服务器或存储系统的总线接口被 泛应用, 系统正常运行 时, 由于在线扩容和维护的需求, 需要在不断电的情况下增加或者移除 PCIe 端点设备, 即热插拔的需求。 现有的 PCIe热插拔遵循以下操作流程: 操作者 通过按下按鈕发起热插拔请求, 热插拔控制器获知到热插拔事件后, 通知系 统中所有可能访问该 PCIe端点设备的驱动停止访问该 PCIe端点设备, 并且将 需要进行热插拔的 PCIe端点设备的资源卸载掉, 此后, 对该 PCIe端点设备下 电, 操作者拔出该 PCIe端点设备。

现有的 PCIe端点设备热插拔需要预先通知才能保证系 正常运行。 然 而, 近年来, PCIe总线逐渐由系统内的互连发展为系统间的 连, 外部线缆 等应用增多, 线缆容易异常脱落, 出现未预先通知的 PCIe端点设备异常离线 的情况。 另外, 用户使用固态硬盘 SSD直接接入系统的场景越来越广泛, 由 于用户习惯的因素, 用户可能不预先通知就直接插拔 SSD盘。 对于上述提到 的 PCIe端点设备突然异常离线的情况, 如果 CPU已经发起对这个 PCIe端点设 备的读写指令, 相关的指令将一直处于待完成状态, 当 CPU对所述 PCIe端点 设备的访问指令持续积累达到一定程度, CPU就会认为整个系统异常, 报出 机器检测异常 (Machine check exception, MCE )错误, 从而导致整个系统 复位。 发明内容

本发明实施例提出了一种高速外围组件互联端 点设备的访问方法、计算 机系统和装置, 在 PCIe端点设备异常离线之后, 避免处理器产生复位。

第一方面,本发明实施例提出了一种计算机系 统,所述计算机系统包括: 处理器;

高速外围组件互联 PCIe总线, 用于连接 PCIe端点设备;

所述计算机系统还包括访问代理, 所述访问代理分别连接所述处理器和 所述 PCIe端点设备;

所述处理器用于获取操作指令, 所述操作指令指示所述处理器通过所述 访问代理对所述 PCIe端点设备进行访问; 以及根据所述操作指令向所述访 问代理发送访问请求, 所述访问请求指示所述访问代理对所述 PCIe端点设 备进行访问;

所述访问代理用于在接收所述处理器发送的访 问请求后, 向所述处理器 发送所述访问请求的响应消息。

结合第一方面, 在第一种可能的实现方式中, 所述计算机系统还包括: PCIe端点设备的驱动模块, 用于根据预先配置的 PCIe端点设备的访问接口 生成所述操作指令, 所述预先配置的 PCIe端点设备的访问接口指向所述访 问代理;

所述处理器具体用于获取所述 PCIe端点设备的驱动模块生成的所述操 作指令。

结合第一方面, 在第二种可能的实现方式中, 所述计算机系统还包括:

PCIe端点设备的驱动模块和主操作系统; 所述 PCIe端点设备的驱动模块用于调用所述主操作 统以进行对所述 PCIe端点设备的访问;

所述主操作系统接收所述 PCIe端点设备的驱动模块的调用, 根据预先 配置的 PCIe端点设备的访问接口生成所述操作指令, 所述预先配置的 PCIe 端点设备的访问接口指向所述访问代理;

所述处理器具体用于获取所述主操作系统生成 的所述操作指令。

结合第一方面或者第一方面的第一种可能的实 现方式或者第一方面的 第二种可能的实现方式, 在第三种可能的实现方式中, 所述访问代理还用 于根据所述访问请求执行对所述 PCIe端点设备的访问。

第二方面,还提出了一种高速外围组件互联 PCIe端点设备的访问方法,

PCIe端点设备通过 PCIe总线连接到计算机系统的处理器, 所述方法包括: 所述处理器获取操作指令, 所述操作指令指示所述处理器通过访问代 理访问所述 PCIe端点设备;

所述处理器根据所述操作指令, 向所述访问代理发送访问请求, 所述 访问请求指示所述访问代理对所述 PCIe端点设备进行访问;

所述处理器接收所述访问代理发送的所述访问 请求的响应消息。

结合第二方面,在第一种可能的实现方式中, 所述处理器获取所述 PCIe 端点设备的驱动模块根据预先配置的所述 PCIe端点设备的访问接口生成的 所述操作指令, 所述预先配置的所述 PCIe端点设备的访问接口指向所述访 问代理; 或者, 所述处理器获取主操作系统根据预先配置的所 述 PCIe端点 设备的访问接口生成的所述操作指令, 所述预先配置的所述 PCIe端点设备 的访问接口指向所述访问代理。 结合第二方面或者第二方面的第一种可能 的实现方式, 在第二种可能的实现方式中, 所述操作指令具体指示所述处 理器通过直接存储器存取 ( Direct Memory Access, DMA ) 引擎访问所述 PCIe端点设备;

所述处理器根据所述操作指令, 向所述 DMA引擎发送数据搬移请求, 所述数据搬移请求指令所述 DMA引擎将所述 PCIe端点设备的存储器中的 指定数据搬移到所述计算机系统的存储器中, 或者将所述计算机系统的存 储器中的指定数据搬移到所述 PCIe端点设备的存储器中。

结合第二方面或者第二方面的第一种可能的实 现方式或者第二方面的 第二种可能的实现方式, 在第三种可能的实现方式中, 还包括:

所述处理器接收所述访问代理发送的第一通知 消息, 所述第一通知消 息表明所述访问代理对所述 PCIe端点设备访问成功;

所述处理器才艮据所述第一通知消息, 获取访问结果。

结合第二方面或者第二方面的第一种可能的实 现方式或者第二方面的 第二种可能的实现方式, 在第四种可能的实现方式中, 还包括:

所述处理器接收所述访问代理发送的第二通知 消息, 所述第二通知消 息表明所述访问代理对所述 PCIe端点设备访问失败;

所述处理器根据所述第二通知消息, 执行访问失败的后续处理。

结合第二方面的第四种可能的实现方式,在第 五种可能的实现方式中, 所述访问失败的后续处理包括:

所述处理器确定所述访问代理对所述 PCIe端点设备访问失败的原因, 若所述访问失败的原因是所述待访问的 PCIe端点设备异常离线, 所述处理 器中止对所述 PCIe端点设备的访问。

第三方面, 提出了一种计算机, 包括:

处理器;

存储器, 用于存储计算机执行指令;

当所述计算机运行时,所述处理器执行所述存 储器存储的所述计算机执 行指令, 并通过通信接口与所述计算机外部的设备进行 通信, 以使所述计 算机执行第二方面所述的一种高速外围组件互 联高速外围组件互联 PCIe端 点设备的访问方法。

第四方面, 提出了一种计算机可读介质, 包括计算机执行指令, 当计算 机的处理器执行所述计算机执行指令时, 所述计算机执行第二方面所述的 一种高速外围组件互联 PCIe端点设备的访问方法。

第五方面, 提出了一种高速外围组件互联 PCIe端点设备的访问方法, PCIe端点设备通过 PCIe总线连接计算机系统的处理器, 所述方法包括: 接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成操作指令, 其中, 所 述预先配置的 PCIe端点设备的访问接口指向访问代理,所述 作指令用以 指示所述处理器通过所述访问代理访问所述 PCIe端点设备。

第六方面, 提出了一种高速外围组件互联 PCIe端点设备的访问装置, 包括:

接收模块, 用于接收调用指令, 所述调用指令指示对所述 PCIe端点设 备进行访问;

生成模块, 用于根据预先配置的所述 PCIe端点设备的访问接口, 生成 对所述 PCIe端点设备进行访问的操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问接口指向所述访问代理, 所述操作指令用以指示所述 处理器通过所述访问代理访问所述 PCIe端点设备。

第七方面, 提出了一种计算机, 包括:

处理器;

存储器, 用于存储计算机执行指令;

当所述计算机运行时,所述处理器执行所述存 储器存储的所述计算机执 行指令, 以使所述计算机执行如下方法:

接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成对所述 PCIe端点设备 进行访问的操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问接 口指向所述访问代理, 所述操作指令用以指示所述处理器通过所述访 问代 理访问所述 PCIe端点设备。 第八方面提出一种计算机可读介质, 包括计算机执行指令, 当计算机 的处理器执行所述计算机执行指令时, 所述计算机执行如下方法:

接收调用指令, 所述调用指令指示对所述 PCIe端点设备进行访问; 根据预先配置的 PCIe端点设备的访问接口, 生成对所述 PCIe端点设 备进行访问的操作指令, 其中, 所述预先配置的所述 PCIe端点设备的访问 接口指向所述访问代理, 所述操作指令用以指示所述处理器通过所述访 问 代理访问所述 PCIe端点设备。

第九方面, 提出一种访问代理, 所述访问代理应用于计算机系统中, 所述计算机系统包括处理器和高速外围组件互 联 PCIe总线, 所述 PCIe总 线连接至少一个 PCIe端点设备;

所述访问代理分别连接所述处理器和所述 PCIe端点设备;

所述访问代理用于隔离所述处理器与 PCIe端点设备之间的直接访问, 接收所述处理器对所述 PCIe端点设备的访问请求, 向所述处理器返回所述 访问请求的响应消息。

第十方面, 提出一种 PCIe交换器, 其特征在于, 所述 PCIe交换器应 用于计算机系统中, 所述计算机系统包括处理器和高速外围组件互 联 PCIe 总线, 所述 PCIe总线连接至少一个 PCIe端点设备;

所述 PCIe交换器的上游端口通过所述 PCIe总线与所述处理器连接, 所述 PCIe交换器的下游端口通过所述 PCIe总线与所述 PCIe端点设备连接; 所述 PCIe交换器内置如第九方面所述的访问代理。

第十一方面, 提出一种为接入计算机系统中的高速外围组件 互联 PCIe 端点设备分配资源的方法, 包括:

为每个 PCIe端点设备的接入端口预留指定份额的资源 所述指定份额 大于或者等于所述 PCIe端点设备的资源需求量;

根据预留的所述指定份额的资源, 为所述每个 PCIe端点设备的接入端 口分配所预留的指定份额的资源。 根据第十一方面, 在第一种可能的实现方式中, 所述指定份额为资源 需求量最大的类型的 PCIe端点设备的资源需求量。

根据第十一方面或在第十一方面的第一种可能 的实现方式, 在第二种 可能的实现方式中, 所述计算机系统中接入的 PCIe端点设备与处理器组成 一个 PCIe域, 所述 PCIe域配置对应的 PCIe树;

所述方法还包括: 在所述 PCIe树中记录为所述每个 PCIe端点设备的 接入端口所分配的所述指定份额的资源。

根据第十一方面的第二种可能的实现方式中, 在第三种可能的实现方 式中, 所述方法还包括:

当所述每个 PCIe端点设备从所述计算机系统离线后, 保留所述 PCIe 树中记录的所述每个 PCIe端点设备的接入端口所分配的所述指定份 的资 源。

第十二方面, 提出一种计算机系统, 包括: 处理器;

高速外围组件互联 PCIe总线, 用于连接 PCIe端点设备;

基本输入输出系统 BIOS, 用于为每个所述 PCIe端点设备的接入端口 预留指定份额的资源, 所述指定份额大于或者等于每个所述 PCIe端点设备 的资源需求量;

PCIe管理模块, 用于根据所述 BIOS预留的所述指定份额的资源, 为所 述每个 PCIe端点设备的接入端口分配所预留的指定份 的资源。

本发明实施例中, 处理器不再直接访问待访问的 PCIe端点设备, 而是 通过访问代理来完成访问, 该访问代理能够隔离 PCIe端点设备异常离线带 来的影响, 并向处理器返回访问请求的响应消息, 使得处理器緩存的任务不 会因为超时而不断积累, 以使得处理器避免 MCE复位。

本发明实施例中, 系统为 PCIe端点设备的接入端口预留并分配指定份 额的资源,使得 PCIe端点设备在接入系统时,处理器可以不再 扫描该 PCIe 端点设备,避免了在 PCIe端点设备接入计算机系统时可能发生的 MCE错误 引发的整个系统复位问题。

附图说明

为了更清楚地说明本发明实施例的技术方案, 下面将对现有技术或实施 例中所需要使用的附图作筒单地介绍, 显而易见地, 下面描述中的附图仅仅 是本发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳 动的前提下, 还可以根据这些附图获得其他的附图。

图 1是根据本发明实施例提供的一种计算机系统 组成图;

图 2是根据本发明实施例存储器所包括的程序模 的组成图; 图 3是根据本发明实施例提供的又一种计算机系 的组成图; 图 4是根据本发明实施例提供的又一种计算机系 的组成图; 图 5是根据本发明实施例提供的一种方法流程图

图 6是根据本发明实施例提供的又一种方法流程 ;

图 7是根据本发明实施例提供的又一种方法流程 ;

图 8是根据本发明实施例提供的又一种方法流程 ;

图 9是根据本发明实施例提供的又一种方法流程 ;

图 10是根据本发明实施例提供的又一种方法流程 ;

图 11是根据本发明实施例提供的一种 PCIe端点设备的访问装置的组成 图;

图 12是根据本发明实施例提供的一种计算机的组 图。 具体实施方式

本发明实施例提出了一种高速外围组件互联端 点设备的访问方法、计算 机系统和装置, 当有 PCIe端点设备需要进行热插拔操作时可以不用 先通 知系统进行预处理, 就直接断开 PCIe端点设备与处理器之间的连接, 此时 处理器也不会产生 MCE复位的风险。本发明实施例将 PCIe端点设备被直接 拔出系统或者出现故障掉线的情况统称为 PCIe端点设备的异常离线。 本发明实施例的系统架构

图 1描绘了本发明实施例提供的计算机系统的组 图, 图 1所示的计算 机系统中包括 CPU 110、 存储器 120和 PCIe端点设备 130, PCIe端点设备 130通过 PCIe总线 140连接到 CPU110,并可以从该计算机系统中插拔出去。 PCIe端点设备 130包含多种类型,例如图形处理单元 131、 网络适配器 132、 固态硬盘 133与视频加速部件 134; 存储器 120用于存储数据, 所存储的数 据可以是 CPU从外部设备获取的数据,也可以是使得 CPU运行的程序数据, 具体地, 存储器中的可以存储有一个或多个的程序模块 , CPU110根据程序 模块的计算机执行指令进行相关操作; 图 1所示的计算机系统中的 PCIe端 点设备 130和 CPU110组成一个 PCIe域,所述 PCIe域中的所有设备通过 PCIe 总线 140与 CPU 110连接并接受 CPU110的控制。

在图 1所示的系统架构下, 如图 2所示, 存储器 120中的程序模块可以 具体包括应用模块 121、 驱动模块 122和主操作系统 Host Operation System ( HOS ) 123,应用模块 121产生对 PCIe端点设备的访问需求,驱动模块 122 用于根据应用模块对 PCIe端点设备的访问需求, 可以调用 HOS123的相应 接口 (如果访问接口由 HOS提供), HOS123根据驱动模块的调用产生操作 指令, 使得 CPU根据操作指令对相应的 PCIe端点设备进行访问或控制。 一 般来说, 一个 PCIe端点设备对应一个驱动模块(当然也可能 个驱动模块 对应多个 PCIe端点设备, 只要保证每个 PCIe端点设备配备一个对应的驱动 模块即可), 例如根据图 1所示的系统架构, 存储器 120中的 PCIe端点设备 的驱动模块可以包括图形处理单元的驱动模块 122-1、 网络适配器 NIC的驱 动模块 122-2、 固态硬盘 SSD的驱动模块 122-3和视频加速部件的驱动模块 122-4。

举例来说, 如果应用模块产生对 SSD 固态硬盘的访问需求, 按照现有 的 CPU对 PCIe端点设备的访问方式, SSD的驱动模块 122-3接收到应用模 块 121的调用后, 接着调用 HOS123, HOS123根据默认配置的访问接口产 生操作指令给 CPUllO, 该操作指令中包括待访问的设备 SSD133的指示以 及相关的操作要求, CPU110根据 SSD 的驱动模块 122-3 的操作指令, 向 SSD133发出访问请求, 要求对 SSD133 的寄存器进行访问, 如果 SSD133 发生异常离线, CPU110将接收不到 SSD133对 CPU110的访问请求的响应 消息, 此时, CPU就会认为此次访问任务未完成, 如果此类未完成的任务在 CPU中积累到一定程度, CPU就会认为整个系统异常, 报出 MCE错误进行 复位。

本发明实施例改变 CPU对 PCIe端点设备的访问方式, CPU将不再直接 访问 PCIe端点设备, 而是通过第三方来访问 PCIe端点设备, 如图 1所示, 本发明实施例在系统中新增加访问代理 160, 该访问代理 160 用于代替 CPU110来访问 PCIe端点设备, 并隔离 PCIe端点设备异常离线对 CPU110 的影响。 如图 1所示, CPU110对 SSD1303的访问将不再采用线路 1 , 而是 采用线路 2和线路 3 (线路 1即图示 Linel , 线路 2即图示 Line2, 线路 3即 图示 Line3 , 图示的 Linel-3的虚线并非实际的连接,仅用于形象的 出各个 组成模块之间的信号流动线路)。 CPU110首先获取操作指令, 所述操作指令 指示所述 CPU通过访问代理 160对 SSD133进行访问, CPU110再通过线路 2向访问代理 160发送访问请求, 访问代理 160通过线路 2向 CPU110返回 该访问请求的响应消息。 后续, 访问代理再根据所述访问请求执行对所述 PCIe端点设备的访问, 即通过线路 3对 SSD133的寄存器进行读写操作。 这 样, 一方面由于 CPU110并不与 PCIe端点设备 130产生直接的信号联系, PCIe端点设备 130的离线与否对于 CPU110而言是不可见的, 即 PCIe端点 设备并不影响 CPU110的业务处理, 另一方面, 本发明实施例提供的访问代 理 160在接收到 CPU110的访问指令之后, 能够向 CPU110返回响应消息, 使得 CPU110发出的访问请求总是能够接收到相应的响 应消息,因此 CPU110 的访问任务不会因为未完成而产生积累, 从而不会产生 MCE错误, 避免了 CPU发起的系统复位。 本发明实施例改变 CPU对 PCIe端点设备的访问方式,可以通过对 PCIe 端点设备相对应的驱动模块进行升级或者改进 来实现。 当通过改造 PCIe端 点设备相应的驱动模块实现的时候, 在 PCIe端点设备相应的驱动模块中预 先配置访问接口,该预先配置的访问接口指向 访问代理, PCIe端点设备相对 应的驱动模块在确定需要对 PCIe端点设备进行访问时, PCIe端点设备的驱 动模块根据预先配置的访问接口生成 CPU的操作指令,该操作指令指示 CPU 通过访问代理来访问 PCIe端点设备。

另外, 改变 CPU对 PCIe端点设备的访问方式, 还可以有其他的实施方 式, 例如, 通过修改 HOS来实现, 在 HOS中预先配置访问接口, 该预先配 置的访问接口指向访问代理。 PCIe端点设备的驱动模块在确定需要对 PCIe 端点设备进行访问时, 仍然调用 HOS 以对 PCIe端点设备进行访问, HOS 收到 PCIe端点设备的驱动发送的调用指令后, 由于其配置的 PCIe端点设备 的访问接口已经被预先配置成了所述访问代理 , 于是 HOS操作指令, 所述 操作指令指示所述 CPU通过访问代理对 PCIe端点设备进行访问。

下面讨论本发明实施例的访问代理的功能和具 体实现形式。本发明实施 例的访问代理包含隔离功能和访问代理功能。 作为隔离模块, 需要保证自身 相对 PCIe端点设备的独立性, 也需要保证自身相对 CPU的独立性。 保持相 对 PCIe端点设备的独立性, 需要保证该访问代理不会跟随 PCIe端点设备一 起被直接拔出, 因此, 该访问代理与 PCIe端点设备在物理设置上需要分属 不同的设备; 保持相对 CPU的独立性, 主要是保证该访问代理具备独立的 处理器, 该访问代理的处理器与系统的 CPU是各自独立的, 即使 PCIe端点 设备被直接拔出时,访问代理模块的受到的影 响也不会传染到 CPU。作为代 理模块, 访问代理需要实现对 PCIe端点设备的访问, 以及对接收到的 CPU 的访问请求返回响应消息, 所述访问请求的响应消息可以是确认响应, 也可 以是拒绝响应或者失败响应, 但无论哪一种响应消息, 均向所述 CPU表示 已经接收到其发送的访问请求, 所述 CPU接收到所述响应消息后, 确定本 次任务完成, 可以关闭对此次任务启动的计时器, 使得 CPU 自身的任务超 时关闭机制保持正常, CPU緩存的其他消息不会因为超时而不断积累, 避 免了 CPU产生 MCE复位。

基于上述对访问代理的功能的考虑,访问代理 的在系统中的设置还可以 有多种形式。 在图 1所示的系统架构中, 访问代理 160是作为一个独立的新 增设备被设置在计算机系统中, 该访问代理通过 PCIe总线分别与所述 CPU 和所述 PCIe端点设备连接。 另外, 访问代理 160还可以与 PCIe域中的已有 设备封装在一起来实现, 例如, 该访问代理 160与所述 CPU封装在一起作 为一个固件。 器存取(Direct Memory Access, DMA ) 引擎实现, 访问代理也可以采用新 的硬件实现, 例如将具备该访问代理功能的软件模块安装在 一个具有独立处 理器的硬件设备上。

由于本发明实施例的访问代理需要向 CPU返回访问请求的响应消息, 在具体实现的时候, 有不同的方式来实现访问代理的这一功能, 其中的一种 实现方式是保证访问代理相对于 CPU的连接关系始终处于保持状态, 即两 者之间的连接关系不会被断开, 或者是访问代理相对于 CPU而言是不可热 插拔的, 例如, 将装载该访问代理的硬件设备或者用于实现该 访问代理的硬 件设备焊接在所述 CPU所连接的印制电路板 PCB上, 或者将装载该访问代 理的硬件设备或者用于实现该访问代理的硬件 设备与所述处理器的相连接 的接口使用连接器件固定。 本发明另一个实施例提供的计算机系统如图 3所示。

图 3所示的计算机系统中除了图 1所示的 CPU、 PCIe总线和 PCIe端点 设备外, 还包括 PCIe交换器 150, 该 PCIe交换器 150上游端口通过 PCIe 总线 140与 CPU110连接, 下游端口面向每个 PCIe端点设备提供一个 PCIe 端口, 所述每个 PCIe端口通过 PCIe总线 140连接到每个 PCIe端点设备, PCIe交换器 150用于将数据向下游路由到对应的 PCIe端口, 以及从每个独 立的 PCIe端口将数据向上游路由至 CPU110。在图 3所示的实施例中,新增 的访问代理 160设置在 PCIe交换器 150内部, 并且本实施例中的访问代理 160通过 DMA引擎实现。 PCIe端点设备 130通过 PCIe总线 140与 PCIe 交换器 150相连接, 由于 PCIe交换器 150与 PCIe端点设备 130分属于不同 的设备,因此,任何一个 PCIe端点设备的直接拔出不会导致 PCIe交换器 150 从系统中被拔出, 也即保证了访问代理 160不会随 PCIe端点设备的拔出而 被拔出, 实现了访问代理 160与 PCIe端点设备 130的独立性; 另外, 在本 实施例中, 由于 DMA引擎具备独立的处理器, 若任意一个 PCIe端点设备 被直接拔出, 即使 DMA对该 PCIe端点设备的访问受到影响, DMA也会隔 离这个影响, 无论是否访问 PCIe端点设备成功, DMA都保证向 CPU110返 回其发出的访问请求的响应消息, 以此避免了 CPU发起的 MCE复位问题。

仍然以应用模块产生对 SSD固态硬盘 133的访问需求为例, CPU110获 取固态硬盘 SSD的驱动模块 122-3生成的操作指令,该操作指令指示 CPU110 通过 DMA来访问 SSD固态硬盘 133, CPU110根据固态硬盘 SSD的驱动模 块 122-3的操作指令向 DMA发送数据搬移请求, 该数据搬移请求指示所述 DMA引擎将所述 PCIe端点设备的存储器中的指定数据搬移到所 计算机系 统的存储器中, 或者将所述计算机系统的存储器中的指定数据 搬移到所述 PCIe端点设备的存储器中, DMA接收到 CPU110的数据搬移请求之后, 向 CPU110返回对该数据搬移请求的响应消息, 并对 SSD固态硬盘 133进行数 据搬移, 在数据搬移结束之后, 向 CPU 110返回访问完成的通知消息, 以通 知 CPU110获取本次访问的结果。

进一步地, 由于本发明实施例中的 DMA 内置于所述 PCIe交换器 150 中,该 PCIe交换器 150还可以焊接在所述 CPU110所连接的印制电路板 PCB 上, 或者将所述 PCIe交换器 150与所述 CPU110的相连接的接口使用连接 器件固定, 以此保证该 PCIe交换器 150内置的 DMA不会从系统中被拔出, 因而保证 DMA总是能够向 CPU返回访问请求的响应消息。

如图 4所示, 为本发明另一个实施例提供的计算机系统。

在图 4 所示的实施例中, 与图 3 所示实施例不同的是, 本实施例在 CPU110中新增访问代理 160,该访问代理 160可以通过 DMA引擎实现。访 问代理 160设置在 CPU110 内部, 也即保证了访问代理 160不会随 PCIe端 点设备的拔出而被拔出, 实现了访问代理 160与 PCIe端点设备 130的独立 性; 另外, 在本实施例中, 由于 DMA引擎具备独立的处理器, 若任意一个 PCIe端点设备被直接拔出,即使 DMA对该 PCIe端点设备的访问受到影响, DMA也会隔离这个影响并不会传染到 CPU110, 无论是否访问 PCIe端点设 备成功, DMA都保证向 CPU110返回其发出的访问请求的响应消息, 以此 避免了 CPU发起的 MCE复位问题。 本实施例中的具体放访问方式同图 1 和图 3实施例所述方式一致, 在此不再赘述。

本发明实施例中的 PCIe端点设备的访问方法可以在图 1或图 3或图 4 所示的计算机系统中实施,但是图 1或图 3或图 4所示的只是适用本发明实 施例的其中一种示例, 并不是对本发明应用的具体限定, 本申请文件对其他 系统实施例或应用场景不再——阐述。 另外, 图 1、 图 3和图 4中描述的访 问代理在系统中的设置只是两个示例, 本领域技术人员还可以将本发明实施 例新增的访问代理设置于位于系统中的其它位 置, 或者根据本发明实施例的 技术原理采用其他技术手段来实现。

图 1、 图 3和图 4中描述的 CPU110也只是一种示例, 例如还可以是特 定集成电路, 不管哪一种形式, 其在计算机系统中, 实现处理器的功能。 本 发明实施例所述的计算机系统, 可以是计算型服务器, 也可以是管理路由的 服务器, 例如交换机, 本发明对计算机系统的具体实现形式不做限定 。

PCIe端点 i殳备的访问流程

下面介绍本发明实施例通过在计算机系统中新 增的访问代理来实现对

PCIe端点设备的访问流程, 如图 5所示, 为本发明实施例提供的对 PCIe端 点设备进行访问的流程, 包括:

S501: CPU获取操作指令, 该操作指令指示所述 CPU通过所述计算机 系统中的访问代理来访问所述 PCIe端点设备;

具体地, 所述操作指令可以由 PCIe端点设备的驱动模块生成, 由于该 PCIe端点设备的驱动模块已经预先配置了 PCIe端点设备的访问接口为所述 访问代理,当上层应用模块产生对某个 PCIe端点设备的访问需求时,该 PCIe 端点设备的驱动模块生成对 PCIe端点设备进行访问的操作指令, 该操作指 令指示所述 CPU通过所述计算机系统中的访问代理来访问所 述待访问的 PCIe端点设备; 或者所述操作指令也可以由计算机系统中的 HOS生成, 该 HOS预先配置了 PCIe端点设备的访问接口为所述访问代理, 当上层应用模 块产生对某个 PCIe端点设备的访问需求时, 该 PCIe端点设备的驱动模块调 用 HOS, HOS根据预先配置的访问接口生成操作指令, 该操作指令指示所 述 CPU通过所述计算机系统中的访问代理来访问所 述待访问的 PCIe端点设 备。

S502: 所述 CPU根据所述操作指令, 向所述访问代理发送访问请求, 该访问请求指示所述访问代理对所述 PCIe端点设备进行访问;

S503: 所述访问代理接收到所述 CPU发送的访问请求后, 向所述 CPU 返回所述访问请求的响应消息;

所述访问请求的响应消息可以是确认响应,也 可以是拒绝响应或者失败 响应, 但无论哪一种响应消息, 均向所述 CPU表示已经接收到其发送的访 问请求, 所述 CPU接收到所述响应消息后, 确定本次任务完成, 可以关闭 对此次任务启动的计时器, CPU自身的任务超时关闭机制保持正常。

上述流程中, CPU不再直接访问待访问的 PCIe端点设备, 而是通过访 问代理来完成访问, 该访问代理能够隔离 PCIe端点设备异常离线带来的影 响, 同时访问代理向 CPU返回访问请求的响应消息, 使得 CPU緩存的任务 不会因为超时而不断积累, 以使得所述 CPU避免 MCE复位。 进一步地, 如图 6所示, 本发明又一流程实施例中, 访问代理对 PCIe 端点设备的访问过程包括:

S601-S603: 同上述步骤 S501-S503, 在此不再赘述;

S604: 所述访问代理根据 CPU的访问请求对所述 PCIe端点设备发起访 问操作;

S605: 所述访问代理确定对所述 PCIe端点设备发起的访问操作是否成 功执行, 若成功, 执行步骤 606, 若失败, 执行步骤 608;

S606: 所述访问代理向所述 CPU发送访问完成的第一通知消息; S607: 所述 CPU接收到所述第一通知消息后, 获取本次访问的结果; 所述 CPU还可以根据所述访问结果通知上层模块本次 访问完成;

S608: 所述访问代理向所述 CPU发送访问失败的第二通知消息; S609: 所述 CPU接收到所述第二通知消息后, 执行访问失败的后续处 理;

具体地,所述访问失败的后续处理包括: 确定所述访问代理对所述 PCIe 端点设备访问失败的原因,若所述访问失败的 原因是由于所述待访问的 PCIe 端点设备异常离线, 所述 CPU中止对所述 PCIe端点设备的访问, 若所述访 问失败的原因是由于所述访问代理自身故障, 所述 CPU对所述访问代理进 行复位或者发出所述访问代理故障的通知, 以修复所述访问代理的故障。

所述 CPU中止对所述 PCIe端点设备的访问之后, 还可以进一步通知上 层模块停止对所述 PCIe端点设备的访问。

上述流程描述了本发明实施例提供的 PCIe端点设备的访问方法, 该方 法中访问代理代替 CPU对 PCIe端点设备进行访问, 并向 CPU返回访问请 求的响应消息, 避免 CPU产生 MCE错误而引起的整个系统的复位。 进一步 地, 在访问代理访问所述 PCIe端点设备失败的时候, 所述访问代理通知所 述 CPU访问失败的消息, 所述 CPU进行故障诊断, 并在确定所述访问失败 是由于所述待访问的 PCIe端点设备异常离线时, 中止对所述待访问的 PCIe 端点设备的访问,从而避免了系统不断进行重 复且不可能成功的访问所造成 的资源浪费。

结合上述图 3或图 4所示的计算机系统实施例, 当访问代理采用 DMA 引擎实现, 上层应用模块产生对 SSD 的读操作需求时, 具体的访问流程如 图 7所示, 包括:

S701: 计算机系统中的 CPU获得操作指令, 所述操作指令携带访问接 口和访问内容, 所述访问接口指向 DMA引擎, 所述访问内容指示访问对象 是所述 SSD、 所述访问是读操作以及所述读操作的源地址; 所述访问内容还 可以进一步指示所述读操作的长度,但是一般 情况下读操作的长度可以以系 统默认的长度为准;

其中, 当上游端点产生对 SSD设备的读操作需求时, 所述 SSD设备的 驱动模块接收上游端点的调用, 根据预先配置的访问接口生成对 PCIe端点 设备进行访问的操作指令。

上述驱动模块向 CPU所发出的操作指令的具体实现方式还可以有 其他 的形式, 例如, 该操作指令携带访问对象是 SSD、 所述访问是读操作以及所 述读操作的起始地址的指示, 另外在该操作指令中还新增一个指示, 指示通 过操作 DMA引擎实现对所述 SSD的访问。

S702: 所述 CPU根据所述操作指令, 向所述 DMA引擎发送数据搬移 请求, 该数据搬移请求用于指令所述 DMA引擎将所述 PCIe端点设备的存 储器中的指定数据搬移到所述计算机系统的存 储器中;

具体地, 所述 CPU在获取了所述 SSD的驱动模块的操作指令之后, 向 所述计算机系统的存储器申请所述读操作的目 的地址,在获取到所述读操作 的目的地址之后, 向所述 DMA引擎发送数据搬移请求, 所述数据搬移请求 指示读操作的源地址、 目的地址和长度, 以指示所述 DMA引擎从所述读操 作的源地址搬移所述读操作的长度的数据到所 述读操作的目的地址; S703: 所述 DMA引擎接收到所述 CPU的所述数据搬移请求之后, 向 所述 CPU返回所述数据搬移请求的响应消息;所述 CPU接收到所述数据搬 移请求的响应消息之后, 不再对该数据搬移请求进行超时计时, 保证 CPU 緩存的其他消息不会因累计而使得所述 CPU产生 MCE复位;

S704: 所述 DMA引擎向所述 SSD设备发起读请求,所述读请求携带所 述读操作的源地址, 所述读请求用以请求将所述读操作的源地址对 应的寄存 器的值读取到所述 DMA引擎的緩存中;

S705: 所述 DMA引擎确定所述读请求是否被成功执行, 若成功, 执行 步骤 706, 若失败, 执行步骤 709;

S706: 所述 DMA引擎将自身緩存中的数据通过写请求写入所 述读操作 的目的地址;

S707: 所述 DMA引擎向所述 CPU发起第一通知消息, 具体的第一通 知消息可以为第一 MSI中断(Message Signaled Interrupts, MSI ), 以通知所 述 CPU所述访问完成;

S708: 所述 CPU接收到所述第一 MSI中断消息后, 到所述读操作的目 的地址读取所述数据, 并可以通知 SSD设备的驱动模块本次访问完成;

S709: 所述 DMA引擎向所述 CPU发起第二通知消息, 具体的第二通 知消息可以为第二 MSI中断, 以通知所述 CPU所述访问失败;

S710: 所述 CPU接收到所述第二 MSI中断消息后, 执行访问失败的后 续处理;

具体地,访问失败的后续处理可以包括:发起 对所述 DMA引擎的诊断, 确定所述 DMA引擎是否发生故障;

若所述 DMA引擎发生故障,所述 CPU对所述 DMA引擎进行复位或者 发出所述 DMA引擎故障的通知, 以修复所述 DMA引擎的故障;

若所述 DMA引擎未发生故障, 则确定所述访问失败的原因是由于所述 SSD设备异常离线, 所述 CPU中止对所述 SSD设备的访问。

进一步,所述 CPU还可以通知所述 SSD设备的驱动模块停止对所述 SSD 设备的访问。

另一方面, 结合如图 3或图 4所示的计算机系统实施例, 当访问代理采 用 DMA引擎实现, 上层应用模块产生对 SSD的写操作需求时, 具体的访问 流程如图 8所示, 包括:

S801: CPU获取所述 SSD设备的驱动模块生成的操作指令, 所述操作 指令携带访问接口和访问内容, 所述访问接口指向 DMA引擎, 所述访问内 容指示访问对象是所述 SSD、 所述访问是写操作、 所述写操作的源地址和目 的地址;

上述驱动模块向 CPU所发出的操作指令的具体实现方式还可以有 其他 的形式, 例如, 该操作指令携带访问对象是 SSD、 所述访问是写操作、 所述 写操作的源地址和目的地址的指示, 另外在该操作指令中还新增一个指示, 指示通过操作 DMA引擎实现对所述 SSD的访问。

S802: 所述 CPU根据所述 SSD驱动模块的操作指令, 向所述 DMA引 擎发送访问请求, 该数据搬移请求指示所述 DMA引擎将所述计算机系统的 存储器中的指定数据搬移到所述 PCIe端点设备的存储器中;

具体地, 所述 CPU在获取了所述 SSD的驱动模块的操作指令之后, 向 所述 DMA引擎发送数据搬移请求, 所述数据搬移请求指示访问所述写操作 的源地址和目的地址和长度, 以指示所述 DMA引擎从所述写操作的源地址 搬移所述写操作的长度的数据到所述写操作的 目的地址;

S803: 所述 DMA引擎接收到所述 CPU的所述数据搬移请求之后, 向 所述 CPU返回所述数据搬移请求的响应消息;

S804: 所述 DMA引擎向所述写操作的源地址发起读请求, 以将所述源 地址的数据读取到所述 DMA引擎的緩存中; S805: 所述 DMA引擎在所述源地址的数据读取到自身緩存之 后, 向所 述 SSD设备发起写请求, 所述写请求携带所述写操作的目的地址, 所述写 请求用以请求将所述 DMA引擎的緩存中的数据写入到所述目的地址对 应的 寄存器中;

S806: 所述 DMA引擎确定所述写请求是否被成功执行, 若成功, 执行 步骤 807, 若失败, 执行步骤 809;

S807:所述 DMA引擎向所述 CPU发起第一 MSI中断( Message Signaled Interrupts, MSI ), 以通知所述 CPU所述访问完成;

S808: 所述 CPU接收到所述第一 MSI中断消息后, 获知本次写操作完 成; 进一步, 可以通知 SSD设备的驱动模块本次访问完成;

S809:所述 DMA引擎向所述 CPU发起第二 MSI中断,以通知所述 CPU 所述访问失败;

S810: 所述 CPU接收到所述第二 MSI中断消息后, 执行访问失败的后 续处理;

具体地,访问失败的后续处理可以包括:发起 对所述 DMA引擎的诊断, 确定所述 DMA引擎是否发生故障;

若所述 DMA引擎发生故障,所述 CPU对所述 DMA引擎进行复位或者 发出所述 DMA引擎故障的通知, 以修复所述 DMA引擎的故障;

若所述 DMA引擎未发生故障, 则确定所述访问失败的原因是由于所述 SSD设备异常离线, 所述 CPU中止对所述 SSD设备的访问。

进一步,所述 CPU还可以通知所述 SSD设备的驱动模块停止对所述 SSD 设备的访问。

上述图 7和图 8所示的流程描述了本发明实施例提供的 DMA引擎完成 对 SSD设备的读或者写的方法流程, 该读或者写的方法中 DMA引擎代替 CPU对 PCIe端点设备进行访问, 并向 CPU返回访问请求的响应消息,使得 CPU不会产生 MCE错误, 避免整个系统的复位。 进一步地, 在 DMA引擎 对所述 SSD设备数据搬移失败的时候, 所述 DMA引擎通知所述 CPU访问 失败的消息, 所述 CPU进行故障诊断, 并在确定所述访问失败是由于所述 SSD设备被直接从系统中拔出或者发生故障时, 中止对所述 SSD设备的访 问, 从而避免了系统不断进行重复且不可能成功的 访问所造成的资源浪费。

另外, 本发明实施例改变 CPU对 PCIe端点设备的访问方式, 可以通过 对 PCIe端点设备相对应的驱动模块或者主操作系 进行升级或者改进来实 现。 如果通过 PCIe端点设备相对应的驱动模块实现改变 CPU对 PCIe端点 设备的访问方式, 可以包括如下流程:

S901: PCIe端点设备的驱动模块接收上层应用模块的 用指令, 所述 调用指令指示对所述 PCIe端点设备进行访问;

S902: PCIe端点设备相对应的驱动模块根据预先配置 PCIe端点设 备的访问接口, 生成操作指令, 其中, 所述预先配置的 PCIe端点设备的访 问接口指向访问代理, 所述操作指令用以指示所述 CPU通过所述访问代理 访问所述 PCIe端点设备。

如果通过主操作系统实现改变 CPU对 PCIe端点设备的访问方式, 可以 包括如下流程:

S1001: PCIe端点设备相对应的驱动模块接收上层应用 块的调用指 令, 所述调用指令指示对所述 PCIe端点设备进行访问;

S1002: PCIe端点设备相对应的驱动模块调用主操作系 , 所述调用 指令指示对所述 PCIe端点设备进行访问;

S1003: 所述主操作系统根据预先配置的 PCIe端点设备的访问接口, 生成操作指令, 其中, 所述预先配置的 PCIe端点设备的访问接口指向访问 代理, 所述操作指令用以指示所述 CPU通过所述访问代理访问所述 PCIe 端点设备。

本发明实施例的装置 如图 11 ,本发明实施例提供的高速外围组件互联 PCIe端点设备的访问 装置包括:

接收模块 1101 , 用于接收调用指令, 所述调用指令指示对所述 PCIe 端点设备进行访问;

生成模块 1102, 用于根据预先配置的所述 PCIe端点设备的访问接口, 生成对所述 PCIe端点设备进行访问的操作指令, 其中, 所述预先配置的所 述 PCIe端点设备的访问接口指向所述访问代理, 述操作指令用以指示所 述 CPU通过所述访问代理访问所述 PCIe端点设备。

具体地, 所述访问装置可以是所述 PCIe端点设备的驱动模块或者所述 计算机系统的主操作系统。

如图 12, 为本发明实施例的计算机的结构组成示意图。 本发明实施例的 计算机可包括:

处理器 1201、存储器 1202、 系统总线 1204和通信接口 1205。 CPU120 存储器 1202和通信接口 1205之间通过系统总线 1204连接并完成相互间的 通信。

处理器 1201可能为单核或多核中央处理单元, 或者为特定集成电路, 或者为被配置成实施本发明实施例的一个或多 个集成电路。

存储器 1202 可以为高速 RAM 存储器, 也可以为非易失性存储器 ( non-vo la t i l e memory ), 例如至少一个磁盘存储器。

存储器 1202用于计算机执行指令 1203。 具体的, 计算机执行指令 1203 中可以包括程序代码。

当计算机运行时, 处理器 1201运行计算机执行指令 1203 , 可以执行图 5-图 10任意之一所述的方法流程。

PCIe端点设备的接入计算机系统

当 PCIe端点设备被拔出计算机系统后, 后续还有可能被重新插入计算 机系统中, 另外, 也存在一个新的 PCIe端点设备需要接入正在运行状态的 计算机系统中的情形, 例如, 随着 SSD设备的普及, 用户直接插拔 SSD设 备的现象会越来越频繁。 在现有技术中, 当任何一个 PCIe端点设备上电接 入系统的时候, CPU都会启动对该 PCIe端点设备的扫描和资源分配流程, 而在此 CPU对新上电的 PCIe端点设备的扫描过程中, 若该 PCIe端点设备 被从系统中直接拔出, 也有可能造成 CPU报出 MCE错误, 从而引发系统的 复位, 为了规避上述问题, 本发明实施例提出了一种新的 PCIe端点设备的 资源分配方案,从而使得 PCIe端点设备新上电接入系统的的时候, CPU不 用再去对该新上电的 PCIe端点设备进行扫描和资源分配。

在计算机系统启动时, 计算机系统的基本输入输出系统(Basic

Input-Output System, BIOS)需要为系统中的每个设备预留资源, 针对 PCIe 端点设备, BIOS会对每个 PCIe端点设备的接入端口进行扫描, 当扫描到有 PCIe端点设备后, BIOS去读 PCIe端点设备的相应寄存器, 根据 PCIe端点 设备的需求进行相应的资源预留, 例如总线资源和内存地址资源的预留。 本 发明实施例中所说的 PCIe端点设备的接入端口, 具体来说, 可以是 PCIe交 换器的下行端口或者是系统中北桥的下行端口 。

本发明实施例提供的 PCIe 端点设备的资源分配方案, 计算机系统的 BIOS在资源预留的方式与现有技术不同, 所述 BOIS在计算机系统启动的 时候, 不再根据实际扫描到的 PCIe端点设备的实际需求进行资源预留, 而 是为每个 PCIe端点设备的接入端口预留指定份额的资源 所述指定份额大 于或者等于 PCIe端点设备的资源需求量, 优选地, 所述指定份额可以是资 源需求量最大的类型的 PCIe端点设备的资源需求量。例如,所述 BIOS对所 述计算机系统中的每个 PCIe端点设备的接入端口进行扫描, 无论是否扫描 到 PCIe端点设备, 也无论扫描到的是哪一种类型的 PCIe端点设备, 都指定 每个 PCIe端点设备的接入端口后续可能接入资源需 最大的类型的 PCIe端 点设备, 如果当前系统中可能会用到 10种 PCIe端点设备, 其中资源需求量 最大的是 SSD设备, 它需要 10M的不可预取内存资源和 3条 PCIe总线, 那 么, BIOS就在每个 PCIe端点设备的接入端口上都预留 3条 PCIe的总线资 源和 10M的不可预取资源。

其次,在所述 BIOS进行资源预留之后,所述计算机系统的 PCIe管理模 块将所述计算机系统中的一个 CPU 管理的所有 PCIe端点设备和 PCIe交换 器组成一个 PCIe域, 并为所述 PCIe域配置对应的 PCIe树, 所述 PCIe树用 来描述所述 PCIe域中的各个 PCIe端点设备到所述 CPU的每一层的连接关 系和每个 PCIe端点设备的资源配置情况。 由于 BIOS已经为每个 PCIe端点 设备的接入端口预留了指定份额的资源, 所述 PCIe管理模块在加载所述每 个 Cle端点设备的接入端口时, 所述 PCIe管理模块也不再去扫描该端口的 PCIe端点设备的资源实际需求量, 而是根据 BIOS的之前的资源预留情况进 行资源分配,即为所述每个 PCIe端点设备的接入端口分配所述 BIOS所预留 的指定份额的资源, 并将所述指定份额的资源分配情况记录到所述 PCIe树 中。

进而, 当 PCIe端点设备由于发生故障或者被从所述计算 系统中离线 时, 所述 PCIe管理模块在确定该 PCIe端点设备离线时, 并不释放为所述下 电的 PCIe端点设备分配的所述指定配额的资源, 并且, 保持所述 PCIe树的 结构不变, 即在所述 PCIe树中保留所述离线的 PCIe端点设备的连接关系和 资源配置情况。 这样, 由于, 所述 PCIe端点设备的资源和连接关系在所述 PCIe域中已经配置好, 当所述 PCIe端点设备上电接入所述 PCIe域时,所述 PCIe 管理模块通知该对应的驱动模块所述 PCIe端点设备上电完成, 所述 PCIe端点设备即完成接入所述计算机系统中的 PCIe域。 上述方案在 PCIe 端点设备上电时, CPU不用再去扫描该 PCIe端点设备, 从而进一步避免了 在 PCIe端点设备接入计算机系统时可能发生的 MCE错误引发的整个系统复 位问题。

本领域普通技术人员将会理解, 本发明的各个方面、 或各个方面的可 能实现方式可以被具体实施为系统、 方法或者计算机程序产品。 因此, 本 发明的各方面、 或各个方面的可能实现方式可以采用完全硬件 实施例、 完 全软件实施例 (包括固件、 驻留软件等等), 或者组合软件和硬件方面的实 施例的形式, 在这里都统称为"电路"、 "模块 "或者 "系统"。 此外, 本发明的 各方面、 或各个方面的可能实现方式可以采用计算机程 序产品的形式, 计 算机程序产品是指存储在计算机可读介质中的 计算机可读程序代码。

计算机可读介质可以是计算机可读信号介质或 者计算机可读存储介 质。 计算机可读存储介质包含但不限于电子、 磁性、 光学、 电磁、 红外或 半导体系统、 设备或者装置, 或者前述的任意适当组合, 如随机存取存储 器 (RAM)、 只读存储器 (ROM)、 可擦除可编程只读存储器 (EPROM 或者 快闪存储器)、 光纤、 便携式只读存储器 (CD-ROM)。

计算机中的处理器读取存储在计算机可读介质 中的计算机可读程序代 码, 使得处理器能够执行在流程图中每个步骤、 或各步骤的组合中规定的 功能动作; 生成实施在框图的每一块、 或各块的组合中规定的功能动作的 装置。

计算机可读程序代码可以完全在用户的计算机 上执行、 部分在用户的 计算机上执行、 作为单独的软件包、 部分在用户的计算机上并且部分在远 程计算机上, 或者完全在远程计算机或者服务器上执行。 也应该注意, 在 某些替代实施方案中, 在流程图中各步骤、 或框图中各块所注明的功能可 能不按图中注明的顺序发生。 例如, 依赖于所涉及的功能, 接连示出的两 个步骤、 或两个块实际上可能被大致同时执行, 或者这些块有时候可能被 以相反顺序执行。

本领域普通技术人员可以意识到, 结合本文中所公开的实施例描述的 各示例的单元及算法步骤, 能够以电子硬件、 或者计算机软件和电子硬件 的结合来实现。 这些功能究竟以硬件还是软件方式来执行, 取决于技术方 案的特定应用和设计约束条件。 专业技术人员可以对每个特定的应用来使 用不同方法来实现所描述的功能, 但是这种实现不应认为超出本发明的范 围。

以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不局 限于此, 任何熟悉本技术领域的技术人员在本发明揭露 的技术范围内, 可 轻易想到变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本发明 的保护范围应所述以权利要求的保护范围为准 。