启用/禁用硬件锁定消除

2023-12-30

我使用的是 glibc 2.24 版本。它包含用于使用事务同步扩展(例如 _xbegin() 和 _xend())实现 pthread_mutex_lock 的锁省略路径。硬件应该支持锁省略hle我认为CPU标志是为了硬件锁消除。我使用的处理器是采用 Skylake 架构的 Intel(R) Xeon(R) Gold 6130。

首先,我想禁用锁定省略,但是当我运行使用的程序时pthread_互斥锁, with 性能统计-T为了监视事务周期,我得到了 0。我认为这意味着 pthread_mutex_lock 根本不使用事务路径。谷歌搜索后我发现可能需要使用导出 GLIBC_TUNABLES=glibc.elision.enable=1首先,启用锁省略,但在此步骤之后我仍然没有看到任何具有 perf 的事务。

另一方面,当我包含 _xbegin(); 时和 _xend();直接在此过程中,我使用 perf stat -T 获得了一些事务周期,这应该意味着我希望使用 perf 寻找正确的计数器。

因此,任何有关如何启用锁省略的建议都会有所帮助。还是我检查错了?

Update对于 TSX,我在主函数中使用这两条指令,就像这样:

_xbegin();
_xend();

我不确定它需要哪个库,我已经包含了数十个库。对于编译,我使用以下标志:-O3 -march=native -lpthread 与此示例相关。

对于锁,我有互斥锁:

pthread_mutex_t * mutex;
mutex = (pthread_mutex_t *) malloc(10 * sizeof(pthread_mutex_t));
for(int k=0; k<10; k++){
    pthread_mutex_init(&mutex[k], NULL);
  }

也许为了省略我应该以不同的方式初始化它?


In earlier versions of glibc, before 2.27, support for TSX could only be controlled using a compile-time flag called enable-lock-elision. I don't know which versions have enable-lock-elision enabled or disabled, but that's how it used to work1. So if you wanted to enable/dsiable TSX, you'll have to compile glibc yourself and use that flag accordingly. Starting with glibc 2.27 https://github.com/bminor/glibc/commit/07ed18d26a342741cb25a4739158c65ed9dd4d09, that compile-time option was removed and replaced by a run-time option called glibc.elision.enable. That is, glibc is always compiled with support for TSX, but TSX will only be used if the environment variable glibc.elision.enable is set to 1 before running the application (e.g., by executing export GLIBC_TUNABLES=glibc.elision.enable=1).

2.27之前,glibc.elision.enable不存在,因此没有效果。是否使用 TSX 取决于编译时标志enable-lock-elision。您使用的是 2.24。因此,最简单的解决方案是迁移到 2.27 或更新的版本。

请注意,根据各自的规范更新,当前所有支持 TSX 的英特尔处理器似乎都存在相同的错误,即“使用英特尔 TSX 指令可能会导致不可预测的系统行为”。对于某些处理器,英特尔已发布微码更新以实际禁用 TSX。但是,您的处理器上的实施将继续启用。


脚注:

(一)根据本错误报告 https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1642390,从 2.23 开始,glibc 中已禁用锁省略。我认为这是通过禁用来完成的enable-lock-elision在构建 glibc 时,但我还没有通过查看代码来验证这一点。但这与您观察到的它在 2.24 中被禁用的情况一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用/禁用硬件锁定消除 的相关文章

  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 选择initializer_list迭代器定义

    Why std initializer list
  • Linux内核页表更新

    在linux x86 中分页 每个进程都有它自己的页面目录 页表遍历从 CR3 指向的页目录开始 每个进程共享内核页目录内容 假设三个句子是正确的 假设某个进程进入内核 模式并更新他的内核页目录内容 地址映射 访问 权利等 问题 由于内核地
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • ASP.NET MVC 动作过滤器

    有谁知道即使在 CATCH 块中 ActionFilterAttribute 类的 OnResultExecuted 方法是否也会执行 ie CookiesActions public ActionResult Login Usuarios
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有

随机推荐

  • Perl:如何分割文件?

    我需要将一个文件分成不同的文件 示例 原始文件 3123123 RAW text1 text2 2312354 RAW text3 期望的输出 文件1 txt 3123123 RAW text1 text2 文件2 txt 31231235
  • git:如何将git注释添加的消息推送到中央git服务器?

    似乎没有关于 git 注释的适当文档 我使用 git Notes add 命令向其中一个提交添加了一些注释 但是当我推送提交并稍后进行单独的克隆时 我在那里看不到注释消息 有没有办法推送通过 git Notes 命令添加的所有注释消息 推送
  • Xrm.Utility.openwebresource 打开新选项卡

    我们有一个 onprem crm 2016 我只需单击功能区按钮即可打开一个 html web 资源 我在用着Xrm Utility openWebResource 问题是我们使用的是 IE11 并且所有用户的浏览器都配置为让 IE 决定如
  • 使用 XDebug 和 PHPStorm 调试 Symfony2

    我尝试着尝试 但我无法在 PHPStorm 中使用 XDebug 为 Symfony2 获得正确的调试配置 我已经检查并重新检查过 phpstorm xdebug 与 symfony2 项目 https stackoverflow com
  • 如何创建九个补丁并在我的应用程序中使用它?

    我想创建一个九补丁图像并在我的应用程序中使用它 但我不知道如何创建它 我在网上搜索了 Android 源代码 但似乎找不到任何这样的示例 我需要一个教程 以便我能够理解该过程 我已经搜索过最好和最简单的答案制作 9 块图像 现在制作 9 个
  • Rcpp 相当于 rowsum [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找 R 函数的快速替代方案r
  • Python 请求:不要等待请求完成

    在 Bash 中 可以通过附加命令在后台执行命令 我怎样才能用Python做到这一点 while True data raw input Enter something requests post url data data Don t w
  • DrawContours() 不工作 opencv python

    我正在研究在 opencv python 中查找和绘制轮廓的示例 但是当我运行代码时 我只看到一个没有绘制轮廓的黑色窗口 我不知道我哪里错了 代码是 import numpy as np import cv2 im cv2 imread t
  • 如何在GAEJ中建模实体关系?

    我想知道 非常感谢一个例子 如何在 Google App Engine for Java 中建立关系建模 一对多 多对多 我在网上搜索了一下 没有发现任何关于 Java 的内容 所有指南和教程都是关于 Python 的 我由此明白了arti
  • 在 Android 中显示来自服务/接收器的“确定”对话框

    我的应用程序有一个接收器 当收到短信时会调用该接收器 我想用一个简单的一键对话框通知用户 这是我的代码 AlertDialog Builder builder new AlertDialog Builder context builder
  • 使用 Redis 作为缓存和 C# 客户端

    我是 Redis 新手 正在尝试找出一种简单的方法来使用 Redis 作为我的 C 应用程序的本地缓存 我已经下载并运行了 redis serverhttps github com MSOpenTech redis releases htt
  • 使用有效客户端证书时出现 HttpClient 403 错误

    我正在尝试使用 Java 自动执行网站上的一些任务 我有该网站的有效客户端 当我使用 Firefox 登录时有效 但当我尝试使用 http 客户端登录时 我不断收到 403 错误 请注意 我希望我的信任存储信任任何内容 我知道它不安全 但目
  • 在android studio中制作带有大写包名的apk

    在开始之前 让我解释一下假设 我意识到使用大写的包名称是不好的约定 在我的情况下 我们正在处理一个第三方发布的 Android 应用程序 其包名称大写 不幸的是应用程序有数百万次下载 因此重新发布不是一个选择 我已经做好了广泛的研究并找不到
  • 如何使用 JsonConvert.DeserializeObject 忽略空数组?

    我正在使用此调用从 JSON 读取对象列表 Rootobject userInfo JsonConvert DeserializeObject
  • MOC 将命名空间添加到类名中

    我在编译项目时遇到了这个非常奇怪的问题 MOC 似乎在被 moc ed 的类名中添加了一个命名空间 尽管文件 类中没有提到它 然而 命名空间存在于我使用的库中 但它隐藏在头文件中很远的地方 并且我不在 UI 文件中使用它 这就是 MOC 生
  • 通过麦克风录制移动 Safari 音频

    我已经做了相当多的搜索 我知道 PhoneGap 有很多解决方案可以让人们通过麦克风录制音频 但我正在寻找的是一个可靠且简单的示例 说明如何通过 Mobile Safari 从用户麦克风录制音频 有什么例子吗 HTML5 已经取得了相当大的
  • OpenCV 和 PCL 冲突?

    我正在使用 OpenCV 2 4 2 和点云库 1 6 0 我的程序工作正常 直到我添加该行 include
  • 套接字关闭问题 - 最后一部分数据丢失

    我有一个 Java 程序 它接受连接 接收 HTTP 请求并发送 HTTP 回复以及存储在文件中的一些数据 这是缓存代理的一部分 删除所有不相关的内容 我的代码如下所示 FileInputStream fileInputStream new
  • 尝试对查询中的 Firestore 结果进行排序

    我有一个查询 我想按开始日期排序并按结束日期过滤 return FirebaseFirestore instance collection content where active isEqualTo true where end isGr
  • 启用/禁用硬件锁定消除

    我使用的是 glibc 2 24 版本 它包含用于使用事务同步扩展 例如 xbegin 和 xend 实现 pthread mutex lock 的锁省略路径 硬件应该支持锁省略hle我认为CPU标志是为了硬件锁消除 我使用的处理器是采用