LWN:split-lock用户应该受到多重的惩罚?

Split Lock(拆分锁)内核机制 LOCKwarnWARNINGWARNINGPANICWARNING某些程序为了性能,会偷偷把本应“原子”的操作拆成多步(跨多个内存地址)。如果在系统启动时的messages(即内核配置了相关策略),但Split Lock 事件。它相当于一条“声明”,告诉您系统会如何处理拆分锁问题。 阅读详情

关注了就能看到更多这么棒的文章哦~

The search for the correct amount of split-lock misery

By Jonathan Corbet
October 19, 2022
DeepL assisted translation
https://lwn.net/Articles/911219/

X86 与许多其他架构不同,它能支持那些会影响超过一个 cache line 的原子操作(atomic operation)。但是,这种支持也带来了代价,不尽包括整个系统的性能方面的代价,甚至在安全性方面也有代价。在过去的几年里,内核开发人员一直在努力阻止使用这种 "split-lock" 操作。但是,现在,有一群用户感到有点太受伤了,于是就引出了一个讨论,使用有问题、但在架构上是合法的操作的用户,应该得到多大程度的不便。

跨越 cache line 边界的原子操作存在的问题是,系统总线必须要采取特殊措施来确保两个 cache line 都在受到保护,不会被多方并发同时访问到(concurrent access)。在实践中,这就意味着在操作过程中要锁住总线(locking the bus),这可能会使得系统中的其他处理器都无法继续执行。只有有一个恶意的程序来执行一个紧凑的会导致 split-lock 操作循环,就可以破坏整个系统的性能。由于这个原因,split-lock 操作长期以来一直不被人看好。

不幸的是,恶意软件(或只是写得不太好的软件)对于这些反对意见完全无动于衷。因此,从 2019 年开始,内核开发人员就在寻求更有说服力的方式来表达他们的观点。最初的工作是由 Fenghua Yu 完成的,但最后,Peter Zijlstra 的 patch 在 2020 年 1 月被合并到 5.7 内核版本中。它使内核有能力对 split-lock 操作引起的 trap 采取一些行动,并提供了三种选项,可由 split_lock_detect= 这个 kernel 命令行参数来选择:

  • off,内核的行为会跟以前一样;不检测 split-lock 操作,出现的时候不做任何事情。

  • warn(默认值),在检测到 split-lock 操作时在系统日志中发出 warning(warning 频率会有限制)。

  • fatal,让内核立即 kill(用 SIGBUS)这些试图进行 split-lock 的进程。

我们希望 warning 模式足以提醒用户注意这个问题,并让软件能得到正确的 fix,同时不影响任何人使用自己的系统。但是,到了今年早些时候的 5.19 开发周期,似乎对于去除 split-lock 操作并没有太大进展,,拒绝服务(denial-of-service)的问题还是跟以前一样现实存在。因此,人们决定采取更强硬的立场来克制 split-lock。

当然,选项之一是默认切换到 fatal 模式,但这会是一个非常严厉的解决方案。Tony Luck 采取了不同的方案,他写了一个 patch,标题是 "让分裂锁的人活得很痛苦(make life miserable for split lockers)"。这个 patch 中修改了 warning 模式,会对导致了 split-lock 的进程进行惩罚,但不会真正去 kill 它们。相反,在检测到 split-lock 时就会让它受到 10ms 级别的 delay,并且通过 semaphore 保证序列执行。当选择这种模式时,使用了 split-lock 的恶意程序仍然会拖慢自己执行的速度,但对整个系统不再有太大影响了。这一改动是在 5.19 合并窗口期间合入的。

9 月中旬,一个名为 "pibberflibbits" 的 GitHub 用户发布了一份 bug report,称 Linux 上的 God of War (战神)游戏的性能变得 "低得离谱"。参与讨论的人们花了一点时间,最终发现问题出在 split-lock 的这个额外惩罚上。显然,战神并不满足于仅使用普通的 lock,所以游戏中使用了许多 split locking。Luck 的 patch 确实达到了预期的目的,战神玩家现在是过得很痛苦。

不过,Guilherme G. Piccoli 并没有庆祝这场对战神的胜利;相反,他发布了一个 patch,认为 "不应该修改 default 配置选项,让旧的应用或者专有软件表现下降,尤其是原有的 config 选项能正常工作的情况下"。这个 patch 对 warn 模式恢复到了的旧的行为,并增加了一个新的 seq 模式,该模式会像现在的 warn 模式一样拖慢 split-lock 用户的速度。warn 模式仍然是默认的,这就解除了游戏界的苦难。

对这一改动的意见不太一致。Luck 指出,游戏玩家可以通过在内核命令行上用 split_lock_detect=off 重启,就能直接禁用 split-lock 检测。他说,如果要增加 seq 模式,那么也应该是默认的。他还建议向《战神》的发行商提交一个 bug,从而让其 fix 它自己的问题。

不过,其他人不同意。Joshua Ashton 认为这个问题是个普遍问题。"这不仅仅是《战神》的具体一个游戏的问题。有许多老的作品永远不会再更新了,也就无法 fix 这个问题。这些游戏以前能很好地运行,性能也很好"。其他人指出,许多游戏玩家不太可能做到去调整内核的命令行参数。Dave Hansen 观察到,造成痛苦的这个计划已经按计划运作,并将问题暴露出来了。但是他继续说道:

我的直觉告诉我,我们应该保留 warning,不再让人们痛苦了。那些能够 fix 这些 bug 的人可能也是会看 dmesg 的人,他们不需要经受这样的痛苦来得到额外的提示。那些运行 Windows 游戏的人不看 dmesg,只想在没有痛苦的情况下玩他们的游戏。

不过,Luck 认为,split-lock 会给其他进程(除了这个有责任的进程之外)制造了痛苦,而目前的模式 "在多用户系统上非常有效"。他建议,也许可以开发某种启发式方法,让这些折腾用户的行为就限制在多用户系统中。

不过,最终 Thomas Gleixner 给出了明确的答案,他指出,默认情况下拖慢 split-lock 的速度,这是发行版中可以做出的唯一选择;其他任何方案都会产生一个容易被利用的拒绝服务漏洞。所以拖慢速度的做法需要保留。"减少受攻击的暴露面,会比某个应用程序出现问题要更重要"。不过,他确实建议说,可以添加一个 sysctl 开关来控制 split-lock 的检测;这就可以让那些使用这种出现了的应用程序的用户能回到以前的性能,而不需要弄清楚如何改变 kernel 命令行参数,也不需要重启他们的系统。

这就是 Piccoli 为解决这个问题所提交的第二个版本中采取的方法。新增了 kernel.split_lock_mitigate 开关,如果设置为 0 的话将禁用对使用 split-lock 的进程所进行的惩罚(同时保留发送到 system log 的 warning)。默认情况是保留这个减速的行为。这个 patch 似乎让每个人都很满意,而且看起来很可能会进入 6.2 版内核。受影响的玩家将不得不去相应设置新的开关,也就是说要想成为真正的战神,得先知道要调整系统中的哪些 sysctl。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

format,png

深入剖析 split locks,i++ 可能导致的灾难 动手点关注干货不迷路????Split lock 是 CPU 为了支持跨 cache line 进行原子内存访问而支持的内存总线锁。有些处理器比如 ARM、RISC-V 不允许未对齐的内存访问,不会产生跨 cache line 的原子访问,所以不会产生 split lock,而 X86 是支持的。split lock 对开发者来说是很方便的,因为不需要考虑内存不对齐访问的问... 阅读详情

相关推荐

Linux: sys: split_lock_detect; 性能相关的split-lock

这个的意思是说,一个原子变量的内存位置横跨两个缓存线(cache line)导致,锁单元被分裂。这种情况导致的一个主要问题就是性能影响比较严重。所以如果出现性能问题的时候,这一点也算是一个调查的方向。x86特有的一种情况。从RHEL的版本看,没有这个配置文件。Intel的开发手册。

mzhan017的博客 1548

LWN:开发者争论split-lock检测机制!

关注了就能看到更多这么棒的文章哦~Developers split over split-lock detectionByJonathan CorbetDecember 6, 2019...

Linux News搬运工 2608

【HDLBits实战】从真值表到最优电路:SOP与POS形式在ECE241考题中的精妙应用

本文以HDLBits平台上的ECE241考题为例,详细讲解了如何从真值表出发,利用卡诺图化简技术,推导出最优的积之和(SOP)与和之积(POS)逻辑表达式。文章重点剖析了如何处理“无关项”以简化电路,并通过Verilog代码实现对比,阐述了SOP与POS形式在数字电路设计中的精妙应用与实战价值。

z2a3b4c5d的博客 216

LWN:检测Intel CPU的split locks以及阻止攻击

点击上方蓝色字关注我们~Detecting and handling split locksJune 7, 2019This article was contribute...

Linux News搬运工 2535

EGO_Plannerv2代码学习(一):栅格建图之V1 V2的区别

最近在尝试将高飞老师的集群规划器部署到真实无人机上跑一下,开这个新帖记录下学习过程中的问题和想法。

qq_41069236的博客 5749

LlamaIndex 入门实战

LlamaIndex是一个“数据框架”,用于帮助构建LLM应用程序。它提供了各种工具,包括数据连接器,用于摄取现有数据源和数据格式(API,PDF,文档,SQL等),以及用于将数据结构化(索引,图形)以便与LLM轻松使用的方式。此外,LlamaIndex还提供了高级的检索/查询接口,可以输入任何LLM输入提示,并返回检索到的上下文和增强知识的输出。它还允许与外部应用程序框架(如LangChain,Flask,Docker,ChatGPT等)轻松集成。

AIGC搞起 1万+

锁步核(lock-step core)、软件冗余设计与可分核(Split-Lock)的比较

这是一篇翻译文,原文题目为:Evolving safety systems: Comparing Lock-Step, redundant execution and Split-Lock technologies 原文地址:https://community.arm.com/developer/ip-products/system/b/embedded-blog/posts/comparing-...

Setul 3万+

第150篇 激光雷达点云分割——地面分离、聚类分析和物体提取

本文介绍了点云分割的三种经典几何方法:RANSAC地面分离、欧式聚类和区域生长。RANSAC通过随机采样拟合平面实现地面分割,欧式聚类基于空间距离进行物体分割,区域生长则结合法线信息提升分割精度。文章对比了各种方法的优缺点,提供了参数选择建议,并指出实际项目中常组合使用这些方法。最后给出了面试应答技巧,强调几何方法速度快、可解释性强等优势,适合大多数机器人项目的实时需求。

郑伟强dev的专栏 192

CPU内相关冗余设计

了解为满足功能安全需求,CPU内部所设计的相关硬件冗余和软件冗余的设计原理

安娜贝尔的博客 4074

YoloV10改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。改进方法简单高效,需要发论文的同学不要错过!

m0_47867638的博客 1094

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1660

Split Lock日志分析

这很可能是主机夯死的主因。可进一步精准定位问题模块!Split Lock 是。

weixin_53389944的博客 1332

cadence中利用sva进行FPV实战(可直接使用)

在cadence中使用fpv进行formal验证

youzjuer的博客 749

lock-step技术

LOCKSTEP 技术 LOCKSTEP技术使用相同的、冗余的硬件组件在同一时间内处理相同的指令。 LOCKSTEP技术可以保持多个CPU、内存精确的同步,在正确的相同时钟周期内执行相同的指令。 该技术保证能够发现任何错误,即使短暂的错误,系统也能在不间断处理和不损失数据的情况下恢复正常运行。 该技术是容错技术的一种,应用于很多RPU上。

Mark 2万+

基于RK3588平台的高分辨率多摄像头系统深度优化:从48M单摄到双摄分时复用的完整解决方案

本文深入解析了RK3588平台的高分辨率摄像头实现方案。重点介绍了:1)RK3588的MIPI PHY硬件架构,包括DCPHY和DPHY的资源配置及工作模式;2)双ISP合成技术,通过并行处理提升48M高分辨率图像的处理能力;3)以OV50C40传感器为例,详细展示了48M单摄系统的硬件连接、I2C设备配置和关键参数设置。文章为开发者提供了从硬件连接到软件配置的完整技术方案,有助于实现高性能嵌入式视觉系统。

FJN110的博客 673

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

cache性能优化总结

cache性能优化总结

keiskei 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

7个示例科普CPU Cache(转)

 转载本站文章请注明作者和出处 酷壳 – CoolShell.cn ,请勿用于任何商业用途   CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫,浩瀚繁星,阅之如临深渊,味同嚼蜡,三言两语难以入门。正好网上有人推荐了微软大牛Igor Ostrovsky一篇博文《漫游处理器缓存效应》,文章不仅仅用7个最简单的源码示例就将CPU ...

简约不简单 979

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CPU cache 与内存对齐

一. Cache Cache一般来说,需要关心以下几个方面 1)Cache hierarchy Cache的层次,一般有L1, L2, L3 (L是level的意思)的cache。通常来说L1,L2是集成  在CPU里面的(可以称之为On-chip cache),而L3是放在CPU外面(可以称之为Off-chip cache)。当然这个不是绝对的,不同CPU的做法可能会不太一样。这里面应该

zhang_shuai_2011的专栏 2万+

java cache line_Java高级进阶多线程学习之路(五)cache line 缓存行

​ CPU从内存读取数据时实际是按块读取的,有什么好处呢?程序局部性原理,可以提高效率,充分发挥总线CPU针脚等一次性读取更多数据的能力。因为多数情况下CPU处理完一个数据后会处理该数据旁边的数据,所以按块去读取时,将一块数据一起读过来放入缓存,这样CPU处理完一个直接从缓存中取下一个,不需要再去内存取,极大的提高了局部性空间效率。这一块数据就被叫做缓存行。那一个缓存行能放多大的数据呢,目前...

weixin_39662834的博客 338

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 412

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 886

节日小游戏活动快速落地与高效转化技巧

比如,把平时验证过的消消乐、大转盘、接红包等经典玩法作为底子,只需要针对特定的节日(像春节、中秋)或者门店庆典,快速替换一套应景的UI素材和文案,再植入专属的节日福利。这种“旧瓶装新酒”的方式,能把开发周期压缩到极致,确保活动能踩着流量的爆发点准时上线。特别是对于实体门店,游戏通关后的奖励最好能直接引导到线下核销,比如“满100减20”的优惠券,这样能把线上的流量精准地拽进店里,形成实实在在的成交。这种基于熟人关系的推荐,比硬广有效得多,能迅速在朋友圈和社群里铺开,实现低成本的流量获取。

Hxzyxkf2016的博客 181

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 639

PyBox有什么好用的数织小游戏吗?

我们今天梳理了市面上主流的数织解谜工具,包括在线网站和本地应用,并且重点介绍了 PyBox 中的数织 Nonogram。在线解谜网站**适合快速上手、免费体验,但不适合长时间离线使用。本地解谜工具**提供了离线体验,方便专注解题,但可能会涉及安装和广告问题。PyBox的数织 Nonogram**则在绿色无广告、免安装、完全开源、及DIY定制等方面有着明显优势,非常适合想要一个干净、可控、无干扰的游戏环境的用户。如果你追求极致无干扰、注重隐私、喜欢轻量应用,那么数织 Nonogram 绝对值得一试。

Sanmsung的博客 123

Windows远程桌面实现之二十:实现 moonlight 游戏串流协议之(一)

本文介绍在xdisp_virt中集成Moonlight游戏串流协议的实现过程。基于开源项目Sunshine逆向的GameStream协议,作者从零研究并自研实现Moonlight服务端网络通信部分,涵盖mDNS设备发现、nvhttp/nvhttps加密通信、nvrtsp协议交互及三类UDP数据通道(视频、音频、控制)。重点解决多客户端并发问题,采用串行处理机制确保连接一致性。通过自定义证书验证与密钥管理,完成配对与安全通信,最终实现低延迟、高性能的游戏串流体验,显著优于WebRTC浏览器方案。

fanxiushu的专栏 164
上一篇: LWN:初识6.1内核中的Rust!
下一篇: LWN:6.1 合并窗口第二部分!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值