---
title: 使用Hyper IO
description: "Hyper IO是一类提供系统软件和应用软件之间连接的软件，提供科学数据的存储描述格式定义和文件操作，在高性能计算应用以及大量后处理、可视化及分析框架中广泛应用，同时考虑兼容其他应用，提供文件格式转换能力。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/userg_hyperio_0011.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/userg_hyperio_0011.html
indexId: e8bf3b2ef7a35f28f7527050e5303cf7adf420f3f0e44d99a53f3f4b817f3a0b58
---
# 使用Hyper IO

Hyper IO是一类提供系统软件和应用软件之间连接的软件，提供科学数据的存储描述格式定义和文件操作，在高性能计算应用以及大量后处理、可视化及分析框架中广泛应用，同时考虑兼容其他应用，提供文件格式转换能力。

#### 前提条件

已安装Hyper IO，已安装应用运行所需第三方库（如MPI、PnetCDF、NetCDF、HDF5）。

使用Hyper IO的IO Middleware组件时不支持同时叠加Hyper IO中的AdhocFS或IO转发特性。


#### 映射关系


**表1 加速库和JSON配置文件的映射关系**

| 应用名称 | 加速库 | 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 |


#### 操作步骤

1. 使用PuTTY工具，以普通用户登录作业执行节点。
2. 执行以下命令，设置JSON配置文件环境变量。
  export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.6.1_aarch64/conf/xxx.json

  以Grapes为例，执行命令为export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.6.1_aarch64/conf/grapes.json

  JSON配置文件属主为当前用户，且要有读权限。

3. （可选）如果想获得应用最优性能提升，请修改JSON配置文件。
- 已提供各自应用不同的JSON样例文件，运行不同的应用使用对应的JSON文件即可，可以根据实际需求修改JSON文件。
- 配置文件中的配置项应避免重复配置，若重复配置则以第一次配置为准。如配置"LOG_FLOW" : "ON" ，"LOG_FLOW" : "OFF"，则生效的为ON。
- 用户如果需要修改样例文件，需要将样例文件的内容复制，新建一个JSON文件并拷贝复制内容，再执行以下命令，按需修改该JSON文件。


  a. 执行以下命令，拷贝并配置JSON文件。
    cp /opt/IO_Middleware/IO_Middleware_2.6.1_aarch64/conf/xxx.json /userpath/to/xxx.json

    vi /userpath/to/xxx.json

  b. 按“i”进入编辑模式，根据实际情况修改配置文件，参数说明如表2、表3和表4所示。

    - （可选）需要配置数据集整体信息。
**表2 数据集整体信息（DATASET）**

| 名称 | 名称 | 描述 | 类型 | 缺省值 |
| --- | --- | --- | --- | --- |
| 数据集整体通用信息（GENERAL） | LOG\_FLOW | 打印FLOW模块日志。 | String ON：开启 OFF：关闭 | OFF |
| 数据集整体通用信息（GENERAL） | LOG\_PROCESSOR | 打印PROCESSOR模块日志。 | String ON：开启 OFF：关闭 | OFF |
| 数据集整体通用信息（GENERAL） | LOG\_BRIDGE | 打印BRIDGE模块日志。 | String ON：开启 OFF：关闭 | OFF |
| 数据集整体通用信息（GENERAL） | LOG\_INTERCEPTOR | 打印所有INTERCEPTOR模块日志。 | String ON：开启 OFF：关闭 | OFF |
| 数据集整体通用信息（GENERAL） | LOG\_CONFIG | 打印CONFIG模块日志。 | String ON：开启 OFF：关闭 | OFF |
| 数据集整体通用信息（GENERAL） | TRANSCACHESIZE | 当数据总量达到Cache大小时，聚合成一次写操作。取值范围为[0，128]，单位MB，缺省值为0，表示不聚合。 | Integer | 0 |
| 数据集整体通用信息（GENERAL） | COMPRESSMETHOD | 数据压缩方法。 取值范围为[1，2]，缺省值为1。 | Integer 1：表示压缩算法为LZ4 2：表示压缩算法为Bzip2 | 1 |
| 数据集整体通用信息（GENERAL） | COMPRESSLEVEL | 数据压缩级别。 取值范围为[0，5]，缺省值为0，表示不压缩。 数据压缩级别越高，数据压缩比越高。 | Integer | 0 |
| 数据集整体通用信息（GENERAL） | WITHOUTGROUP | 不配置group信息接入Hyper IO。 | String ON：开启 OFF：关闭 | OFF |
| 数据集访问模式信息（DATA\_ACCESS\_PATTERN） | FIXED | 应用中所有Entity的写操作在每个step间是否保持不变。 | Boolean false true | false |
| 数据集访问模式信息（DATA\_ACCESS\_PATTERN） | RANDOM | 应对粒子型应用中不要求保证粒子顺序的场景。 | Boolean false true | false |
| 数据集访问模式信息（DATA\_ACCESS\_PATTERN） | WRITE\_AGGREGATE\_STEPS | 元数据多少个step聚合成一次写，避免IO出现频率高且数据量小的情况。 取值范围为[1，64]。 | Integer | 1 |
| 数据集访问模式信息（DATA\_ACCESS\_PATTERN） | WRITE\_AGGREGATE\_RANKS | 元数据多少个rank聚合成一个写。 取值范围为[1，64]。 | Integer | 1 |


    - （可选）如果需要使用文件聚合功能，需要配置数据集整体组信息。
**表3 数据集整体组信息（GROUPS）**

| 名称 | 描述 | 类型 | 缺省值 |
| --- | --- | --- | --- |
| GROUPNAME | 必填。聚合模式下聚合后文件名称，需要设置为可以匹配FILEWHITELIST正则的字符串。 | String，最大长度64 | \- |
| FILEWHITELIST | 可选。将符合该正则表达式的文件聚合为上述GROUPNAME文件。 | String，最大长度64 | \- |


    - （可选）如果需要设置单个文件内容可乱序输出，需要配置数据集个体信息。
**表4 数据集个体信息（ENTITIES）**

| 名称 | 描述 | 类型 | 缺省值 |
| --- | --- | --- | --- |
| NAME | 必填。路径表示的数据项名称。 | String，最大长度64 | \- |
| SHUFFLE | 可选。应对粒子型应用中不要求保证粒子顺序的场景。 | Boolean false true 不区分大小写。 | false |


    - 包含全量配置项的配置文件样例如下所示，可根据实际需要配置所需配置项的最小集即可。
      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 } ] } ] } }

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  d. 重新设置JSON配置文件环境变量。
    export OCK_IO_CONFIG=/userpath/to/xxx.json

4. 运行应用程序，使能IO能力。通过LD_PRELOAD环境变量运行应用定向到Hyper IO，应用运行完成之后会生成以shore和format结尾的目录和与原文件同名的文件。

  - 以shore结尾的目录用于存储数据信息。
  - 以format结尾的目录用于存储描述数据的结构信息。
  - 同名文件用于存储IO Middleware配置文件信息。
以Grapes为例，执行命令为mpirun -N 80 -x LD_PRELOAD=/opt/IO_Middleware/IO_Middleware_2.6.1_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.6.1_aarch64：表示Hyper IO的安装目录。
- 每个高性能计算应用只能设置一个加速库环境变量。


5. （可选）使用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.6.1_aarch64/bin/ock_shore_convertor [--format <目标转换格式（当前仅支持netcdf)>] [-t <1~8>（设置线程数） ] [-d （无参数，设置是否开启数据集压缩，默认不开启）] 共享存储目录输入为shore文件或shore文件所在目录 目标格式文件输出目录

  - 多节点多进程转换 ：
    mpirun -hostfile $HOSTFILE -np 进程数 /opt/IO_Middleware/IO_Middleware_2.6.1_aarch64/bin/ock_shore_convertor [--format <目标转换格式（当前仅netcdf)>] [-t <1~8>（设置线程数） ] [-d （无参数，设置是否开启数据集压缩，默认不开启）] 共享存储目录输入为shore文件或shore文件所在目录 目标格式文件输出目录


6. （可选）如果不使用Hyper IO，就不再需要该环境变量，执行以下命令，删除已生效的环境变量。
  unset OCK_IO_CONFIG


#### Hyper IO支持的应用和版本

| 应用 | 版本 |
| --- | --- |
| WRF | 4.2.2版本 |
| LAMMPS | 版本30Nov20 |
| Grapes | CMA\_GFS\_3.3版本3.3 CMA\_MESO版本5.1 |
| NEMO | 4.2版本 |
| QE | 6.4.1版本 |
