1 / 44

SEntre :基于龙芯的动态二进制插桩

LUG. SEntre :基于龙芯的动态二进制插桩. 彭 飞 龙芯合肥研发. 主要内容. 背景介绍 基于龙芯的动态二进制插桩方法 运行时整体插桩方法及系统实现 SEntre 运行时交互式插桩方法及其系统实现 DEntre 基于插桩系统的应用开发 技术热点 龙芯发展介绍. 软硬件的发展趋势. 硬件方面 随着超线程、多核等新技术的出现,硬件的复杂度越来越高。 软件方面 软件的发展呈现越来越抽象的趋势。 软件无法充分利用硬件提供的资源,软硬件之间的性能鸿沟越来越宽。. 程序分析优化层次.

cece
Télécharger la présentation

SEntre :基于龙芯的动态二进制插桩

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LUG SEntre:基于龙芯的动态二进制插桩 彭 飞 龙芯合肥研发

  2. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用开发 • 技术热点 • 龙芯发展介绍

  3. 软硬件的发展趋势 • 硬件方面 • 随着超线程、多核等新技术的出现,硬件的复杂度越来越高。 • 软件方面 • 软件的发展呈现越来越抽象的趋势。 • 软件无法充分利用硬件提供的资源,软硬件之间的性能鸿沟越来越宽。

  4. 程序分析优化层次

  5. 龙芯系列处理器 龙芯1A和1B是一款32位SoC芯片。能够满足超低价位云终端、工业控制/数据采集、网络设备、消费类电子等领域需求。 龙芯2F集成64位处理器核,主频达到800MHz,具有很高的性能功耗比。龙芯2F主要用于个人计算机、行业终端、工业控制/数据采集、网络安全等领域。 龙芯3B是首款国产商用8核处理器,主频达到1GHz,支持向量运算加速,峰值计算能力达到128GFLOPS,具有很高的性能功耗比。龙芯3B主要用于高性能计算机、高性能服务器、数字信号处理等领域。 龙芯3A是首款国产商用4核处理器,主频达到1GHz,峰值计算能力达到16GFLOPS,具有很高的性能功耗比。龙芯3A主要用于低功耗服务器、个人计算机、工业控制、网络安全等领域。

  6. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用开发 • 技术热点 • 龙芯发展介绍

  7. 整体插桩方法简介 • 针对的问题 • 针对龙芯系统上轻量级应用的动态分析,提出了运行时整体插桩方法及其系统实现SEntre。 • 插桩方法 • 根据用户定义的插桩模式,对运行时的程序进行一次性插桩,获取程序运行时信息。 • 开放的平台 • 提供标准的对外接口,开发系列工具。 • 支持的平台 • MIPS/Linux,以动态库的形式加载。

  8. 整体插桩方法 • 第一步:截获执行权。 • 当应用程序装载到内存中,启动程序开始执行的时候,获取其执行权限。 • 第二步:完成整体插桩。 • 代码拷贝:将代码从原空间拷贝到代码缓存区域 • 插桩:在代码拷贝时进行插桩 • 重定位:对缓存区域中的代码进行重定位 • 第三步:插桩后的代码运行。 • 插桩完成之后,将程序的执行权限交给插桩后的代码,插桩后的代码运行,输出用户需要的插桩信息。

  9. 系统实现及框架 • IWC:将代码从原区域拷贝到Code Cache,拷贝的同时进行插桩 • Relocation:对Code Cache中的代码进行重定位(静态) • Retarget:对运行时Code Cache中的代码进行重定位(动态) • Analysis routine:对插桩点的信息进行提取和分析

  10. IWC方法 • 拷贝的同时进行插桩 • 按序遍历整个代码段 • 以插桩点为临界进行拷贝 • 根据插桩模式进行插桩

  11. IWC算法

  12. 上下文切换 • 插桩点进行上下文切换 • 上下文的恢复和保存 • 保存的信息包括寄存器和栈

  13. 分层次的上下文切换方法 • 优点 • (1)第二层代码重用; • (2)第二层功能重用; • (3)第一层较少固定数量的指令有助于代码重定位。

  14. 重定位方法 • 重定位指令类型 • 重定位方法 • 第一类:需要在运行时解析(动态) • 第二类、第三类:代码直接修改(静态)

  15. 运行时解析 • 类型: • 寄存器相关的函数调用指令,如jalr t9。 • 方法: • 对该指令进行插桩,如图所示。 • 原因: • 函数间的转移,寄存器t9的值需要在运行时刻才能计算出来。

  16. 直接跳转的重定位 • 类型: • 指令中包含目标跳转位置,如jal target。 • 方法: • 对指令进行直接修订的重定位方法。 • 原因: • 函数间的转移,目标地址可以静态确定。

  17. 分支指令的重定位 • 类型:根据当前指令的位置和偏移,跳转到目标地址,如beq s,t,offset。 • 方法:对指令进行直接修订。 • 原因:模块内的转移,目标偏移可以静态确定。

  18. 系统接口 • 三个层次 • 指令集层次 SEntre_is_mem_instruction(insn) • 基本块层次 SEntre_is_bb_begin(insn) • 插桩模式层次 #define SEntre_is_instrumentation_model(insn) \ SEntre_is_mem_instruction(insn)

  19. 效率考量 • 高效的内存管理(Code Cache) • 跳转的就地处理 • 高效的上下文切换 • 基于体系结构的优化 • 高效的指令集

  20. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用研究 • 技术热点 • 龙芯发展介绍

  21. 交互式插桩方法简介 • 针对的问题 • 针对龙芯系统上重量级应用的动态分析,提出了运行时整体插桩方法及其系统实现DEntre。 • 插桩方法 • 运行时交互式插桩方法采用进程级虚拟机框架,控制每条指令的执行。 • 根据用户定义的插桩模式,程序边运行边进行插桩。 • 开放的平台 • 提供标准的对外接口,开发系列工具。 • 支持的平台 • MIPS/Linux,以动态库的形式加载。

  22. 运行时交互式插桩方法 • 第一步:截获执行权。 • 应用程序在启动过程中,插桩系统获取其执行权限。 • 第二步:代码拷贝插桩。 • 以基本块为单位 • 在插桩系统空间执行 • 第三步:插桩后的代码执行 • 插桩后的代码执行 • 在应用程序地址空间执行 • 执行完毕,返回插桩系统,继续第二步工作

  23. 基本块的拷贝和链接

  24. 分层次的内存管理方法 • 第二层次:堆以16K的固定分配,Code Cache以64K的固定大小分配。 • 第三层次:单元空间管理需要进行大量的数据结构信息的建立和释放, DEntre采用固定大小的数据结构空间分配方法。 • 第三层次:块空间管理方法根据目标基本块的大小分配相应的空间。

  25. 代码缓存区域的布局

  26. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用开发 • 技术热点 • 龙芯发展介绍

  27. 运行时基本块频率统计 • 基本块信息的统计需要完成两项重要工作: • 基本块的标识; • 对基本块的插桩统计。

  28. 基本块统计的插桩算法

  29. NPB实例分析

  30. 访存流统计

  31. NPB实例分析 • 访存主要集中在三个个区域: • 0x7FDDB7EC附近区域,栈空间 • 0x004150F4附近区域,数据空间 • 0x00654D50附近区域,堆空间

  32. 极速仿真器 • 对于专用处理器(ASIP)的指令集仿真,插桩方法拥有极高的效率。

  33. 其他应用 • Cache行为仿真 • 根据访存流信息,模拟程序的Cache行为。 • 分支跳转检测 • 检测各跳转的位置及频率。 • 处理器事件提取 • 获取事件寄存器信息。 • 锁Cache机制 • 对于频繁访问的数据或代码,将其锁定在Cache中,提高效率。

  34. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用开发 • 技术热点 • 龙芯发展介绍

  35. Code Cache • 代码缓存是动态运行系统效率的重要保证。 • SEntre的代码缓存采用的是:整体拷贝、整体插装、就地进行重定位。 • 优点: • 效率高,程序在SEntre上运行基本上没有什么效率影响 • 实现相对简单一些 • 缺点: • 运行时失控(out of control),程序一旦在SEntre上运行起来就失去了控制,不能有效的根据程序的动态信息进行插装 • 耗内存,两份代码段

  36. 透明性维护(一) • 程序在SEntre上运行时,两者是共享同一虚拟地址空间。 • 栈维护 • 应用程序和SEntre共享同一栈空间,当应用程序和SEntre进行函数调用的时候,需要小心的维护,包括寄存器的值、参数传递等。 • 库函数的透明性 • SEntre不跟踪到应用程序调用的库函数,所以SEntre直接使用C库中的函数,而不是进行系统调用,不会出现函数重入问题。

  37. 透明性维护(二) • 堆维护 • 应用程序和SEntre共享同一堆分配函数 • 数据的透明性 • 应用程序的数据部分保持不变,大大减小透明新维护成本。

  38. 编译器相关 • 编译器在生成汇编程序的时候,会生成一些上下文耦合性比较大的代码。 400a04: 8fdc0010 lw gp,16(s8) 400a08: 00000000 sll zero,zero,0x0 400a0c: 8f84808c lw a0,-32628(gp) 400a10: 24050400 li a1,1024 400a14: 00003021 move a2,zero 400a18: 8f998058 lw t9,-32680(gp) 400a1c: 00000000 sll zero,zero,0x0 400a20: 0320f809 jalr t9 00400f50 <input_dsp>: 400f50: 3c1c0002 lui gp,0x2 400f54: 279c8b70 addiu gp,gp,-29840 400f58: 0399e021 addu gp,gp,t9 400f5c: 27bdffc8 addiu sp,sp,-56

  39. 体系结构的挑战 • 指令集编码和解码 • 精简指令集 • 延迟槽问题 • 分支延迟槽中不能插桩

  40. 多线程的支持 • 多线程的支持 • 锁的设计 • 共享资源

  41. 主要内容 • 背景介绍 • 基于龙芯的动态二进制插桩方法 • 运行时整体插桩方法及系统实现SEntre • 运行时交互式插桩方法及其系统实现DEntre • 基于插桩系统的应用开发 • 技术热点 • 龙芯发展介绍

  42. 中科龙芯 • 2001年5月,计算所龙芯课题组成立,完成龙芯1号、2号芯片研发; • 2008年3月,在北京成立公司,产业化探索。 • 2009年9月,龙芯3A流片成功。 • 2011年5月,公司更名龙芯中科技术有限公司。 • 分基地 • 广州分公司 • 苏州中科龙梦 • 重庆分公司 • 合肥研发中心

  43. 合肥研发中心 • 依托中科大先进技术研究院成立中科大龙芯联合实验室。 • 专注龙芯软件研发,包括系统级软件和应用级软件。如编译器、程序分析软件、浏览器等。

  44. 联系方式 彭飞 pfgenyun@gmail.com pfgenyun@mail.ustc.edu.cn 15256533629

More Related