Skip to content

workload建模

软件侧自顶向下收敛于任务(OS)和指令(ISA),硬件侧自底向上收敛于架构(Arch)。所以负载的建模需要在这三层进行。

做workload建模,主要是两个方向上的事:

  • 白盒:描述场景在上述层级上的特征;(workload画像)
  • 黑盒:给出最典型的测试用例

黑盒削减

  • 基于指令流片段截取
  • 基于参数模型实体化

指令流片段截取

该方法具有可行性,是基于以下两个前提

  • 程序的行为具有周期性
  • 用一个周期的指令流作为实体模型

问题:

  • 如何高效抓取指令流
  • 复杂软件栈(CUDA)如何处理
  • 如何选取代表性周期
  • 多核情况如何处理

具体需求: 目标为具体应用,从任意位置开始,存储任意长度的执行信息(指令,访存,系统调用)。通过工具将信息还原为可执行workload(ELF文件)。AArch64是Load/Store架构,寄存器和内存是所有的执行上下文,切片能够保证复现原始执行逻辑和访存行为

实现思路:

  • 基于DBI工具(比如Dynamorio)执行信息抓取:
    • 基于动态二进制注入,注入序列全汇编极速优化
    • 抓取模式(跳过指定动态指令数,特殊指令触发)
  • ELF还原(基于objdump二次开发)

参数模型实体化

抓取运行时特征,通过算法生成分布和原来相似的程序:

  • 指令分布
  • 指令级并行
  • 指令局部性
  • 数据局部性
  • 控制流转移

问题: 生成性能指标类似的程序几乎不可能

知识在于积累