workflowGenerator 用于生成基于 Pegasus DAX 2.1 命名空间的工作流 XML,可生成五类科学应用工作流,也可以按形状、连接密度和数据文件分布组合抽象 DAG。科学应用 XML 使用 job.runtime 和 uses.size 模拟扩展,格式边界见“DAX 格式说明”。
项目使用 Maven 构建,源码位于 src/main/java,测试位于 src/test/java。
- JDK 17;编译产物通过
--release 8保持 Java 8 字节码兼容,当前已在 JDK 17.0.11 验证。 - Apache Maven 3.8.5:
D:\maven\apache-maven-3.8.5 - Maven 本地仓库:
D:\mavenrepository - PowerShell 7。
- Python 3(可选,仅
scripts/audit-datasets.py数据集审计脚本需要)。
Pegasus DAX 2.1 和 java-getopt 1.0.9 是旧版依赖,仓库在 vendor 中保留原始 JAR。首次构建前将它们登记到本地 Maven 仓库:
pwsh -NoProfile -File .\scripts\install-local-dependencies.ps1项目提供了固定 Maven 路径和本地仓库的 PowerShell 包装脚本:
pwsh -NoProfile -File .\scripts\mvn.ps1 clean test
pwsh -NoProfile -File .\scripts\mvn.ps1 clean package构建产物:
target/workflow-generator-1.0.0-SNAPSHOT.jar
target/workflow-generator-1.0.0-SNAPSHOT-all.jar
-all.jar 已包含运行时依赖,AppGenerator 是默认主类:
java -jar .\target\workflow-generator-1.0.0-SNAPSHOT-all.jar -h也可以使用 bin 中的 PowerShell 脚本。
基本格式:
pwsh -NoProfile -File .\bin\AppGenerator.ps1 `
-a <application> [--seed <long>] [-o <output.xml>] <application arguments>AppGenerator 支持以下外层参数:
| 参数 | 含义 |
|---|---|
-a, --application |
应用类型:CyberShake、Montage、Genome、LIGO、SIPHT |
--seed |
随机种子;相同参数和种子生成相同 XML |
-o, --output |
明确指定输出文件 |
-h, --help |
AppGenerator 帮助 |
-a SIPHT、--application SIPHT 和 --application=SIPHT 等价。应用参数可以直接跟在后面,也可以放在 -- 后面。
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a SIPHT --seed 42 -n 30
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a SIPHT --seed 42 -o .\generated\sipht.xml -n 100 -f 1349.47-n:任务数,最小为 30;当前会严格生成指定数量。-f:希望得到的 Findterm 平均运行时间;默认使用模型内置分布。
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a CyberShake --seed 42 -n 30
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a CyberShake --seed 42 -d 19958666973
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a CyberShake --seed 42 -r 2 -m 3 -s FFI-n:任务数,最小为 5。-d:近似输入数据量,按单个 SGT 平均大小向上取整。-r与-m/-v:ruptures 和 variations,必须同时提供。-s:站点,支持 CCP、DLA、FFI、LADT、LBP、PAS、SABD、SBSM、SMCA、USC、WNGC。-f:runtime 直接缩放倍数。
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a Montage --seed 42 -n 100
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a Montage --seed 42 -s 1.0 -p 0.1 -i 20-n:任务数,最小为 15。-d:输入数据量。-s:覆盖区域平方度。-p:输入重叠概率,范围为 0 到 1。-i:输入图像数量。-f:希望得到的 mProjectPP 平均运行时间。
Montage 的重叠关系从无序图像对中无放回抽样,不会再生成自连接或重复的反向图像对。
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a Genome --seed 42 -n 24 --strict-jobs
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a Genome --seed 42 -l 4 -s 20-n:目标任务数。--strict-jobs:如果该拓扑不能精确表达目标任务数则报错。-d:输入数据量,按 lane 平均输入大小向上取整。-l、-s:lanes 和每个 lane 的 sequences。-e:实验名称。-f:runtime 直接缩放倍数。
Genome 的拓扑任务数按 4 为主要步长,并非所有整数都可表示。普通模式会选择最接近的规模,输出文件名使用实际 jobCount。
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a LIGO --seed 42 -n 30
pwsh -NoProfile -File .\bin\AppGenerator.ps1 -a LIGO --seed 42 -n 100 -f 18.14-n:必须大于 20 且为偶数。-d:输入数据量。-f:希望得到的 TmpltBank 平均运行时间。
五类科学应用生成器共享以下约束:
- 同一逻辑文件名在一份 XML 中只能对应一个文件大小;扇出到多个子任务时复用首次登记的大小。
- 同一逻辑输出文件只能由一个任务生产;检测到第二个生产者时生成立即失败,不写出错误数据集。
- 依赖引用必须指向现有任务,生成的 DAG 无环且弱连通。
- 任务 ID、文件名中的数字及 runtime 小数统一使用
Locale.ROOT,不受操作系统区域设置影响。
LIGO 的瓶颈层使用带连通生成树的唯一二部连接,Thinca 输出文件名包含任务 ID。SIPHT 的各子工作流使用 NC_0025AG05_SW####__ 文件名前缀隔离,并由零字节控制文件连接,因此不会再出现跨子工作流的多生产者和孤立分量。
基本格式:
pwsh -NoProfile -File .\bin\ShapeGenerator.ps1 `
-s <shape> -c <connection> -f <data-factor> -j <jobs> -d <depth> `
[-F <files>] [-S <seed>] [-o <output.xml>]示例:
pwsh -NoProfile -File .\bin\ShapeGenerator.ps1 `
-s HOURGLASS -c MODERATE -f FIXED_1 -j 100 -d 5 -S 42
pwsh -NoProfile -File .\bin\ShapeGenerator.ps1 `
-s DIVIDE -c SPARSE -f SIMPLE -j 100 -d 5 -F 50 -S 42 `
-o .\generated\shape.xml要求 jobs >= depth > 0,保证每层至少有一个任务。
层宽按工作流执行方向描述:
| 类型 | 实际层宽变化 |
|---|---|
CONSTANT |
各层基本相同 |
DIVIDE |
少 → 多 |
CONQUER |
多 → 少 |
DIVIDE_AND_CONQUER |
少 → 多 → 少 |
HOURGLASS |
多 → 少 → 多,近似对称 |
MIRROR_HOURGLASS |
多 → 少 → 多,严格镜像对称 |
| 类型 | 含义 |
|---|---|
MIN |
保证覆盖全部父任务所需的最小扇入 |
SPARSE |
偏向较小扇入 |
MODERATE |
偏向最小值和最大值的中间区域 |
DENSE |
偏向较大扇入 |
MAX |
每个子任务连接全部父任务 |
相邻层使用平衡轮转分配,保证父任务得到覆盖、每个子任务的父任务不重复,并且不会因奇偶层宽产生越界。
| 类型 | 含义 |
|---|---|
FIXED_1 |
每层输入和输出文件数为任务数的 1 倍 |
FIXED_2 |
2 倍 |
FIXED_7 |
7 倍 |
FIXED_10 |
10 倍 |
BIASED_RANDOM_1000 |
1000 个文件在各层偏向分布 |
BIASED_RANDOM_10000 |
10000 个文件在各层偏向分布 |
SIMPLE |
仅首层输入、末层输出;必须使用 -F 指定文件数 |
以下命令会为 Montage、Genome、LIGO、SIPHT、CyberShake 分别生成 100、500、1000、5000 四种规模,每种 5 个实例,共 100 个 XML,并覆盖 data 中对应的标准文件名:
pwsh -NoProfile -File .\scripts\generate-scientific-datasets.ps1输出结构为:
data/<application>/<size>/<application>_<size>_<01..05>.xml
脚本先通过 Maven 构建 shaded JAR。已有最新构建产物时可使用 -SkipBuild,也可以用 -OutputRoot 指定其他目录。标准实例 seed 计算方式为:
202607160000 + applicationIndex * 10000000 + size * 10 + instance
其中 applicationIndex 按 Montage、Genome、LIGO、SIPHT、CyberShake 从 0 开始。
审计当前数据和 data/old 历史数据:
pwsh -NoProfile -Command "python .\scripts\audit-datasets.py .\data"脚本以只读方式检查目录布局、XML 解析、声明计数、任务 ID、引用、环、弱连通分量、逻辑文件大小、多生产者、文件名规模、SHA-256 重复和扩展 DAX 声明。默认情况下,历史语义问题会报告但不使命令失败;需要将历史问题也作为失败条件时使用 --strict-old。
2026-07-16 全量审计结果:
- 当前数据:100 个文件、20 个目录、457,653,845 字节;解析、计数、引用、环、连通性、文件大小、多生产者、规模和重复哈希检查全部通过。
- 历史数据:23 个文件均可解析且无环;其中 5 个无已知问题,18 个保留历史语义问题。历史文件未被改写,详情见
contribution.md。
RunAll 默认输出到 generated,支持输出目录和随机种子:
pwsh -NoProfile -File .\bin\RunAll.ps1 --seed 42 --output-dir .\generated科学应用文件保留 DAX 2.1 的默认命名空间和 version="2.1",并使用本项目模拟器所需的非标准属性:
job.runtime:任务运行时间。uses.size:逻辑文件字节数。
Pegasus 原始 DAX 2.1 XSD 没有声明这两个属性,因此科学应用文件属于“DAX 2.1 + workflowGenerator 模拟扩展”,不能宣称通过原始 XSD 的严格验证。当前生成器有意不输出 xsi:schemaLocation,避免作出错误的严格兼容声明;命名空间、任务、文件用途和依赖结构保持 DAX 2.1 兼容。抽象 Shape 文件可以不使用 size 扩展。
所有应用模型、Shape 和 Connection 共用同一个随机源。指定相同 --seed/-S 后:
- 随机分布和连接选择保持一致。
- Job、输入输出文件和注释顺序保持一致。
- XML 使用 UTF-8 和 LF,移除了生成时间、当前用户名等易变注释。
- 相同参数和 seed 的输出可进行字节级比较。
src/main/java/simulation/generator/
AppGenerator.java 真实应用入口
ShapeGenerator.java 抽象 DAG 入口
RunAll.java 批量生成入口
app/ 五类科学应用模型
shape/ 层宽策略
connection/ 相邻层连接密度策略
data/ 数据文件分布策略
util/ 随机数、分布、XML 配置与稳定输出
src/test/java/ JUnit 5 单元和集成测试
scripts/ Maven 与本地依赖初始化脚本
vendor/ 需要登记到本地仓库的旧版依赖
data/ 当前标准数据集;old/ 保存未改写的历史样例
测试覆盖命令行透传、随机种子、运行时间缩放、数据规模向上取整、五类应用、全部 Shape/Connection 组合、全部 DataFactor、Montage 无重复图像对、安全的 XML 配置解析,以及科学应用的逻辑文件一致性、唯一生产者、连通性、无环性和区域设置无关格式。