ReorderData - 优化阅读笔记

news2024/10/6 2:27:58

主要实现文件: bolt/lib/Passes/ReorderData.cpp

支持 X86/Arm
测试用例: bolt/test/reorder-data-writable-ptload.c

int a1,a2,a3,a4;
// 待补充

默认关闭,开启选项:

# 指定要重排的数据段
--reorder-data=<section1,section2,section3,...>
# 重排算法
--reorder-data-algo=count/funcs
# 重排后原地替换,暂不支持
--reorder-data-inplace

# 限制新的数据段的大小
--reorder-data-max-bytes=<uint>    -- default std::numeric_limits<unsigned>::max()
# 限制新的数据段的符号数量
--reorder-data-max-symbols=<uint>  -- default std::numeric_limits<unsigned>::max()

注: objdump -D 命令把 .data 段当成指令来解析了,看起来分成奇怪,我们只要看数据就行,这里想要展示的是常用的 .data 段数据被放到一起了,减少 dcache miss
在这里插入图片描述

void ReorderData::assignMemData(BinaryContext &BC) {
  // 采样文件需要包含下面这种 Memory Profile
  // 4 _start 0 4 hot1 0 100

  // 查找包含 "MemoryAccessProfile" 注释的指令
  BC.MIB->tryGetAnnotationAs<MemoryAccessProfile>(Inst, "MemoryAccessProfile");
/********************************
.LBB00:
    00000000:   incl    hot1(%rip) # MemoryAccessProfile: 100 total counts :
        { hot1 + 0x0: 100 }
    00000006:   jmp     .LBB00
preds: .LBB00
succs: .LBB00
********************************/
  // 遍历指令访问的所有数据段
  for (const AddressAccess &AccessInfo : MemAccessProfile.AddressAccessInfo) {
    // 存储数据段的访问计数
    BinaryDataCounts[BD->getAtomicRoot()] += AccessInfo.Count;
}
void ReorderData::runOnFunctions(BinaryContext &BC) {

  // 必须指定要重排的数据段
  if (!BC.HasRelocations || opts::ReorderData.empty())

  // 不能与跳转表优化一起工作
  if (opts::JumpTables > JTS_BASIC)

  assignMemData(BC);

  // 根据选项提供的名字找到实际 Section 地址
  for (const std::string &SectionName : opts::ReorderData)

  for (BinarySection *Section : Sections) {

    // 检查 "PG." 开头的 Section 和 有重叠的 Section
    // 当前私有符号无法移动,因为数据可能会在一个符号的边界之间"泄露"到另一个符号,例如,一个具有共同后缀的字符串可能从一个私有符号开始,并在另一个符号中以共同的后缀结尾
    const bool FoundUnmoveable = markUnmoveableSymbols(BC, *Section);

    std::tie(Order, SplitPointIdx) = sortedByCount(BC, *Section);
    std::tie(Order, SplitPointIdx) = sortedByFunc(BC, *Section, BC.getBinaryFunctions());

    setSectionOrder(BC, Hot, Order.begin(), SplitPoint);
}

遗留问题:

  1. 怎么产生内存相关的采样数据 - 检查了 mysql 的采样文件未发现这种数据
  2. 能否通过增强插桩生成这种数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1508247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ArcGIS】栅格数据进行标准化(归一化)处理

栅格数据进行标准化&#xff08;归一化&#xff09;处理 方法1&#xff1a;栅格计算器方法2&#xff1a;模糊分析参考 栅格数据进行标准化(归一化)处理 方法1&#xff1a;栅格计算器 栅格计算器&#xff08;Raster Calculator&#xff09; 方法2&#xff1a;模糊分析 空间…

Spring Boot Starter 与自动装配(Boot 3.0版本)

Spring Boot Starter 与自动装配 1、Starter Starter可以理解为Spring Boot中的一站式集成启动器&#xff0c;它包含了一系列可以集成到应用中的依赖项&#xff08;dependencies&#xff09;&#xff0c;可以快速一站式集成Spring组件及其他框架&#xff0c;而不需要到处找示…

CAP告诉你系统没法做到完美,只能做到权衡和适当

一、CAP介绍 CAP原理&#xff0c;全称为Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;和Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;是分布式系统设计中的基本原理。它强调了在设计分布式系统时&#xff0c…

【深度学习笔记】优化算法——学习率调度器

学习率调度器 &#x1f3f7;sec_scheduler 到目前为止&#xff0c;我们主要关注如何更新权重向量的优化算法&#xff0c;而不是它们的更新速率。 然而&#xff0c;调整学习率通常与实际算法同样重要&#xff0c;有如下几方面需要考虑&#xff1a; 首先&#xff0c;学习率的大…

Verovio简介及在Windows10和Ubuntu 22.04上编译过程

Verovio是一个快速、便携、轻量级的开源库&#xff0c;用于将音乐编码倡议(Music Encoding Initiative(MEI))数字乐谱雕刻到SVG图像中。Verovio还包含即时转换器(on-the-fly converters)用于渲染Plaine & Easie Code、Humdrum、Musedata、MusicXML、EsAC和ABC数字乐谱。源代…

SSL证书:构建网络安全的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C++容器适配器stack、queue、priority_queue

文章目录 C容器适配器stack、queue、priority_queue1、stack1.1、stack的介绍1.2、stack的使用1.3、stack的模拟实现 2、queue2.1、queue的介绍2.2、queue的使用2.3、queue的模拟实现 3、priority_queue3.1、priority_queue的介绍3.2、priority_queue的使用3.3、仿函数3.4、pri…

如何使用Everything+cpolar实现公网远程搜索下载内网储存文件资料

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

架构面试题汇总:mysql全解析(六)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! MySQL面试题涵盖了索引优化、事务管理、并发控制以及存储格式等核心领域&#xff0c;旨在评估应聘者对数据库性能优化和数据一致性…

软件介绍-知网研学

知网研学 基本功能 功能特色&#xff1a; 1.高效检索和管理期刊论文、博硕士论文、会议论文、报纸、年鉴、网页内容等各类资源 2.已有题录与CNKI题录自动匹配&#xff0c;可一键更新&#xff0c;完善题录信息 3.阅读中可随手记录学习中的想法&#xff1b;对学科名词可随时查…

Dgraph 入门教程三《linux本地部署》

上一章中&#xff0c;我们用的官方的Clound操作的&#xff0c;怎么在本地部署一套Dgraph呢。这一章将做详细介绍。安装有好几种方式&#xff0c;最简单的就是联网部署。因为项目需要&#xff0c;这里先不介绍和测试线上部署了&#xff0c;只介绍离线部署。 1、下载安装包 Rel…

微信小程序仿QQ头像轮播效果

1、效果图 2、效果流程分析 1、第1个头像大小从1到0缩小的同时&#xff0c;第2个头像左移 2、上面动画结束后&#xff0c;延迟50ms&#xff0c;第3个头像从0到1放大 3、把头像列表顺序前移一位&#xff0c;并重置轮播状态&#xff0c;以此达到一个循环。然后继续第一个步骤 …

Stable Diffusion 详解

整体目标 文本生成图片&#xff1b;文本图片生成图片 网络结构 CLIP的文本编码器和图片生成器组成图像生成器&#xff0c;输入是噪声经过UNet得到图像特征&#xff0c;最后解码得到图像 前向扩散 模型直接预测图片难度比较大&#xff0c;所有让模型预测噪音然后输入-噪音…

Everything:文件查找工具,一搜即得

名人说&#xff1a;东边日出西边雨&#xff0c;道是无晴却有晴。——刘禹锡 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍①Everything②核心功能③原理 二、下载安装①下载②安装 三、使用方法①文…

TRON Builder Tour 丹佛站活动获美联社等外媒高度评价

近日,波场TRON亮相ETH Denver大会并在期间成功举办TRON Builder Tour丹佛站活动,引发海外媒体热议。美联社、费加罗报、Cointelegraph等国际主流媒体及加密行业权威媒体均对此给予了高度评价,认为波场TRON在参会期间的表现及TRON Builder Tour活动的举办都展现了其坚定不移推动…

【大厂AI课学习笔记NO.74】人工智能产业技术架构

包括基础层、技术层和应用层。 人工智能的产业技术架构是一个多层次、多维度的复杂系统&#xff0c;它涵盖了从基础硬件和软件设施到高级算法和应用技术的全过程。这个架构通常可以分为三个主要层次&#xff1a;基础层、技术层和应用层。下面我将详细论述这三个层次及其细分内…

代码背后的女性:突破性别壁垒的技术先驱

个人主页&#xff1a;17_Kevin-CSDN博客 收录专栏&#xff1a;《程序人生》 引言 在计算机科学的历史长河中&#xff0c;有许多杰出的女性为这个领域的发展做出了重要贡献。她们不仅在技术上取得了卓越成就&#xff0c;还打破了性别壁垒&#xff0c;为后来的女性树立了榜样。今…

scrcpy远程投屏控制Android

下载 下载后解压压缩包scrcpy-win64-v2.4.zip scrcpy连接手机 1. 有线连接 - 手机开启开发者选项&#xff0c;并开启USB调试&#xff0c;连接电脑&#xff0c;华为手机示例解压scrcpy&#xff0c;在scrcpy目录下打开终端&#xff0c;&#xff08;或添加scrcpy路径为环境变…

【Web】浅聊Java反序列化之玩转Hessian反序列化的前置知识

目录 序列化 反序列化 Hessian1.0 Hessian2.0 Hessian反序列化核心&#xff1a;MapDeserializer#readMap的利用 总结 序列化 HessianOutput&Hessian2Output都是抽象类AbstractHessianOutput的实现类 HessianOutput#writeObject和Hessian2Output#writeObject的写法是…

Linux:kubernetes(k8s)Deployment的操作(12)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…