# 5.2.2 DynamoRio

## 使用指南

在程序运行时对程序动态插桩，以实现源代码的内存语意修改。

### 需求

对于我们插桩的所有mov指令都会执行`if some_memory_region() insert_logic()`，来确保能执行到我们的逻辑。但是显然的缺点是LLC的memory hierarchy被破坏，这样无法模拟真实的内存访问。这也是和gem5模拟器最大的区别。

### 收集数据

你可以在`clients/drcachesim/analyzer_multi.cpp`中简单的收集到任意内存state的counter信息。需要在`clients/drcachesim/tools/`中创建一个工具类，记录插桩的时机，内存状态跳转和简单的内存tiering的大小。由于记录prefetching的时机比较难控制，我们需要在`clients/drcachesim/tracer/`中创建一个工具类，记录prefetching的时机。
