Skip to content

About

Optimized Pegasus Classic Scientific Workflow Application Example XML Generator

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

workflowGenerator

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 等价。应用参数可以直接跟在后面,也可以放在 -- 后面。

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 平均运行时间;默认使用模型内置分布。

CyberShake

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 直接缩放倍数。

Montage

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 的重叠关系从无序图像对中无放回抽样,不会再生成自连接或重复的反向图像对。

Genome / Epigenomics

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。

LIGO / Inspiral

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,保证每层至少有一个任务。

Shape

层宽按工作流执行方向描述:

类型 实际层宽变化
CONSTANT 各层基本相同
DIVIDE 少 → 多
CONQUER 多 → 少
DIVIDE_AND_CONQUER 少 → 多 → 少
HOURGLASS 多 → 少 → 多,近似对称
MIRROR_HOURGLASS 多 → 少 → 多,严格镜像对称

Connection

类型 含义
MIN 保证覆盖全部父任务所需的最小扇入
SPARSE 偏向较小扇入
MODERATE 偏向最小值和最大值的中间区域
DENSE 偏向较大扇入
MAX 每个子任务连接全部父任务

相邻层使用平衡轮转分配,保证父任务得到覆盖、每个子任务的父任务不重复,并且不会因奇偶层宽产生越界。

DataFactor

类型 含义
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 批量组合

RunAll 默认输出到 generated,支持输出目录和随机种子:

pwsh -NoProfile -File .\bin\RunAll.ps1 --seed 42 --output-dir .\generated

DAX 格式说明

科学应用文件保留 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 配置解析,以及科学应用的逻辑文件一致性、唯一生产者、连通性、无环性和区域设置无关格式。

About

Optimized Pegasus Classic Scientific Workflow Application Example XML Generator

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages