使用Hyper IO库
Hyper IO库是一类提供系统软件和应用软件之间连接的软件,提供科学数据的存储描述格式定义和文件操作,在HPC应用以及大量后处理、可视化及分析框架中广泛应用,同时考虑兼容其他应用,提供文件格式转换能力。
前提条件
已安装Hyper IO库,已安装应用运行所需第三方库(如MPI、PnetCDF、NetCDF、HDF5)。

使用Hyper IO库时不支持同时叠加Hyper IO中的AdhocFS或IO转发特性。
映射关系
应用名称 |
加速库 |
JSON配置文件 |
---|---|---|
WRF |
libock_shore_pnetcdf.so |
wrf.json |
NEMO |
libock_shore_netcdf.so |
nemo.json |
Grapes |
libock_shore_mpiio.so |
grapes.json |
LAMMPS |
libock_shore_hdf5.so/libock_shore_pnetcdf.so |
lammps.json |
QE |
libock_shore_hdf5.so |
qe.json |
操作步骤
- 使用PuTTY工具,以普通用户登录作业执行节点。
- 执行以下命令,设置JSON配置文件环境变量。
export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/xxx.json
以Grapes为例,执行命令为export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/grapes.json
JSON配置文件属主为当前用户,且要有读权限。
- (可选)如果想获得应用最优性能提升,请修改JSON配置文件。
- 已提供各自应用不同的JSON样例文件,运行不同的应用使用对应的JSON文件即可,可以根据实际需求修改JSON文件。
- 配置文件中的配置项应避免重复配置,若重复配置则以第一次配置为准。如配置"LOG_FLOW" : "ON" ,"LOG_FLOW" : "OFF",则生效的为ON。
- 用户需要修改样例文件,需要将样例文件的内容复制,新建一个JSON文件并拷贝复制内容,再执行以下命令,按需修改该JSON文件。
- 执行以下命令,拷贝并配置JSON文件。
cp /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/xxx.json /userpath/to/xxx.json
vi /userpath/to/xxx.json
- 按“i”进入编辑模式,根据实际情况修改配置文件,参数说明如表2、表3和表4所示。
- (可选)需要配置数据集整体信息。
表2 数据集整体信息(DATASET) 名称
描述
类型
缺省值
数据集整体通用信息(GENERAL)
LOG_FLOW
打印FlOW模块日志。
String
- ON:开启
- OFF:关闭
OFF
LOG_PROCESSOR
打印PROCESSOR模块日志。
String
- ON:开启
- OFF:关闭
OFF
LOG_BRIDGE
打印BRIDGE模块日志。
String
- ON:开启
- OFF:关闭
OFF
LOG_INTERCEPTOR
打印所有INTERCEPTOR模块日志。
String
- ON:开启
- OFF:关闭
OFF
LOG_CONFIG
打印CONFIG模块日志。
String
- ON:开启
- OFF:关闭
OFF
TRANSCACHESIZE
数据总量达到Cache聚合成一次写。取值范围为[0,128],单位MB,缺省值为0,表示不聚合。
Integer
0
COMPRESSMETHOD
数据压缩方法。
取值范围为[1,2],缺省值为1。
Integer
- 1:表示压缩算法为LZ4
- 2:表示压缩算法为Bzip2
1
COMPRESSLEVEL
数据压缩级别。
取值范围为[0,5],缺省值为0,表示不压缩。
数据压缩级别越高,数据压缩比越高。
Integer
0
WITHOUTGROUP
不配置group信息接入Hyper IO库。
String
- ON:开启
- OFF:关闭
OFF
数据集访问模式信息(DATA_ACCESS_PATTERN)
FIXED
应用中所有Entity的写操作在每个step间是否保持不变。
Boolean
- false
- true
false
RANDOM
应对粒子型应用中不要求保证粒子顺序的场景。
Boolean
- false
- true
false
WRITE_AGGREGATE_STEPS
元数据多少个step聚合成一次写,避免IO出现频率高且数据量小的情况。
取值范围为[1,64]。
Integer
1
WRITE_AGGREGATE_RANKS
元数据多少个rank聚合成一个写。
取值范围为[1,64]。
Integer
1
- (可选)如果需要使用文件聚合功能,需要配置数据集整体组信息。
- (可选)如果需要设置单个文件内容可乱序输出,需要配置数据集个体信息。
- 包含全量配置项的配置文件样例如下所示,可根据实际需要配置所需配置项的最小集即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
{ "DATASET": { "GENERAL": { "LOG_FLOW" : "OFF", "LOG_PROCESSOR": "OFF", "LOG_BRIDGE" : "OFF", "LOG_INTERCEPTOR" : "OFF", "LOG_CONFIG" : "OFF", "TRANSCACHESIZE" : 0, "COMPRESSMETHOD" : 1, "COMPRESSLEVEL" : 0, "WITHOUTGROUP" : OFF, "DATA_ACCESS_PATTERN": { "FIXED": "false", "RANDOM": false, "WRITE_AGGREGATE_STEPS": 1, "WRITE_AGGREGATE_RANKS": 1 } }, "GROUPS": [ { "GROUPNAME": "xxxxx", "FILEWHITELIST" : "xxxxx", "ENTITIES": [ { "NAME": "xxxxx", "SHUFFLE": false } ] } ] } }
- (可选)需要配置数据集整体信息。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 重新设置JSON配置文件环境变量。
- 运行应用程序,使能IO能力。通过LD_PRELOAD环境变量运行应用定向到Hyper IO库,应用运行完成之后会生成以shore和format结尾的目录和与原生文件同名的文件。
- 以shore结尾的目录用于存储数据信息。
- 以format结尾的目录用于存储描述数据的结构信息。
- 同名文件用于存储中间件配置文件信息。
以Grapes为例,执行命令为mpirun -N 80 -x LD_PRELOAD=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/lib/libock_shore_mpiio.so -x OMP_NUM_THREADS=1 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -x UCX_NET_DEVICES=mlx5_0:1 -x UCX_WARN_UNUSED_ENV_VARS=0 ./grapes_global.exe,执行完成后生成以shore结尾的目录和与原生文件同名的文件。
- /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64:表示Hyper IO库的安装目录。
- 每个HPC应用只能设置一个加速库环境变量。
- (可选)使用Hyper IO库格式转换功能。
- 使用Hyper IO库格式转换功能前需确保系统环境中已安装开源MPI-IO,否则会导致功能运行异常。
- 使用Hyper IO库格式转换功能时转换的目标路径和转换结果输出路径不能相同。
- 转换失败会输出日志在屏幕上,需手动删除生成文件。
- 设置多个线程运行时需要在mpirun命令中添加-map-by ppr: m:node:pe=n 参数进行资源映射,m表示每个节点运行的进程数,n表示每个进程可用的CPU核数。
- 应用推荐配置:
- bcc-esm应用使用netcdf中间件库的情况下,转换工具不需要使用-t与-d参数。
- wrf应用使用pnetcdf中间件库的情况下,转换工具需要使用-t8与-d参数。
Hyper IO库格式转换功能使用方式如下:- 单节点转换:
/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/bin/ock_shore_convertor [--format <目标转换格式(当前仅支持netcdf)>] [-t <1~8>(设置线程数) ] [-d (无参数,设置是否开启数据集压缩,默认不开启)] 共享存储目录输入shore文件或文件所在目录 目标格式文件输出目录
- 多节点多进程转换 :
mpirun -hostfile $HOSTFILE -np 进程数 /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/bin/ock_shore_convertor [--format <目标转换格式(当前仅netcdf)>] [-t <1~8>(设置线程数) ] [-d (无参数,设置是否开启数据集压缩,默认不开启)] 共享存储目录输入shore文件或文件所在目录 目标格式文件输出目录
- (可选)如果不使用Hyper IO库,就不再需要该环境变量,执行以下命令,删除已生效的环境变量。
unset OCK_IO_CONFIG
Hyper IO库支持的应用和版本
应用 |
版本 |
---|---|
WRF |
4.2.2版本 |
LAMMPS |
版本30Nov20 |
Grapes |
|
NEMO |
4.2版本 |
QE |
6.4.1版本 |