当前位置: 首页 > 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.zskr.cn/news/1497018.html

相关文章:

  • MC13883 PMIC过压保护与反向充电:原理、设计与调试实战
  • 保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控解锁避障和定高(附完整参数表)
  • 关于tvs选型及参数详解esd
  • 郑州石英石大板一手货源采购指南|2026年源头工厂vs代理商完整对标 - 年度推荐企业名录
  • 广州花都餐饮公司注销流程是怎样的?税务清算、清税证明怎么一步步做 | 全流程通俗解读 - 欢欢在创业
  • STM32F103C8T6驱动HDC1080温湿度传感器:手把手教你写软件I2C代码(附完整工程)
  • 2026 济宁厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • C语言笔记8之经验总结
  • 2026年郑州石英石板材采购指南:源头工厂vs代理商,一手货源怎么选才不踩坑? - 年度推荐企业名录
  • 智汇客源联系方式,全域流量时代,谁能真正解决门店拓客难题 - GrowthUME
  • 小金锁金吊坠闲置,长沙合扬黄金变现小件也能高价回收 - 奢侈品交易观察员
  • 单片机毕业设计——基于单片机的太阳能充电照明系统 要怎么设计与实现呢(全程可免费指导)
  • Path of Building PoE2:流放之路2角色构建的终极规划指南
  • 实测!用NCNN在安卓上跑YOLOv5目标检测,性能优化与内存占用全解析
  • KoboldCPP:如何在Android手机上搭建你的私有AI助手?
  • CANN/sip卷积滤波算子API文档
  • 如何在Sublime Text中安装sublime-phpcs?5分钟快速上手教程
  • Lutris游戏安装指南:从零开始,轻松管理您的跨平台游戏库
  • JUCE实战指南:如何构建跨平台音频应用的智能元数据管理系统
  • 2026新疆旅游必看|10位零差评本地持证导游,纯玩靠谱,玩转南北疆不踩坑 - 盛世西域旅行
  • gitee 怎么修改用户名和密码
  • Polyglot-Ko-1.3B安全与伦理考量:防止偏见与敏感内容生成的终极指南 [特殊字符]️
  • VXGI Mipmap调试技巧:可视化体素体积的高级工具使用指南
  • Windows卡顿终结者:Atlas-OS如何让你的老旧电脑重获新生
  • 青岛黄金回收全攻略:告别套路,科学安全变现闲置黄金 - 奢侈品回收测评
  • 终极音频编辑指南:Step-Audio-EditX零样本TTS功能快速上手教程
  • 电气工程师如何高效绘制专业电路图:Inkscape符号库完全指南
  • 曲靖黄金市场分析与回收科普实用长文 - 润富黄金回收
  • 终极指南:如何利用pre-commit-hooks提升代码仓库质量与开发效率
  • Python终极指南:从零开始掌握CPython核心架构与标准库