当前位置: 首页 > news >正文

备忘录:Camulator与Simpleperf(硬件实测)的对比实验

这两周初步做了一些验证 Camulator 准确性的实验。由于实验中有较为繁琐的命令以及容易遗忘的细节,为此写了一篇备忘录,为以后的实验作为参考。

Camulator 的技术路线如下图:

简单来说,路径一先使用 DynamoRIO 在手机上获取测试程序的 trace ,经过一个转换程序将源 trace (包含机器码)转换成可供 Camulator 处理的 trace(包含 PC,访存地址以及读写标志位)。将 trace 输入到 Camulator 之后,可以获得各层级 cache 的数据,这里我们主要用到 cache miss 相关的数据。路径二将测试程序 push 到手机中,直接使用 Simpleperf 获取各层级 cache 的数据,以此数据作为真实硬件的 baseline。将两条路径获得的数据做对比,如果误差在可接受范围内,那么即可验证 Camulator 具有足够的准确性。

由于当前版本的 Camulator 存在一定的问题,例如输入较大的 trace 会进入死循环。本次实验采用轻量级的 bench——mibench。mibench 的指令数相对 SPEC 较少,大部分 bench 在一亿条左右。

以下将详细说明整个实验的流程以及细节。

1. 将测试程序通过 adb push 到安装好 DynamoRIO 的手机中。

adb push mibench /data/local/tmp/

2.在 adb shell 下使用 DynamoRIO 获取程序的 trace。

./dynamorio-aarch64-android/bin64/drrun -c ./dynamorio-aarch64-android/api/bin/libinstrace_simple.so -- ./mibench/susan ./mibench/input_large.pgm ./mibench/output_large.smoothing.pgm -s

注:

(1) DynamoRIO 使用:[DynamoRIO 可执行程序] -c [插件] -- [测试程序] [命令行参数]

(2) DynamoRIO 在运行完成后会显示获取了多少条 trace,为确保不会出现 Simpleperf 和 DynamoRIO 处理相同程序但指令数相差巨大的问题(该问题可能与 openmp 线程库相关,Simpleperf 会在运行程序时插入大量的 do_wait,目前暂无解决方法),可使用 Simpleperf 获取程序运行的指令数。

simpleperf stat -e instructions:u ./lyh/mibench/susan ./lyh/mibench/input_large.pgm ./lyh/mibench/output_large.smoothing.pgm -s

3. 退出 adb shell ,并将获取到的 trace pull 到 PC 中

adb pull /data/local/tmp/dynamorio-aarch64-android/api/bin/instrace.susan.30206.0000.log

4. 使用 trace_transform 工具将源 trace 转换成可供 Camulator 处理的 trace。

./trace_transform [input_trace] [output_trace]

5. 设置 Camulator 配置文件,以下是 Cortex A-78 的配置。

{ "record_cmd_trace": "off", "print_cmd_trace": "off", "cpu_tick": 4, "mem_tick": 1, "early_exit": false, "expected_limit_insts": 0, "warmup_insts": 0, "standard": "LPDDR4", "channels": 1, "ranks": 1, "speed": "LPDDR4_1600", "org": "LPDDR4_8Gb_x16", "translation": "None", "llc": { "size": 2048, "assoc": 16, "block_size": 64, "mshr_num": 20, "target_list": 18, "latency": 42, "prefetch": "Spatial", "prefetch_on_miss": false, "replacement": "LRU" }, "clusters": [ { "cluster_cache_id": 0, "cores": [ { "inst_cache": { "size": 64, "assoc": 4, "block_size": 64, "mshr_num": 4, "target_list": 20, "latency": 2, "prefetch": "Sequential", "prefetch_on_miss": false, "replacement": "LRU" }, "data_cache": { "size": 64, "assoc": 4, "block_size": 64, "mshr_num": 4, "target_list": 20, "latency": 4, "prefetch": "Sequential", "prefetch_on_miss": false, "replacement": "LRU" } } ], "shared_cache": { "size": 256, "assoc": 8, "block_size": 64, "mshr_num": 20, "target_list": 18, "latency": 14, "prefetch": "Sequential", "prefetch_on_miss": false, "replacement": "LRU" } } ] }

6. 运行 Camulator 处理的 trace。

./camulator ./config_CortexA-78.json --stats ./report/susan_report.txt trace/t_susan

注:

(1) Camulator 使用:./camulator [config] --stats [input] [trace]

(2) 输入 trace 文件数要与配置文件中的核数保持一致

7. 使用 Simpleperf 获取测试程序各层级 cache 缺失。

taskset 10 simpleperf stat -e raw-l1i-cache:u,raw-l1i-cache-lmiss:u,raw-l1d-cache-rd:u,raw-l1d-cache-lmiss-rd:u ./patricia ./small.udp taskset 10 simpleperf stat -e raw-l2d-cache-rd:u,raw-l2d-cache-lmiss-rd:u,raw-l3d-cache-rd:u,raw-l3d-cache-lmiss-rd:u ./patricia ./small.udp

注:

(1) Simpleperf 使用:taskset [锁核] simpleperf stat -e [事件] [测试程序] [命令行参数]

(2) 关于锁核:taskset 0000 0000,每个数字分别代表一个核,从左到右是cpu7至cpu0,如果那一位是1,就代表用这个核运行。实验中锁在了 CPU 4 上。

(3) event 事件后面要加 ‘:u’ 使 Simpleperf 只记录用户态的的数据,':k' 记录内核态。因为 DynamoRIO 只能获取用户态的 trace ,所有这里要使用 :u 。

得到的结果如图:

第一次实验数据记录:

http://www.jsqmd.com/news/985273/

相关文章:

  • 计算机组成原理学习笔记:手把手拆解CPU执行一条指令的全过程(以ADD指令为例)
  • 2026年 南京汽车维修/汽车保养/汽车空调维修/奔驰、宝马、奥迪专修推荐榜:专业深修与暖心服务口碑之选 - 品牌发掘
  • 保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控解锁避障和定高(附完整参数表)
  • BES2500Z平台实战:从零搭建TWS耳机项目,手把手教你配置GPIO按键与LED指示灯
  • 关于tvs选型及参数详解esd
  • pnpm架构深度解析:高效包管理的核心技术实现与实战指南
  • MC13883 PMIC过压保护与反向充电:原理、设计与调试实战
  • 大堂摆件厂家常见问题解答(2026最新专家版) - 热点速览
  • PostgreSQL两节点用keepalived实现主备的高可用架构
  • 郑州石英石大板一手货源采购指南|2026年源头工厂vs代理商完整对标 - 年度推荐企业名录
  • 深入解析MCU时钟与电源管理:以LPC2917/19为例的嵌入式系统稳定与低功耗设计
  • 在eNSP模拟器上配置usg6000v的虚拟系统
  • 深入解析NXP LPC51U68:ARM Cortex-M0+高能效MCU的外设与低功耗设计
  • PyPDF完全安装指南:5种场景下的最佳实践与避坑手册
  • 在Windows上用C++原始套接字给IPv4报文加Option字段:一个被遗忘的扩展头实战
  • 2026最新橡塑板十大排名一览表:解密绝热保温源头工厂 - 奔跑123
  • RealSR vs 传统超分辨率:为什么核估计与噪声注入是真实场景的终极解决方案
  • 广州花都餐饮公司注销流程是怎样的?税务清算、清税证明怎么一步步做 | 全流程通俗解读 - 欢欢在创业
  • STM32F103C8T6驱动HDC1080温湿度传感器:手把手教你写软件I2C代码(附完整工程)
  • 2026年广州公司注册代办与资质办理优选机构深度评测:全流程服务与税务异常解决能力解析 - 品牌发掘
  • 还在为投资决策发愁吗?让AI智能团队为你提供专业分析
  • LPC2917/2919时钟与电源管理:嵌入式系统稳定与低功耗设计核心
  • 告别Wireshark GUI:用tshark命令行5分钟搞定批量数据包分析与拆分
  • Qwen-Image-Edit-Rapid-AIO:融合加速技术与模型优化的高效图文生成工具链
  • 2026石家庄黄金回收排行:收的顶领跑,正规变现更安心 - 奢侈品回收测评
  • 从PDF到结构化数据:用Marker实现高效文档智能转换的完整指南
  • 图像增强的100种方法
  • 2026最新的 国内以及河北地区防静电橡胶板生产厂家实力排行及采购参考 防静电橡胶板 - 奔跑123
  • 2026 济宁厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • C语言笔记8之经验总结