首页> 中国专利> 一种容器环境下的MPI应用性能优化方法及系统

一种容器环境下的MPI应用性能优化方法及系统

摘要

本发明公开了一种容器环境下的MPI应用性能优化方法及系统,该方法包括:接收来自用户端的描述参数并进行参数检查,申请对应的物理资源和请求启动相应的容器;记录并接管容器的启动过程,为每个位于同一物理主机上的容器子集申请共享的PID namespace、IPC namespace和共享内存;确认容器就绪,判断通信对端是否为共居进程,并按照预设规则进行MPI进程间通信。该系统包括:面向MPI的容器编排模块、面向Docker容器的组管理插件和面向MPI进程的局部性检测插件。通过使用本发明,实现提高容器环境下的MPI应用运行效率。本发明作为一种容器环境下的MPI应用性能优化方法及系统,可广泛应用于容器和高性能计算领域。

著录项

  • 公开/公告号CN113076176A

    专利类型发明专利

  • 公开/公告日2021-07-06

    原文格式PDF

  • 申请/专利权人 中山大学;

    申请/专利号CN202110366560.9

  • 发明设计人 范述治;杜云飞;卢宇彤;

    申请日2021-04-06

  • 分类号G06F9/455(20060101);

  • 代理机构44367 深圳市创富知识产权代理有限公司;

  • 代理人高冰

  • 地址 510275 广东省广州市海珠区新港西路135号

  • 入库时间 2023-06-19 11:44:10

说明书

技术领域

本发明涉及容器和高性能计算领域,尤其涉及一种容器环境下的MPI应用性能优化方法及系统。

背景技术

容器(Container)技术借助操作系统内核在资源管理和命名空间方面的特性,以微小的性能损失为代价,提供了轻量级的、隔离的操作系统环境,配合容器的镜像机制,可以在不同的物理机器之间实现软件栈的快速迁移和部署。目前容器技术已在各种规模的软件工程的研发、测试、部署等环节中有重要应用。

消息传递接口(Message Passing Interface,MPI)是高性能计算领域中使用最广泛的通信中间件,它的主要优势体现在通信效率方面,许多大型的科学计算软件都使用MPI作为底层通信组件。传统高性能计算的物理集群由成百上千台多核节点组成,MPI应用会根据使用的CPU核数创建对应数量的MPI进程,然后在进程间交换数据。在物理集群中,位于某一主机上的MPI进程会检测与识别其他MPI进程是否与其位于同一主机(位于同一物理主机上的进程称为共居进程),如果某两个进程是共居进程,那么二者在通信时会通过共享内存来交换数据;对于不在同一物理主机上的进程,二者的通信主要通过网卡来交换数据。共居进程之间的数据交换效率要大大高于非共居进程之间的数据交换效率。

随着高性能集群用户的需求越来越多样、现代大型科学计算软件的安装、配置、运行环境管理越来越复杂,在物理集群中维护软件环境变得非常棘手。容器技术在HPC环境下的应用因此受到越来越多的关注。然而,由于容器的隔离特性,每个容器中的进程都认为自己处于容器创造出来的“虚拟主机”中,即使两个容器运行在同一个物理主机上,容器中的MPI进程也无法检测和识别到其他容器中的MPI进程实际上是与自己在物理上共居的,从而导致位于同一物理主机上的不同容器内的MPI进程也会通过网卡来进行通信。经过测试,这种行为会大幅降低通信密集型的MPI应用的整体运行性能,浪费计算资源,拉低计算效率。

发明内容

为了解决上述技术问题,本发明的目的是提供一种容器环境下的MPI应用性能优化方法及系统,可以在高性能计算环境下启动基于容器的MPI作业,在充分利用容器技术便利性的同时,性能损失更小。

本发明所采用的第一技术方案是:一种容器环境下的MPI应用性能优化方法,包括以下步骤:

接收来自用户端的描述参数并进行参数检查,申请对应的物理资源和请求启动相应的容器;

记录并接管容器的启动过程,为每个位于同一物理主机上的容器子集申请共享的PID namespace、IPC namespace和共享内存;

确认容器就绪,判断通信对端是否为共居进程,并按照预设规则进行MPI进程间通信。

进一步,还包括:

输出结果并反馈至用户端。

进一步,所述接收来自用户端的描述参数并进行参数检查,申请对应的物理资源和请求启动相应的容器这一步骤,其具体包括:

接收来自用户端的描述参数并检查输入、输出、使用资源数量是否为有效参数;

确认到描述参数为有效参数,向集群作业调度器申请对应的物理资源;

资源获批后按照用户描述参数启动相应的容器。

进一步,所述描述参数包括MPI应用、作业的输入文件、作业的输出文件、作业要使用的总核数、容器数量和每个容器的进程数。

进一步,所述确认容器就绪,判断通信对端是否为共居进程,并按照预设规则进行MPI进程间通信这一步骤,其具体包括:

在MPI应用层面添加局部性检测层并调用局部性检测层的API,判断通信对端是否为共居进程;

判断到通信对端,将选择共享内存信道进行通信;

判断到通信对端为非共居进程,通过网络栈来通信。

本发明所采用的第二技术方案是:一种容器环境下的MPI应用性能优化系统,包括:

面向MPI的容器编排模块,检查参数的合法性,允许用户启动基于容器的MPI作业,为每个容器分配固定数量的资源,并在共居容器之间建立起共享内存信道;

面向Docker容器的组管理插件,用于分组管理容器,支持PID namespace与IPCnamespace的组内共享,记录并接管容器的启动过程;

面向MPI进程的局部性检测插件,用于MPI进程检测与识别共居容器以及共居进程,使MPI进程在与其他进程通信时选择效率最高的信道进行数据交换。

本发明方法及系统的有益效果是:本发明通过对共居容器间通信方案进行优化,提高容器环境下的MPI应用的运行效率,从而使得在高性能环境下通过容器技术管理、部署与运行MPI应用成为一种更加高效的技术方案。

附图说明

图1是本发明一种容器环境下的MPI应用性能优化方法的步骤流程图;

图2是本发明具体实施例Docker容器结构的示意图;

图3是本发明具体实施例启动基于容器的MPI作业的流程示意图;

图4是本发明一种容器环境下的MPI应用性能优化系统的结构框图。

具体实施方式

下面结合附图和具体实施例对本发明做进一步的详细说明。对于以下实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。

本发明实施例描述了一种容器环境下的MPI应用性能优化方法,其目的在于通过对基于容器的MPI进程间通信效率进行优化,提高容器环境下的MPI应用运行效率。

图2是Docker容器结构的示意图,其实现基于Linux内核的namespace和cgroup特性,容器镜像本身依赖层次式的文件系统。一个独立的容器可以在内部安装应用与相关的依赖库,打包成镜像后即可在任一配置了Docker环境的系统中运行。

参照图1和图3,本发明提供了一种容器环境下的MPI应用性能优化方法,该方法包括以下步骤:

接收来自用户端的描述参数并进行参数检查,申请对应的物理资源和请求启动相应的容器;

记录并接管容器的启动过程,为每个位于同一物理主机上的容器子集申请共享的PID namespace、IPC namespace和共享内存;

确认容器就绪,判断通信对端是否为共居进程,并按照预设规则进行MPI进程间通信。

具体地,图3是本发明优化系统在高性能环境下启动基于容器的MPI作业的流程示意图。第一步,用户通过一组参数来描述要启动的MPI作业,参数包括要运行的MPI应用、作业的输入文件、作业的输出文件、作业要使用的总核数、容器数量、每个容器的进程数等,确定参数后,将其提交给面向MPI的容器编排模块,该模块首先检查参数的合法性,检查输入、输出、使用资源数量等是否为有效参数,接着由该模块向集群作业调度器申请对应的物理资源,资源获批后按照用户提供的参数启动相应的容器。第二步,在启动时,面向Docker容器的组管理插件会记录并接管容器的启动过程,与一般Docker容器的启动有所区别的是,启动这一组容器时,会为每个位于同一物理主机上的容器子集申请共享的PID namespace与IPC namespace,以便每个容器子集内的所有MPI进程具备利用共享内存互相通信的条件;另外,会为每个容器子集申请一块共享内存。以上步骤可在共居MPI进程之间建立起共享内存信道,做好底层的准备。最后,要使共居MPI进程感知到彼此,还需要在MPI层面进行修改,添加局部性检测层,MPI进程间通信前首先调用局部性检测层的API,判断通信对端是否为共居进程,如是,将选择共享内存信道进行通信,否则就通过网络栈来通信。确定信道后,MPI进程即使用相应的数据传输API来发送和接收数据。

进一步作为本方法的优选实施例,还包括:

输出结果并反馈至用户端。

进一步作为本方法的优选实施例,所述接收来自用户端的描述参数并进行参数检查,申请对应的物理资源和请求启动相应的容器这一步骤,其具体包括:

接收来自用户端的描述参数并检查输入、输出、使用资源数量是否为有效参数;

确认到描述参数为有效参数,向集群作业调度器申请对应的物理资源;

资源获批后按照用户描述参数启动相应的容器。

进一步作为本方法的优选实施例,所述描述参数包括MPI应用、作业的输入文件、作业的输出文件、作业要使用的总核数、容器数量和每个容器的进程数。

进一步作为本方法优选实施例,所述确认容器就绪,判断通信对端是否为共居进程,并按照预设规则进行MPI进程间通信这一步骤,其具体包括:

在MPI应用层面添加局部性检测层并调用局部性检测层的API,判断通信对端是否为共居进程;

判断到通信对端,将选择共享内存信道进行通信;

判断到通信对端为非共居进程,通过网络栈来通信。

Docker:容器引擎。容器技术通过借助Linux内核的namespace和cgroup特性,能够以较低的性能损失创建隔离的、可移植的操作系统级别的虚拟化环境。Docker是目前主流的容器方案,具有高效且鲁棒的运行时,生态系统也最为丰富。在高性能环境下使用Docker容器,可以在保证性能的前提下,简化科学计算应用的配置与部署流程。进一步地,还可以通过cgroup控制每个容器使用的CPU、内存等资源,从而实现对物理节点更细粒度的资源分割。

MPI:消息通信接口,是科学计算应用的主流中间件,提供了一种多进程的并行编程模型。MPI库包含一系列用于操作数据和进程间通信的API,通信方式包含点对点(Pointto Point,P2P)通信、集合(Collective)通信等。MPI是一个标准,目前使用较多的实现包括Open MPI、Intel MPI、MPICH等。MPI是一种多进程编程模型,一个MPI进程独占一个物理核心来运行。MPI进程之间的通信的具体方式可根据底层的可用信道来决定,从效率上来说,共享内存的效率最高,通过网络栈通信的效率最低。

共居容器与共居进程:指在物理上运行于同一主机中的容器,与之相反的是运行在不同物理主机上的容器。共居进程具有类似的定义。

如图4所示,一种容器环境下的MPI应用性能优化系统,包括:

面向MPI的容器编排模块,检查参数的合法性,允许用户启动基于容器的MPI作业,为每个容器分配固定数量的资源,并在共居容器之间建立起共享内存信道;

面向Docker容器的组管理插件,用于分组管理容器,支持PID namespace与IPCnamespace的组内共享,记录并接管容器的启动过程;

面向MPI进程的局部性检测插件,用于MPI进程检测与识别共居容器以及共居进程,使MPI进程在与其他进程通信时选择效率最高的信道进行数据交换。

上述方法实施例中的内容均适用于本系统实施例中,本系统实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法实施例所达到的有益效果也相同。

以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号