专利名称:非一致存储器访问i/o框架的制作方法
非一致存储器访问I/o框架
背景技术:
一些现代计算系统架构利用物理上和概念上分离的节点来改变计算硬件的速度。在这些架构中,输入/输出器件可以位于计算机上的各种物理位置中。分离节点上的不同应用和处理可以使用每个输入/输出器件。在这些架构上执行的内核元件可以负责促进输A/输出器件与物理上远离该器件的应用之间的通信。
发明内容
大体上,在一方面,本发明涉及一种非暂时性计算机可读介质,其包括软件指令,所述软件指令在由处理器运行时执行一种方法。所述方法包括:输入/输出(I/o)子系统从处理接收使用I/o器件的请求;确定服务于所述请求的第一资源;生成与所述第一资源对应的第一 I/o对象,其中所述第一 I/O对象未被绑定;以及将所述第一 I/O对象发送到非一致存储器访问(NUMA) I/O框架。所述方法还包括:所述NUMA I/O框架选择多个NUMA节点中将所述第一 I/O对象绑定到的第一 NUMA节点,以及将所述第一 I/O对象绑定到所述第一 NUMA节点。所述方法还包括:通过在所述第一 NUMA节点上处理与所述第一 I/O对象对应的所述第一资源来服务于所述请求。大体上,在一方面,本发明涉及一种包括非一致性存储器访问(NUMA)节点的系统。所述NUMA节点包括:第一 NUMA节点,其包括第一处理器和第一存储器;以及第二 NUMA节点,其包括第二处理器和第二存储器。所述系统还包括:输入/输出(I/O)器件组,其包括I/O器件。所述系统还包括I/O子系统,其在所述NUMA节点中的至少一个上执行,并且被配置为:从在所述第一 NUMA节点上执行的处理接收使用所述I/O器件的请求,确定服务于所述请求所需的第一资源,以及生成与所述第一资源对应的第一 I/O对象,其中所述第一 I/O对象未被绑定。所述系统还包括:NUMA I/O框架,其在所述多个NUMA节点中的至少一个上执行,并且被配置为:从所述I/O子系统接收所述第一 I/O对象,选择所述第二 NUMA节点,以及将所述第一 I/O对象绑定到所述第二 NUMA节点。通过在所述第二 NUMA节点上处理与所述第一 I/O对象对应的所述第一资源来服务于所述请求。大体上,在一方面,本发明涉及一种将输入/输出(I/O)对象绑定到节点的方法。所述方法包括:网络媒体访问连接(MAC)层从处理接收打开网络连接的请求,确定服务于所述请求的线程,生成与所述线程对应的第一 I/O对象,其中所述第一 I/O对象未被绑定,以及将所述第一 I/O对象发送到非一致性存储器访问(NUMA)I/0框架。所述网络MAC层与物理网络接口卡(NIC)关联。所述方法还包括:所述NUMA I/O框架选择将所述第一 I/O对象绑定到的第一 NUMA节点,以及将所述第一 I/O对象绑定到所述第一 NUMA节点。所述方法还包括:通过在所述第一NUMA节点上处理与所述第一 I/O对象对应的所述线程来服务于所述请求。本发明的其它方面将从以下描述和所附权利要求变得显然。
图1示出根据本发明的一个或多个实施例的系统。图2示出根据本发明的一个或多个实施例的NUMA节点。图3示出根据本发明的一个或多个实施例的I/O器件组。图4示出根据本发明的一个或多个实施例的系统。图5示出根据本发明的一个或多个实施例的I/O拓扑模块。图6示出根据本发明的一个或多个实施例的地点组模块。图7示出根据本发明的一个或多个实施例的负载平衡模块。图8示出根据本发明的一个或多个实施例的I/O对象组。图9示出根据本发明的一个或多个实施例的流程图。图10示出根据本发明的一个或多个实施例的流程图。图11示出根据本发明的一个或多个实施例的流程图。图12A示出根据本发明的一个或多个实施例的示例性系统。图12B示出根据本发明的一个或多个实施例的示例性时间线。图13示出根据本发明的一个或多个实施例的系统。
具体实施例方式将参照附图描述本发明的示例性实施例。附图中相似的项以相同的附图标记示出。在本发明实施例中,阐述大量具体细节以提供对本发明的更透彻理解。然而对本领域技术人员而言将显然的是,可以在没有这些具体细节的情况下实践本发明。在其它实例中,并未详细描述公知特征,以免模糊本发明。大体上,本发明的实施例涉及用于管理具有非一致存储器访问(NUMA)架构的系统上的输入/输出(I/o)资源的框架。更特别地,本发明的实施例涉及用于创建NUMA系统上的节点与连接到系统的I/O资源之间的抽象层的方法和系统。图1示出根据本发明一实施例的系统。如图1所示,该系统包括节点A(100A)、节点B (100B)、节点C (100C)和节点N (IOON)0每个节点(节点A (100A)、节点B (100B)、节点 C (100C)和节点 N (100N))操作上经由互连(IC) (IC A (102A)、IC B (102B)、ICC (102C)、IC N (102N))连接到一个或多个其它节点。每个节点(节点A (100A)、节点B(100B)、节点C (100C)和节点N (100N))也操作上连接到一个或多个I/O器件组(I/O器件组 A (104A)、I/O 器件组 D (104D)、I/O 器件组 C (104C)、I/O 器件组 B (104B)、I/0 器件组E (104E)、I/O器件组N (104N))(见图3)。该系统还包括I/O子系统(106)和NUMAI/O框架(108)。在本发明的一个或多个实施例中,图1描述的系统架构可以操作为具有NUMA架构的系统。在本发明的一个或多个实施例中,IC (IC A (102A)、IC B (102B)、IC C(102C)、IC N (102N))可以实现为能够在NUMA架构系统上的节点之间传送数据的计算机总线或数据链路。在本发明的一个或多个实施例中,I/O子系统(106)(又称为I/O框架)提供系统处理与各种系统I/o功能之间的抽象层。具体地说,I/O子系统(106)可以对利用该框架的软件实体如何与彼此通信进行多种控制,并且可以包括用于另外其他系统目的(例如电源管理、消耗方优先级等)的机制。I/O子系统(例如I/O子系统(106))的示例包括但不限于存储栈、InfiniBand ULP (InfiniBand是InfiniBand贸易协会的注册商标)以及网络MAC层。在本发明的一个或多个实施例中,每个I/O子系统从其它软件实体接收使用或访问其关联的I/o器件的请求。在本发明的一个或多个实施例中,每个I/O子系统包括管理服务于该请求所需的I/o资源的功能。I/O受管理资源可以包括例如线程、中断(interrupt)以及软件接收环(ring)。此外,I/O子系统(106)可以通过初始化与受管理资源对应的I/O对象来管理其关联资源。(见图8)。此外,由一个或多个I/O子系统(106)管理的I/O资源可以在单个节点(例如节点A (IOOA))上、在多个节点(例如节点A (IOOA)和节点B (IOOB))上或在单个系统内的所有节点上存在或运行。I/O子系统(106)中的每个也可以在单个节点(例如节点A (IOOA))上、在多个节点(例如节点A (IOOA)和节点B (IOOB))上或在单个系统内的所有节点上运行。相应地,为了示范,I/O子系统(106)和NUMA I/O框架(108)在图1中示为在系统上的其它元件的外部。在本发明的一个或多个实施例中,NUMA I/O框架(108)是I/O子系统(106)与下面的NUMA架构(例如图1所示的系统)之间的抽象层。NUMA I/O框架(108)承担确定何处以及如何处理I/O对象(例如对I/O资源的引用)的所有责任。具体地说,NUMA I/O框架管理由I/O子系统(106)管理的I/O资源的物理位置。在本发明的一个或多个实施例中,NUMA I/O框架使用实施来推动系统目标的策略或信息收集模块来确定I/O对象的安置(见图 4-7)。在本发明的一个或多个实施例中,NUMA I/O框架(108)将I/O资源绑定到系统上的一个或多个节点。将I/o资源绑定到节点可以包括:向内核调度器通知将要在I/O资源绑定到的一个或多个节点上执行与I/o资源关联的指令。在本发明的一个或多个实施例中,一旦I/O资源绑定到一个或多个节点(例如经由I/O对象),源自该I/O资源的指令或消息就被调度为用于在其绑定到的节点上执行,直到存在NUMA I/O框架(108)的进一步干预。在本发明的一个实施例中,I/O资源可以绑定到节点的子集(例如经由I/O对象)。作为绑定I/O资源的一部分,NUMA I/O框架(108)可以提供关于节点子集的内核调度器信息。内核调度器然后可以选择在节点子集中的哪个节点上调度指令或消息以用于执行。图2示出根据本发明一实施例的节点。如图2所示,节点A (200A)操作上经由IC(IC A (202A)、IC N (202N))连接到节点 B (200B)和节点 N (200N)。节点 A (200A)包括经由总线(210 )连接到存储器(208 )的中央处理单元(CPU) (204)和高速缓存(cache ) (206 )。系统中的其它节点中的每个(节点B (200B)、节点N (200C))可以包括与节点A (200A)中所描述的那些基本相似的元件。在本发明的一个或多个实施例中,存储器(208)包括本地应用存储器和本地内核存储器。可以分配一部分本地内核存储器,以供系统侧软件元件(例如I/o子系统、NUMA I/O框架等)使用。在本发明一实施例中,存储器(208)在对于节点A (200A)上的CPU (204)特定的存储器管理器的控制之下,节点B (200B)的存储器(未示出)在对于节点B (200B)的CPU (未示出)特定的存储器管理器的控制之下。换言之,上述架构与所有CPU从单个存储器管理器竞争存储器的架构相比可以更高效地操作。可以在除了上述系统架构之外的系统架构上实施本发明的其它实施例。在本发明的一个或多个实施例中,每个节点(节点A (200A)、节点B (200B)、节点N(200B))可以操作地连接到一个或多个I/O器件组。如图2所示的那样,节点A (200A)操作上连接到一个或多个I/O器件组(10器件组A (212A)、I/0器件组N(212N))。在本发明一实施例中,I/O器件组中的一个或多个(例如I/O器件组A (212A)、I/0器件组N (212N))可以经由IC连接到一个或多个节点。在本发明的一个或多个实施例中,NUMA节点可以包括CPU (例如CPU (204)),而不包括存储器。替代地,在本发明一实施例中,NUMA节点可以包括存储器(例如存储器(208)),但不包括CPU。图3示出根据本发明一实施例的I/O器件组。如图3所示,I/O器件组(300)包括一个或多个I/o器件(10器件A (302A)、I/0器件N (302N)),其操作上连接到I/O总线(304),I/O总线(304)进而操作上连接到I/O桥(306)。I/O桥(306)操作上连接到一个或多个节点(节点A (308A)、节点N (308N))(例如图1中的节点A (100A))。在本发明一实施例中,I/O器件(10器件A (302A)、I/O器件N (302N))指的是连接到计算机系统的资源,其可以由在系统上执行的程序使用,以用于信息输入和/或信息输出。这种器件的示例可以包括但不限于盘驱动器、网络接口卡、打印机、通用串行总线(USB)等。本领域技术人员应理解,存在这里未列出的其它I/O器件。图4示出根据本发明一实施例的系统。具体地说,图4示出根据本发明一实施例在系统的一个或多个节点(例如图1中的节点A (200A)、节点B (200B)和节点N (200N))上执行的软件实体之间的交互。如图4所示,系统包括NUMA I/O框架(400),其直接地或经由内核亲和性API (404)与I/O子系统(402)进行通信。I/O子系统(402)促进消耗方(406)与I/O器件(408)之间的通信(经由器件驱动器(410))。I/O子系统也可以从管理工具(412)接收I/O对象约束或限制信息。在本发明的一个或多个实施例中,NUMA I/O框架(400)利用多个专用模块来执行具体任务和收集信息。这些模块包括NUMA内核存储器分配模块(414)、I/O负载平衡模块(416)、NUMA地点(1cality)组模块(418)和I/0拓扑模块(420)。以下详细描述这些元件中的每一个。在本发明的一个或多个实施例中,消耗方(消耗方(406))指的是利用或试图利用系统的I/o资源的处理和程序。消耗方可以在内核级别操作(例如,作为操作系统的一部分),或可以在用户级别操作(例如,作为应用的一部分)。I/o资源可以包括I/O器件(例如I/O器件(408))、处理资源(例如图2中的CPU (204)和存储器(208))以及促进处理与I/O器件之间的通信的其它系统元件(例如中断、接收环、监听方等),并且可以包括物理或虚拟元件。在本发明的一个或多个实施例中,I/O子系统(402)管理服务于从消耗方(406)接收到的访问I/o器件(408)的请求所需的I/O资源。这些请求可以包括打开到I/O器件(408)的连接的调用,或经由适当的I/O子系统(402)以其他方式访问I/O器件(408)。I/O子系统(402)还可以包括如下功能:初始化或实例化I/O对象,以及将I/O对象与I/O资源关联。具体地说,I/o子系统(402)可以创建包括对I/O资源的引用的I/O对象,其可以然后被提供给NUMA I/O框架(400)作为绑定I/O资源的请求的一部分(见图8)。在本发明一实施例中,NUMA I/O框架(400)从I/O子系统(402)接收I/O对象。可以经由内核亲和性API (404)接收I/O对象,内核亲和性API (404)为I/O子系统(402)提供接口以将I/O对象注册到NUMA I/O框架(400)。此外,注册到NUMA I/O框架(400)的I/O对象可以包括关于I/O对象分组、I/O对象之间的亲和性以及与I/O对象关联的任何约束的信息。NUMA I/O框架(400)使用亲和性来确定I/O对象应绑定到的适当的一个或多个节点。(例如,物理上彼此靠近的节点、物理上靠近所指定的I/O器件的节点等)。在本发明的一个或多个实施例中,I/O对象以一个或多个I/O对象组(见图8)发送到NUMA I/O框架(400)。在本发明一实施例中,NUMA I/O框架(400)将I/O对象绑定到节点。在本发明一实施例中,绑定I/o对象指的是将I/O对象所引用的I/O资源发布的任务(例如处理中断、执行线程)分配给系统上的一个或多个节点。在本发明的一个或多个实施例中,NUMA I/O框架(400)使用I/O对象内的信息(例如亲和性)以及来自系统上的其它模块的信息和这些模块的功能以完成绑定。下面分别关于图5、图6和图7讨论负载平衡模块(416)、地点组模块(418)和I/O拓扑模块(420)。在本发明一实施例中,NUMA I/O框架(400)可以根据一个或多个目的来绑定I/O对象。例如,NUMA I/O框架(400)可以绑定I/O对象以使得整个系统的性能最大化。替代地,NUMA I/O框架(400)可以按照最高效地使用系统资源的方式来绑定I/O对象。NUMA I/O框架(400)也可以绑定I/O对象以使得执行一个或所有处理的速度最大化。NUMA I/O框架(400)可以按照使得正使用的I/O器件与绑定到关联的I/O对象的节点之间的距离最小化的方式来绑定I/O对象。在本发明的一个或多个实施例中,内核存储器分配模块(414)允许NUMA I/O框架(400)分配来自任何附连节点的内核存储器(例如来自图2中节点A (200A)中的存储器(208))。在本发明一实施例中,负载平衡模块(416)监视每个节点执行的工作量,并且考虑到资源管理和I/O拓扑(即节点相对于彼此的位置)而对节点之间的工作进行动态平衡。在本发明一实施例中,系统节点进行的工作量或处理速率被称为节点的I/O负载。图5示出根据本发明一实施例的I/O拓扑模块。如图5所示,I/O拓扑模块(500)包括一个或多个I/o器件记录(I/O器件记录A (502A)、I/O器件记录N (502N))。I/O拓扑模块(500)使用从I/O子系统(例如图4中的I/O子系统(402))收集到的信息来为系统上的每个I/O器件(例如图4中的I/O器件(408))创建I/O器件记录。每个I/O器件记录(例如I/O器件记录A (502A)、I/0器件记录N (502N))包括指示哪些系统节点直接连接到I/o器件的信息。替代地,在本发明的一个或多个实施例中,由I/O拓扑模块(500)可访问的系统上的其它内核元件创建和维护I/o器件记录。关于系统上的每个I/O器件的位置的信息可以被称为I/o拓扑。在本发明的一个或多个实施例中,I/O拓扑模块(500)包括如下功能:对NUMA I/O框架的询问进行响应,从而对于给定的I/O器件,I/O拓扑模块(500)返回直接连接到该I/O器件的一个或多个节点。在本发明一实施例中,这些节点被称为优选节点。图6示出根据本发明一实施例的地点组模块。如图6所示,地点组模块(600)包括一个或多个地点组(例如节点A地点组(602A)、节点N地点组(602N))。每个地点组维护关于系统上的节点的信息。该信息可以包括在系统上该节点相对于其它节点的位置(即,哪些节点与该节点直接相邻)。关于系统上的每个节点的位置的信息可以被称为NUMA拓扑。在本发明一实施例中,节点或I/O器件之间的距离指的是两个元件之间的物理距离。在本发明一实施例中,该距离可以指的是两个元件之间的节点数(又称为“跳”)。此外,在本发明一实施例中,可以关于数据从一个节点行进到另一节点所需的时间(又称为节点之间的等待时间(latency ))来表示节点之间的距离。在本发明的一个或多个实施例中,地点组模块(600)包括如下功能:对NUMA I/O框架的询问进行响应,从而对于给定的节点,地点组模块(600 )返回直接连接到该节点的一个或多个节点。在本发明一实施例中,这些节点被称为优选节点。图7示出根据本发明一实施例的负载平衡模块。如图7所示,负载平衡模块(700)包括一个或多个负载监视器(例如节点A负载监视器(702A)、节点N负载监视器(702N))。每个负载监视器(例如节点A负载监视器(702A)、节点N负载监视器(702N))维护关于对应节点利用和I/O负载容量的信息(例如CPU利用、存储器利用等)。具体地说,每个负载监视器(例如节点A负载监视器(702A)、节点N负载监视器(702N))获得指定度规(metric)的周期性测量(例如CPU利用、存储器利用等),并且使用测量来计算节点的I/O负载。在本发明一实施例中,I/O负载包括反映所测量的度规的趋势方向的指示符(例如在过去的10个周期上增大的CPU利用)。此外,在本发明一实施例中,每个负载监视器(例如节点A负载监视器(702A)、节点N负载监视器(702N))包括如下功能:随时间跟踪度规,并且检测I/O负载的模式(例如CPU利用在星期一下午2点至5点之间最大)。I/O负载还用于计算节点I/O负载容量。图8示出根据本发明一实施例的I/O对象组。如图8所示,I/O对象组(800)包括一个或多个I/o对象(例如I/O对象A (802A)、I/0对象N (802N))。在本发明的一个或多个实施例中,I/O对象是封装对应的I/O资源的句柄或对对应的I/O资源的引用的软件结构。每个I/O对象可以还包括与其它I/O对象的一个或多个亲和性、关于I/O对象绑定的约束、以及专用CPU标记。在本发明的一个或多个实施例中,亲和性是I/O对象之间的关系强度的数量指示(例如无关系、弱关系、强关系、负关系等)。两个I/O对象(I/O对象A (802A)、I/O对象N(802N))之间的亲和性定义I/O对象可以或应绑定到的节点之间的最大或最小允许距离。在本发明的一个或多个实施例中,亲和性由管理I/O对象的I/O子系统指定。在本发明的一个或多个实施例中,I/O子系统创建与一起工作以执行一部分I/O操作的I/o资源对应的I/O对象(例如I/O对象A (802A)、I/0对象N (802N))之间的亲和性。例如,与用于虚拟网络接口卡所接收到的业务的中断对应的I/O对象可以具有与处理同一虚拟网络接口卡上的数据的其它中断和线程对应的其它I/O对象的强亲和性。在本发明的一个或多个实施例中,约束可以指定I/O对象或I/O对象组必须绑定到的节点或节点组。约束可以用于将I/o对象或I/O对象组限制到所批准的或适当的节点集合。约束可以用于将一个I/o对象或I/O对象组与其他的相隔离。在本发明的一个或多个实施例中,I/o子系统可以使用约束来强制分离系统上的区域或容器(container)。在本发明的一个或多个实施例中,专用CPU标记可以指示I/O对象应绑定到具有可用于专用于I/o对象的CPU的节点。NUMA I/O框架可以将专用CPU标记解释为绝对限制,或替代地解释为优选。在本发明一实施例中,专用CPU标记可以包括指示优选强度的其它信息。图9示出根据本发明的一个或多个实施例的用于将新I/O器件注册到NUMA I/O框架的流程图。在本发明的一个或多个实施例中,图9所示的一个或多个步骤可以被省略、重复和/或按与图9所示不同的顺序执行。相应地,图9所示的步骤的具体布置方式不应理解为限制本发明的范围。在步骤910中,I/O拓扑模块检测(或者以其他方式被通知)新I/O器件附连到系统。在步骤912中,I/O拓扑模块创建新I/O器件记录。在步骤914中,I/O拓扑模块将新I/O器件信息加入到I/O器件记录。在步骤916中,I/O拓扑模块从地点组模块或从其它系统资源(例如BIOS、机器描述等)获得新I/O器件的位置信息。该信息可以包括未直接连接至IJ I/O器件的对于I/O器件最接近的节点。在步骤918中,I/O拓扑模块使用从地点组模块所获得的位置信息来更新I/O器件记录。图10示出根据本发明的一个或多个实施例的I/O子系统服务于请求的流程图。在本发明的一个或多个实施例中,可以省略、重复和/或按与图10所示不同的顺序执行图10所示的一个或多个步骤。相应地,图10所示的步骤的具体布置方式不应理解为限制本发明的范围。在步骤1010中,处理将请求发送到I/O子系统,以使用I/O器件。所述请求可以是例如这样的请求:创建与网络接口卡关联的数据链路。替代地,请求可以是获取对存储器件的访问,以更改位于该器件上的数据。到来的请求的其它示例包括来自网络栈的请求(例如创建VNIC)以及来自文件系统的请求。在步骤1012中,I/O子系统确定服务于该请求所需的资源。这可以包括例如线程的具体数量和中断的具体数量。在本发明一实施例中,该确定是基于先前所服务的相似请求的需求的。在本发明一实施例中,由于分析使用信息,因此所确定的资源可以随时间而改变。例如,创建处理与物理网络之间的连接的I/O子系统可以配置为创建指定数量的用于线程的I/o对象以及指定数量的用于中断的I/O对象,以用于所创建的类型的连接。I/O子系统可以进一步配置为指定线程不应在分离节点上执行,因为这样做可能导致对于连接不可接受量的缓慢性或数据丢失。为此,I/o子系统可以通过指定I/O对象之间的强亲和性来表示这点。在步骤1014中,I/O子系统创建用于必要资源的I/O对象。在步骤1016中,I/O子系统将I/o对象发送到NUMA I/O框架。在本发明一实施例中,通过援引亲和性内核API的方法调用来创建I/O对象。在步骤1018中,I/O子系统指定供NUMA I/O框架使用的I/O对象之间的亲和性。在步骤1020中,NUMA I/O框架基于策略和亲和性而将I/O对象绑定到节点。关于图11详细说明步骤1020。图11示出根据本发明的一个或多个实施例的通过NUMA I/O框架绑定I/O对象的流程图。在本发明的一个或多个实施例中,可以省略、重复和/或按与图11所示不同的顺序执行图11所示的一个或多个步骤。相应地,图9所示的步骤的具体布置方式不应理解为限制本发明的范围。在步骤1110中,NUMA I/O框架接收将I/O对象组绑定到NUMA节点集合的请求。在步骤1112中,NUMA I/O框架获得I/O对象组中的每个I/O对象的I/O对象亲和性。在本发明一实施例中,假定I/O对象组中的所有I/O对象之间的亲和性。在步骤1114中,NUMAI/O框架确定I/O对象组约束。在本发明一实施例中,亲和性和约束嵌入在所接收到的I/O对象中。在步骤1116中,NUMA I/O框架利用关于I/O对象亲和性和约束的信息以及关于I/O对象所获得的任何其它限制或指示(包括专用CPU标记的存在)来确定节点选择要求。在本发明一个实施例中,节点选择要求指定节点或节点集合必须满足以被考虑用于绑定I/O对象组的条件集合。这样的条件可以包括离I/o器件在设定距离内的节点的具体布置。在本发明一实施例中,所述条件可以包括每个节点的I/O负载容量。在步骤1118中,NUMA I/O框架使用节点选择要求和I/O拓扑模块来确定主优选NUMA节点集合。在本发明一实施例中,主优选NUMA节点集合是满足所有节点选择要求的节点或节点组。在本发明一实施例中,节点选择要求可以仅被多于一个的节点所满足。例如,如果I/O对象组中的一个I/O对象具有专用CPU标记,并且故此I/O对象组中没有其他对象可以置于相同节点上,则节点选择要求将需要要求使用多于一个的节点。因此,满足节点选择要求的节点或节点的组合可以被称为节点集合。相似地,节点集合可以包括仅单个节点或节点的组合。在本发明一实施例中,NUMA节点集合基于其接近于关联的I/O器件而被确定为主优选NUMA节点集合。在步骤1120中,NUMA I/O框架确定是否有多于一个的主优选NUMA节点集合可以供I/O对象组中的I/O对象绑定。在本发明一实施例中,当多于一个的NUMA节点集合满足节点选择要求并且每个都距关联I/O器件相等的物理距离时,可以有多于一个的主优选NUMA节点集合。如果存在多于一个的可用主优选NUMA节点集合,则在步骤1122中,基于选择策略而选择主优选NUMA节点集合之一。在本发明一实施例中,当存在都同样满足节点选择要求的两个节点或节点集合时,根据选择策略来选择满意的主优选NUMA节点集合之一。在本发明一实施例中,选择策略指定随机地选择一个主优选NUMA节点集合。替代地,选择策略可以推动与确定主优选NUMA节点集合的系统目标无关的系统目标。如果存在多于一个的主优选NUMA节点集合,则在步骤1124中,NUMA I/O框架确定是否存在一个主优选NUMA节点集合。如果存在一个主优选NUMA节点集合,则在步骤1126中,选择该主优选NUMA节点集合。如果不存在主优选NUMA节点集合,则在步骤1128中,NUMA I/O框架使用地点组模块基于节点选择要求来确定次优选NUMA节点集合。具体地说,在本发明一实施例中,NUMA I/O框架询问地点组模块以确定最接近于主优选节点集合的节点或节点集合。次优选NUMA节点集合是满足节点选择要求并且处于处理I/O对象组中的I/O对象的次最佳位置中的一个或多个节点。在本发明一实施例中,如果不存在可用的主优选NUMA节点集合,则系统等待,直到初始确定的主优选NUMA节点集合之一变为可用。此外,如果没有主优选NUMA节点集合可用,则NUMA I/O框架可以将I/O对象组绑定到不满足所有节点选择要求的节点集合。例如,如果I/O对象组中的一个I/O对象包括专用CPU标记,NUMAI/0框架可以确定I/O对象组中的所有I/O对象都可以绑定到相同节点,而不管专用CPU标记的存在。在步骤1130中,次优选NUMA节点集合被提升到主优选NUMA节点集合,流程返回到步骤1120。一旦选择了主优选NUMA节点集合,则在步骤1132中,I/O对象组中的一个或多个I/O对象就绑定到所选择的主优选NUMA节点集合。图12A和图12B示出根据本发明一实施例的示例性系统和时间线。如图12A所示,系统包括节点A (1200A)、节点B (1200B)、节点C (1200C)和节点D (1200D)。节点A(1200A)经由IC A (1202A)连接到节点B (1200B),并且经由IC B (1202B)连接到节点C(1200C)。节点 B(1200B)经由 IC A (1200A)连接到节点 A (1202A),并且经由 IC CC1202C)连接到节点D (1200D)。节点C (1200C)经由IC B (1202B)连接到节点A (1200A),并且经由IC D (1202D)连接到节点D (1200D)。节点D (1200D)经由IC C (1202C)连接到节点B (1200B),并且经由IC D (1202D)连接到节点C (1200C)。继续图12A的论述,节点A (1200A)操作上连接到I/O器件组A (1204A),节点B(1200B)操作上连接到I/O器件组B (1204B)。此外,节点C (1200C)和节点D (1200D)都操作上连接到I/O器件C (1204C)。I/O器件C (1204C)包括物理网络接口卡(NIC) (1206)。图12B示出图12B中的元件之间的示例性交互的时间线。具体地说,图12B中的时间线描述在请求在处理与接收系统之间创建网络连接的节点A上执行的处理。为了示例的目的,假设接收系统在图12A的示例性系统外部,从而网络连接需要物理NIC。为了示例的目的,进一步假设图12B中的I/O子系统(1208)是负责在用户级别和内核级别处理与网络目的地(例如,网络MAC层)之间建立网络连接的I/O子系统。在步骤1220中,节点A (1200A)上的处理将建立与网络目的地的网络连接的请求发送到I/O子系统(1208)。在步骤1222中,I/O子系统(1208)选择在建立和连接中使用的NIC (1206),并且确定打开节点A (1200A)上的处理与NIC (1206)之间的连接所需的I/O资源。为了该示例的目的,假设I/O子系统确定一个线程和一个中断是所需的I/O资源。在步骤1224中,I/O子系统(1208)创建用于该线程的I/O对象以及用于该中断的I/O对象。在步骤1226中,I/O子系统(1208)将I/O对象作为I/O组发送到NUMA I/O框架(1210),并且指定对I/O对象组的约束,从而I/O对象组内没有I/O对象可以置于节点D (1200D)上。I/O子系统(1208)还指定I/O对象之间的亲和性,从而I/O对象应置于同一节点上,并且向NUMA I/O框架(1210)通知该亲和性。在步骤1228中,NUMA I/O框架(1210)利用关于I/O对象亲和性和约束的信息以及关于I/o对象所获得的任何其它限制或指示来确定节点选择要求。在该示例中,NUMA I/O框架(1210)所确定的节点选择要求详述所选择的节点必须能够执行两个I/O对象,并且必须不是节点D (1220D)。在步骤1230中,NUMA I/O框架(1210)询问I/O拓扑模块(1212)以确定最接近于NIC (1206)的一个或多个节点。I/O拓扑模块(1212)响应指出(未示出)节点C (1200C)和节点D (1200D)直接连接到I/O器件组C (1204C)和NIC (1206)。因此,节点C (1200C)和节点D (1200D)是主优选节点。在步骤1232中,NUMA I/O框架(1210)将节点选择要求应用于主优选节点。NUMAI/O框架(1210)确定:因为对I/O对象组的约束,所以不可以选择节点D (1200D)。为了示例的目的,假设节点C (1200C)不能够执行线程和中断二者。因此,NUMA I/O框架(1210)确定没有主优选NUMA节点集合可用。在步骤1234中,NUMA I/O框架(1210)询问地点组模块(1214)以确定最接近于主优选节点的一个或多个节点。地点组模块(1214)进行响应(未示出),通知NUMA I/O框架(1210)节点A (1200A)和节点B (1200B)直接连接到主优选节点(节点C (1200C)和节点D (1200D))。因此,节点A (1200A)和节点B (1200B)是次优选节点。在步骤1236中,NUMA I/O框架(1210)将节点选择要求应用于次优选节点。为了示例的目的,假设节点A (1200A)和节点B (1200B)都被确定为满足节点选择要求。NUMAI/O框架(1210)然后将节点A (1200A)和节点B (1200B)都提升到主优选节点集合。在步骤1238中,NUMA I/O框架(1210)确定两个主优选NUMA节点集合可用。假设选择策略规定选择最接近于调用处理的节点,并且如果它们都距调用处理相等距离,则随机地选择一个节点。NUMAI/0框架(1210)将选择策略应用于主优选节点集合,并且选择最接近于调用处理的节点A (1200A)。在步骤1240中,NUMA I/O框架(1210)将I/O对象绑定到节点A (1200A),并且向内核调度器(1216)通知该绑定。在步骤1242中,内核调度器(1216)将与该I/O对象关联的指令引导为在节点A (1200A)上处理。可以在实现NUMA架构(1300)(或等同物)的基本上任何类型的计算机上实现本发明的实施例。例如,包括两个或更多处理器(1302)、关联的存储器(1304)、储存器件(1306)、两个或更多I/O器件(未示出)以及如今的计算机典型的许多其它元件和功能的联网计算机系统。联网的计算机也可以包括输入装置(例如键盘(1308)和鼠标(1310))以及输出装置(例如监视器(1312))。联网的计算机系统经由网络接口连接而连接到局域网(LAN)或广域网。本领域技术人员应理解,这些输入和输出装置可以采取其它形式。此外,本领域技术人员应理解,上述计算机的一个或多个元件可以位于远程处并且通过网络连接到其它元件。此外,用于执行本发明实施例的软件指令可以存储在非瞬时计算机可读存储介质上,诸如压缩盘(CD)、磁盘、带、物理盘或任何其它非瞬时计算机可读存储介质。虽然已经关于有限数量的实施例描述了本发明,但受益于本公开的本领域技术人员应理解,可以设计出不脱离在此所公开的本发明的范围的其它实施例。相应地,本发明的范围应仅由所附权利要求限定。
权利要求
1.一种非暂时性计算机可读介质,包括软件指令,该软件指令在由处理器运行时执行一种方法,所述方法包括: 输入/输出(I/O)子系统从处理接收使用I/O器件的请求; 所述I/o子系统确定用于服务于所述请求的第一资源; 所述I/o子系统生成与所述第一资源对应的第一 I/O对象,其中所述第一 I/O对象未被绑定; 所述I/o子系统将所述第一 I/O对象发送到非一致存储器访问(NUMA) I/O框架; 所述NUMA I/O框架选择多个NUMA节点中所述第一 I/O对象将要绑定到的第一 NUMA节点; 所述NUMA I/O框架将所述第一 I/O对象绑定到所述第一 NUMA节点;以及通过在所述第一 NUMA节点上处理与所述第一 I/O对象对应的所述第一资源来服务于所述请求。
2.如权利要求1所述的非暂时性计算机可读介质,其中,所述方法还包括: 所述I/O子系统确定服务于所述请求所需的第二资源; 所述I/O子系统生成与所述第二资源对应的第二 I/O对象,其中所述第二 I/O对象未被绑定; 所述I/o子系统将所述第二 I/O对象发送到所述NUMA I/O框架; 所述I/O子系统将所述第一 I/O对象与所述第二 I/O对象之间的亲和性发送到所述NUMA I/O 框架; 所述NUMA I/O框架使用所述亲和性来选择所述多个NUMA节点中所述第二 I/O对象将要绑定到的第二 NUMA节点;以及 所述NUMA I/O框架将所述第二 I/O对象绑定到所述第二 NUMA节点, 其中,服务于所述请求包括在所述第二 NUMA节点上处理与所述第二 I/O对象对应的所述第二资源。
3.如权利要求2所述的非暂时性计算机可读介质,其中,所述第一I/O对象和所述第二I/O对象与I/O对象组相关联。
4.如权利要求3所述的非暂时性计算机可读介质,其中,所述I/O对象组与约束相关联,其中选择所述第二 NUMA节点包括由所述NUMA I/O框架使用所述约束。
5.如权利要求2所述的非暂时性计算机可读介质,其中,所述第一NUMA节点和所述第二 NUMA节点操作上连接到第三NUMA节点,其中所述第三NUMA节点操作上连接到所述I/O器件。
6.如权利要求1所述的非暂时性计算机可读介质,其中,将所述第一I/O对象发送到所述NUMA I/O框架包括: 所述I/O子系统向所述NUMA I/O框架发送指定所选择的NUMA节点包括专用于与所述第一 I/O对象对应的所述资源的可用处理器的亲和性。
7.如权利要求1所述的非暂时性计算机可读介质,其中,所述第一资源包括从包括线程和中断的组所选择的资源。
8.一种系统 ,包括: 多个非一致存储器访问(NUMA)节点,包括:第一 NUMA节点,包括第一处理器和第一存储器; 第二 NUMA节点,包括第二处理器和第二存储器; 输入/输出(I/O)器件组,包括I/O器件; I/O子系统,在所述多个NUMA节点中的至少一个上运行,被配置为: 从在所述第一 NUMA节点上执行的处理接收使用所述I/O器件的请求; 确定服务于所述请求所需的第一资源;以及 生成与所述第一资源对应的第一 I/O对象,其中所述第一 I/O对象未被绑定;以及 NUMA I/O框架,在所述多个NUMA节点中的至少一个上运行,被配置为: 从所述I/O子系统接收所述第一 I/O对象; 选择所述第二 NUMA节点;以及 将所述第一 I/O对象绑定到所述第二 NUMA节点, 其中,通过在所述第二 NUMA节点上处理与所述第一 I/O对象对应的所述第一资源来服务于所述请求。
9.如权利要求8所述的系统,还包括: I/O拓扑模块,在所述多个NUMA节点中的至少一个上运行,被配置为: 响应于从所述NUMA I/O框架接收到`I/O器件标识符,提供对所述多个NUMA节点中的第三NUMA节点的引用, 其中,所述第三NUMA节点直接连接到包括所述I/O器件的所述I/O器件组,且 其中,使用所述I/O器件标识符来识别所述第三NUMA节点。
10.如权利要求8所述的系统,还包括: 地点组模块,在所述多个NUMA节点中的至少一个上运行,被配置为: 响应于从所述NUMA I/O框架接收到NUMA节点标识符,提供对所述多个NUMA节点中的第三NUMA节点的引用,其中所述第三NUMA节点直接连接到与所接收到的NUMA节点标识符对应的NUMA节点。
11.如权利要求8所述的系统, 其中,所述I/O子系统进一步被配置为: 确定服务于所述请求所需的第二资源;以及 生成与所述第二资源对应的第二 I/O对象,其中所述第二 I/O对象未被绑定; 其中,所述NUMA I/O框架进一步被配置为: 从所述I/O子系统接收所述第二 I/O对象; 基于所述第一 I/O对象与所述第二 I/O对象之间的亲和性来选择所述第一 NUMA节点;以及 将所述第二 I/O对象绑定到所述第一 NUMA节点,且 其中,通过在所述第一 NUMA节点上处理与所述第二 I/O对象对应的所述第二资源来服务于所述请求。
12.如权利要求8所述的系统,其中,所述多个NUMAI/O节点还包括第三NUMA节点,其中所述I/O器件组操作上连接到所述第三NUMA节点。
13.如权利要求12所述的系统,其中,所述I/O器件组操作上连接到所述第二NUMA节点。
14.如权利要求8所述的系统,其中,所述I/O器件是从包括网络接口卡和持久性数据储存器件的组选择的器件。
15.一种用于将输入/输出(I/O)对象绑定到节点的方法,所述方法包括: 网络媒体访问连接(MAC)层从处理接收创建数据链路的请求,其中所述网络MAC层与物理网络接口卡(NIC)相关联; 所述网络MAC层确定用于服务于所述请求的线程; 所述网络MAC层生成与所述线程对应的第一 I/O对象,其中所述第一 I/O对象未被绑定; 所述网络MAC层将所述第一 I/O对象发送到非一致存储器访问(NUMA) I/O框架; 所述NUMA I/O框架选择多个NUMA节点中所述第一 I/O对象将要绑定到的第一 NUMA节点; 所述NUMA I/O框架将所述第一 I/O对象绑定到所述第一 NUMA节点;以及通过在所述第一 NUMA节点上执行与所述第一 I/O对象对应的所述线程来服务于所述请求。
16.如权利要求15所述的方法,还包括: 所述网络MAC层确定用于服务于所述请求的中断; 所述网络MAC层生成与所述中断对应的第二 I/O对象,其中所述第二 I/O对象未被绑定;` 所述网络MAC层将所述第二 I/O对象发送到所述NUMA I/O框架; 所述NUMA I/O框架选择所述多个NUMA节点中所述第二 I/O对象将要绑定到的第二NUMA节点;以及 所述NUMA I/O框架将所述第二 I/O对象绑定到所述第二 NUMA节点, 其中,服务于所述请求包括利用所述中断将数据从所述处理发送到所述NIC。
17.如权利要求16所述的方法,其中,所述网络MAC层指定所述中断与所述线程之间的亲和性。
18.如权利要求19所述的方法,其中,所述亲和性指定所述线程和所述中断二者都绑定到单个NUMA节点。
19.如权利要求15所述的方法,其中,服务于所述请求包括利用所述第一线程将数据从所述处理发送到所述NIC。
20.如权利要求15所述的方法,其中,所述第一NUMA节点不直接连接到所述NIC,其中所述处理不在所述第一 NUMA节点上执行。
全文摘要
一种用于将输入/输出(I/O)对象绑定到节点的方法,包括子系统从处理接收使用I/O器件的请求;确定用于服务于所述请求的第一资源;生成与所述第一资源对应的第一I/O对象,其中所述第一I/O对象是未绑定的;以及将所述第一I/O对象发送到非一致存储器访问(NUMA)I/O框架。所述方法还包括所述NUMA I/O框架选择多个NUMA节点中所述第一I/O对象将要绑定到的第一NUMA节点,并且将所述第一I/O对象绑定到所述第一NUMA节点。所述方法还包括通过在所述第一NUMA节点上处理与所述第一I/O对象对应的所述第一资源来服务于所述请求。
文档编号G06F13/40GK103201722SQ201180052399
公开日2013年7月10日 申请日期2011年8月31日 优先权日2010年9月17日
发明者N·G·德劳克斯, J·丘, R·库恩哈盼 申请人:甲骨文国际公司