摘要:在高性能计算环境中,mpi应用多个计算节点同时访问底层存储系统文件时,其i/o开销受到访问模式和外存设备性能的影响。针对mpi应用访问文件的特征,利用非易失内存高带宽、低时延、可字节寻址、数据可持久化等优势,提出面向非易失内存的mpi-io接口优化方案;对文件数据建立分布式的缓存并维护持久性的元数据、对进程间数据传输策略进行优化,使应用可以有效管理、利用非易失内存设备,保持缓存数据一致有效。
为了实现 对非易失内存的管理与利用、对文件数据缓存的管理与访问,本文设计并实现了面向非易失内存的mpi-io接口优化(nvmpi-io)。本文的工作主要包括:
● 修改mpi-io接口,截取应用对底层共享文件系统的访问,并将其转化为对计算节点内或计算节点之间的非易失缓存的访问;
● 在非易失内存中建立并维护缓存数据,使计算节点之间的缓存一致且有效,使应用失效重启后可以快速地从非易失内存中恢复有效数据;
● 通过多种优化,降低维护、访问缓存的开销;
● 最后给出一个原型系统,并对其进行实验,实验表明,此系统可以有效地管理、应用非易失内存,并使mpi应用获得性能提升。
使用nvmpi-io,mpi应用无须进行修改,即可通过mpi-io中间件将非易失内存作为数据缓存,实现对文件缓存的分布式访问,从而减少i/o开销,并减轻共享文件系统的负载;同时,在非易失内存中维护元数据,使程序在崩溃重启后可以快速恢复数据,并继续运行。
mpi应用的文件访问模式
mpi是基于消息传递的并行编程模型,可使多个节点中的多个进程合作完成同一个计算任务,达到并行加速的目的。
mpi被广泛地应用在科学研究与工程仿真中,常见的mpi实现包括intel mpi、openmpi、mpich等。使用mpi的应用在访问文件时显示出以下访问特征。
● 多个进程同时访问同一文件的不同部分。研究物理模型或工程结构的mpi应用在进行计算前,首先需要准备模型文件,多个进程将同时利用模型文件上的数据进行计算,如每个进程读取多维矩阵的不同部分;进程间按需通信,并将计算结果写回文件的相应位置。
● mpi-io使用聚合i/o与数据筛选技术,将多个进程需要的大量小粒度数据聚合成少量的大粒度数据,避免了小粒度的文件数据访问。
● mpi标准不对文件数据进行缓存。mpi应用在访问文件时可能对同一文件进行多次读写,且每次读写的位置可能不一致;同时,多个进程对文件的并行访问容易使节点内缓存失效;内存的空间有限,而工程模型的数据量可根据工程的精度呈指数型增大,将大量的文件数据缓存到内存可能影响计算效率;在允许直接输入输出(direct i/o)的文件系统(如xfs、lustre)中,mpi建议使用直接输入输出,以避免操作系统的缓存。
● mpi应用应周期性地写出检查点(checkpoint)文件。大型工程仿真项目可能需要多个节点同时长时间运行,若其中某个节点出现故障导致作业失败,仿真项目需要重新进行;为了避免过多的重复工作,mpi应用应周期性地输出检查点文件,若作业失败,则从最近的有效检查点开始继续计算。同时,检查点文件可用于仿真的可视化输出。写检查点文件时,进程需要暂停计算任务,或将文件数据复制一份,以避免数据不一致。
● mpi应用多进程对文件进行访问有显著的同步特性。数据库、文件系统等会在任何时间点接收来自多个客户端的数据请求,若有分布式的缓存,则需要随时保证数据的一致性;mpi应用的多个进程在访问同一文件时,多个进程同时访问数据,当这一阶段完成后,进程之间需同步进度后再进行下一阶段的访问。mpi应用多进程的同步避免了写后读等数据不一致的问题,可用于简化缓存的设计。
基于上 述的mpi应用的 数 据 访问特征,在计算节点上部署非易失缓存有利于mpi应用的性能提升。利用非易失内存容量大、带宽高、可按字节寻址等特点,在非易失内存上部署缓存层不占用高效的dram空间,并将缓慢的文件访问转变为高速的非易失内存访问,可提高mpi应用的性能,同时可减少底层文件系统的负载。
面向非易失内存的mpi-io接口优化被应用在hpc系统中,其修改mpi-io模块接口以管理非易失内存的空间及访问形式。nvmpi-io在mpi运行时初始化,并向操作系统申请nvm空间,当作业结束后释放nvm资源,使nvm资源可供其他应用使用。nvmpi-io采用简单而有效的方法获得了以下优点。
● nvm设备的非独占使用:nvmpi-io在运行时,只按需占用nvm的部分空间,其他应用仍可以使用该设备进行其他作业。作业 结 束后,nvmpi-io立即释放nvm资源,使其可以被更高效地利用。
● 数据一致性:nvmpi-io随mpi程序的运行而运行,每个mpi进程维护文件的部分缓存数据及相应的元数据;通过维护元数据保证缓存数据的一致性。
● 后台写回:mpi应用周期性地写出checkpoint文件,引起大量的数据写回。nvmpi-io允许数据的后台写回,可在写回过程同时进行计算任务。
● mpi应用的快速重启:若mpi应用中某个进程失效引起整个程序的崩溃,在nvm设备上仍然存在有效的数据;使用nvmpi-io,mpi应用重启后,可以在nvm中快速恢复数据,实现快速的重启。
● 高可移植性:mpi可以在不同计算机架构、操作系统上正常工作;nvmpi-io继承了mpi的高可移植性。同时,nvmpi-io不修改提供给上层应用的应用程序接口(application programming interface,api),现有的mpi应用不需要做任何修改即可在此系统上运行。
nvmpi-io部署在hpc系统中,需对hpc系统的软硬件做相应的调整。
nvmpi-io在传统hpc集群组织中引入nvm设备。在传统hpc集群中,计算节点通过网络与共享的存储系统相连,计算节点从存储系统中获得数据,并对数据进行加工处理;同时,计算节点之间通 过tcp/ip网络或rdma技术进行通信。如图所示,nvmpi-io在每个计算节点中部署nvm设备,同时保持共享存储系统的设计不变;节点间通信沿用传统hpc系统中的网络传输,若配备了rdma网络,则可以使用rdma直接访问其他节点的非易失内存。
nvmpi-io为mpi应用服务,同时也利用了mpi定义的通信过程。一个典型的hpc应用包含多个mpi进程,其中每个进程使用mpi定义的接口与其他进程进行消息传递,使用mpi-io模块对底层存储系统进行数据访问。本系统保留mpi-io的聚合i/o与数据筛选优化,这些优化将上层应用需要的小粒度i/o整合成大粒度的i/o,避免了数据的小粒度随机访问。如图所 示,本系统部署在mpi-io中间件中,截取mpi-io对文件的系统调用,并 按 需 转发为非易失内存的数据维护、访问。
nvmpi-io在部署时,首先需要在nvm设备上挂载可以直接访问(direct access,dax)的文件系统。在nvm设备上挂载dax文件系统可使应用直接通过指针 访问nvm上的数据。具体地,进程使用内存映射(memory map)技术将文件系统中的文件映射到应用的进程空间中,进程可以通 过 指针直接 修改nvm,而不是修改操作系统的内核缓存(kernel cache)。
此外,nvmpi-io使用mpi定义的消息传递api与其他节点进行通信,使用posix api与底层文件系统进行数据的维护和访问。
小度在家1S成为该系列的“明星产品”
对于配电网络中的电源系统,如何提高48V的配电性能
益莱储助您迈向5G商用之旅,5G测试你需要了解的5件事
转速传感器正弦波、锯齿波脉冲信号 隔离变送器
美国军方展示特供版HoloLens 2系统——IVAS
如何设计并实现面向非易失内存的MPI-IO接口优化
干涉仪的定义及其分类介绍
佳能新一代2400万像素的APS-C画幅传感器将要在新款单反、无反相机上得到应用
华大电子推出中国第一颗55纳米智能卡芯片
“三型两网”建设下的电网侧储能发展机会
认识碱性电池
诺基亚内置经典《贪吃蛇》游戏与外放的FM收音机
请问stdout和stderr有哪些区别呢?
车载摄像头能做监控吗_车载摄像头可以全车监控吗
TE Connectivity 公布2017财年第二季度财报
VCA2612/2613/2616有效负反馈和传统电缆终端结构电路
行业方案|数商云电子信息行业SRM供应商管理解决方案
Hart通信在DPV1中的实现
华为开启自卫战:鸿蒙OS系统将让华为进全场景的万物互联新时代
编译可在QSPI Flash上运行的程序