LWN:内核的capability analysis!

腾讯云服务器被攻击,带宽被占满的抗战日记 故事 时间:2021-08-23 地点:腾讯云服务器 事件:服务器内容被黑,修复后某人气不过,开始DDOS,占满服务器的带宽,导致网站访问非常缓慢。 杂记 根据腾讯云后台+宝塔后台,带宽被占满:(小垃圾水管没办法) 部分参考:记一次阿里云服务器ECS流出带宽占满的解决过程 https://blog.youkuaiyun.com/wangzhihao1994/article/details/99563456 首先是在云主机上使用远程连接访问到云主机,安装iftop工具 CentOS . 阅读详情

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

Capability analysis for the kernel

By Jonathan Corbet
March 10, 2025
Gemini-1.5-flash translation
https://lwn.net/Articles/1012990/

Rust 类型系统的一个优势是它能够将程序状态的需求封装在类型系统中;通常,这种状态包括为了能够执行特定操作而必须持有的锁。C 语言缺乏表达这些需求的能力,但如果能够将这种特性移植到 C 语言中,将会带来明显的好处。Clang 编译器在其 线程安全分析 功能方面取得了一些进展;两位开发者一直在独立地努力,以便在 Linux 内核中利用这项工作。

Clang 的这个功能是基于“capability”(能力)的概念,程序可以在编译时被确定在任何给定点持有(或不持有)这些能力。能力通常是数据结构的地址;例如,特定 spinlock(自旋锁)的地址可以被指定为一个能力,程序可以通过 lock 操作来获取它。函数可以被注解,以表明它们获取或释放一个能力;开发者还可以表明,函数的调用者必须持有(或 不 持有)特定的能力。

向内核添加分析功能

Bart Van Assche 在 2 月 6 日发布了 一个补丁系列,展示了如何将 Clang 的线程安全功能与内核的 mutex(互斥锁)类型一起使用。这项工作的核心可以在 这个补丁 中找到,它注解了各种与 mutex 相关的函数;例如, mutex_lock() 和 mutex_unlock() 的原型被修改为:

void mutex_lock(struct mutex *lock) ACQUIRE(*lock);void mutex_unlock(struct mutex *lock) RELEASE(*lock);

第一行说明,调用 mutex_lock() 将获得一个 capability,其形式为被指向的 mutex,而调用 mutex_unlock() 将放弃该 capability。=ACQUIRE()= 和 RELEASE() 宏是构建在 Clang 的较低级别宏之上的;该集合中还有 相当多的 其他宏。有了这个基础设施,任何需要持有特定 mutex 的函数都可以相应地进行注解;例如:

static struct devfreq_governor *try_then_request_governor(const char *name)REQUIRES(devfreq_list_lock);

如果无法确定是否持有指定的锁( devfreq_list_lock ),编译器将警告对该函数的任何调用。还有一系列名称类似于 GUARDED_BY() 的宏,用于记录对特定数据(例如结构体成员)的访问需要持有某个 mutex。虽然在已发布的系列中没有实际使用这些宏。

Van Assche 的补丁集侧重于 mutex 类型,并尝试注解整个内核中的用法(尽管许多注解是 NO_THREAD_SAFETY_ANALYSIS,这会禁用分析,因为锁定对于 Clang 来说过于复杂而无法弄清楚 — 这种情况经常发生)。这项工作最终形成了一个 巨大的补丁,涉及 800 多个文件,这是一个相当大的代码变动。这项工作已经发现了一些锁相关的 bug,其修复程序已包含在该系列中。

一种替代方法

同一天,Marco Elver 发布了 他自己的补丁集,采用了略有不同的方法来使用相同的功能;该系列后来 进行了更新,采用了术语“capability analysis”(能力分析)来代替“thread-safety analysis”(线程安全分析)。当 Van Assche 使用 breadth-first(广度优先)方法处理 mutex 时,Elver 采用了 depth-first(深度优先)方法,该系列为几个 locking primitive(锁定原语)添加了注解,但仅在明确选择加入的子系统中处于活动状态。这样,可以为维护者和开发者感兴趣的代码启用警告(并对其采取措施),而其余内核则保持关闭状态。

注解的语法与 Van Assche 的方法略有不同,但意图显然是相同的:

void mutex_lock(struct mutex *lock) __acquires(lock);void mutex_unlock(struct mutex *lock) __releases(lock);

不过,Elver 的系列 patch 不仅局限在 mutex,还添加了对 spinlock、reader-writer lock (读写锁)、seqlock (顺序锁)、single-bit spinlock(单比特自旋锁)、read-copy-update (RCU,读复制更新)、local lock (本地锁) 和 wait/wound mutex (等待/伤亡互斥锁) 的注解。在许多情况下,已经存在于内核的 locking correctness validator (锁定正确性验证器) (lockdep) 的注解已被重新设计,以添加所需的能力声明。有一个 __guarded_by() 注解,用于记录必须持有哪个锁才能访问特定的结构体成员;它的使用可以在 这个补丁 中看到,该补丁对 kfence 子系统进行了检测。 capability_unsafe() 标记禁用对代码块的检查。大多数新注解以及文档都可以在 这个补丁 中找到。

Elver 方法中的另一个不同之处是显式的 opt-in(选择加入)设计,它允许每个子系统启用或禁用该功能。默认情况下,任何给定的子系统都不会被此分析覆盖;可以通过向子系统的 makefile 中添加一行或多行来更改它:

CAPABILITY_ANALYSIS := yCAPABILITY_ANALYSIS_foo := y

第一行将为通过该 makefile 编译的所有代码启用分析,而第二行将仅为创建 foo.o 的编译启用分析。该补丁集为许多内核子系统启用了该功能,包括 debugfs、kernel fence(内核防护)、rhashtable、tty 驱动程序、TOMOYO 安全模块、crypto 子系统等。

接下来是什么?

社区似乎拥有丰富的资源:两个相互竞争的补丁集,旨在利用相同的编译器功能来提高内核中的正确性检查。任何一个系列都可以增加对锁定处理正确的信心,并且两者都在编译时完全工作,没有运行时开销。对这项工作的反响非常积极,唯一悬而未决的问题似乎是哪个系列会被接受,或者内核是否会采用两者的组合。

对于这个问题没有明确的答案,但可以在 Van Assche 一直在为 Elver 的补丁集发布评论(和 Reviewed-by 标签)这一事实中找到线索。Peter Zijlstra 也 尝试 在 scheduler(调度器)子系统中使用 Elver 的工作,并说“这太棒了”。该尝试指出了一些需要的更改;似乎 Zijlstra 也设法使 Clang 编译器崩溃了。他后来 指出,capability analysis 在简单情况下有效,但对于“任何稍微有趣的情况,即你真正想要获得帮助的情况,它都会失效”。

在内核(及其他领域)中的实际使用可能有助于推动 Clang 社区的开发工作,以改进此分析功能,使其能够常规地用于验证锁定模式。可能需要在将对此类 capability analysis 的支持添加到内核之前完成一些工作。但是,由于它是一个 opt-in 的编译时功能,因此即使需要进一步的工作,相对较早地添加它也可能很有价值。内核社区似乎非常渴望获得这种支持。值得一提的是,`non-merge changeset` (未合并的变更集)或者进入 `mainline` (主线)的代码, 都可能会从中受益。

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

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

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

PCL 区域生长分割【2026最新版】 区域生长算法原理介绍、代码实现以及一个具体实验场景的应用案例进一步实现将分割结果的分类保存至本地文件夹。最近一次更新时间为:2026年5月4日。 阅读详情

相关推荐

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2854

LWN:针对二进制格式的一些好用工具!

关注了就能看到更多这么棒的文章哦~Some useful tools for binary formatsFebruary 28, 2023This article was contributed by Koen VervloesemFOSDEMAI assisted translationhttps://lwn.net/Articles/924133/Linux 用户经常使用文本文件;grep、...

Linux News搬运工 2406

ERA5 hourly data批量下载与cdo处理(一)

本篇文章主要介绍了ERA数据的批量下载

qq_40511689的博客 3871

LWN:内核开发者的更好的工具!

关注了就能看到更多这么棒的文章哦~Better tools for kernel developersByJonathan CorbetFebruary 6, 2020原文来自:htt...

Linux News搬运工 2448

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9914

基于Flink的风控系统

可以使用Flink-Stream进行实时数据流的检测和处理,或者使用Flink-Kafka集群进行数据转发和存储,然后使用Flink-Table进行数据表的查询和分析。在Flink中,可以使用Flink-Stream进行数据流的处理,或者使用Flink-Kafka进行Kafka数据流的消费和处理。Flink的运行时本身也支持迭代算法的执行。可以使用Flink-Stream进行实时数据流的检测和处理,或者使用Flink-Kafka集群进行数据转发和存储,然后使用Flink-Table进行数据表的查询和分析。

m0_68231587的博客 1875

LWN:用户空间的影子堆栈!

关注了就能看到更多这么棒的文章哦~Shadow stacks for user spaceBy Jonathan CorbetFebruary 21, 2022DeepL assisted...

Linux News搬运工 2230

从零到一:YOLOv8在边缘设备上的轻量化部署实战

本文详细介绍了YOLOv8在边缘设备上的轻量化部署实战,涵盖模型优化、TensorRT加速、剪枝与知识蒸馏等关键技术。通过工业质检和智能门禁项目案例,展示了如何将YOLOv8高效部署到树莓派、Jetson Nano等资源受限设备,显著提升推理速度和降低内存占用。文章还提供了动态分辨率调整、多模型级联部署等实用技巧,助力开发者实现边缘AI应用的高效落地。

weixin_29040367的博客 379

LWN:开源语音助手的希望!

关注了就能看到更多这么棒的文章哦~Hopes and promises for open-source voice assistantsMarch 21, 2023This article was contributed by Koen VervloesemDeepL assisted translationhttps://lwn.net/Articles/926484/2022 年底,Paulu...

Linux News搬运工 2295

磁带库Scalar i6000界面基本操作步骤

(注:磁带库的前面的门不要打开,日常维护:主要就是简单看下磁带库的状态;绿色代表正常;黄色代表报警但不影响磁带库正常使用;红色代表报警,不能正常使用,及时和厂家联系报修。) 一、磁带库管理页面 1、首先,磁带库前面(具体作用如图) 2、查看状态和管理页面 3、管理页面登陆。用户名:service 密码:xxxxxx 4、磁带机背面 二、电脑连接磁带库进入管理页面 1.用网线把电脑和磁带库的维护接口(磁带库背面)进行连接 2.电脑环境:JAVA。把电脑的IP设置成自...

杀神lwz的博客 5351

ZynqMP双核通信避坑指南:Linux驱动+裸机固件协同开发实录

本文详细解析了Xilinx ZynqMP芯片中APU与RPU双核通信的技术实现,重点介绍了通过IPI中断实现Linux驱动与裸机固件协同开发的实战经验。内容涵盖硬件寄存器配置、Linux驱动开发、RPU裸机程序编写以及双核调试技巧,为开发者提供了一套完整的工程化解决方案,帮助规避常见开发陷阱。

weixin_29168153的博客 126

LWN:定义开源硬件!

关注了就能看到更多这么棒的文章哦~Defining open hardwareOctober 18, 2023This article was contributed by Koen VervloesemChatGPT translationhttps://lwn.net/Articles/945870/开源硬件(或称为开放硬件)是指以类似开源软件的方式开发的硬件。对于开源硬件有一个被广泛接受的定...

Linux News搬运工 2634

【Python】解决 ERROR: Exception:Traceback (most recent call last):(亲测有效)

1、遇到问题2、问题解决

Fanjufei的博客 1万+

LWN:统一Linux 随机数设备!

关注了就能看到更多这么棒的文章哦~Uniting the Linux random-number devicesBy Jake EdgeFebruary 16, 2022DeepL ass...

Linux News搬运工 1143

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LWN:多代LRU方案的未来!

当一个 page 被访问时,它们会从较老的一代 list 移动到较新的一代,当需要回收内存时,会先从最古老的一代来开始回收 page。每一代的 page 都会随着时间的推移而变得老化,当最老的一代中的 page 都被回收掉了的时候,就会创造出新的一代。自这项工作的第一次发布以来最大的变动是在 "tier" (层)的定义上,tier 这个词现在被用来细分各代 page,这反过来又可以帮助更好地决定哪些 page 需要回收(reclaim),特别是在那些需要使用大量 buffered I/O 的系统中。

GetnextWindow的专栏 459

VB摄像头监控

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

LWN:用SCHED_EXT和IOCost改进性能!

关注了就能看到更多这么棒的文章哦~Improving performance with SCHED_EXT and IOCostBy Daroc AldenApril 1, 2024SCALEChatGLM translationhttps://lwn.net/Articles/966618/在今年的SCALE大会上,来自 Meta 的 Dan Schatzberg 和 Tejun Heo 先后连...

Linux News搬运工 979

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LWN:Linux图形栈简介,第二部分!

关注了就能看到更多这么棒的文章哦~The Linux graphics stack in a nutshell, part 2December 28, 2023This article was contributed by Thomas ZimmermannChatGPT translationhttps://lwn.net/Articles/955708/在屏幕上显示应用程序的图形化输出内容需要...

Linux News搬运工 791

LWN:推动 Lustre 文件系统进入上游!

作为一名 VFS 维护者,他不想成为那个做决定的人,但合并一个新的文件系统“会给整个社区带来负担”,因此这应该是一个共同的决定。客户端“每月有几百个补丁,服务器的补丁量是客户端的三到四倍”,这使得跟上内核的步伐变得更加困难。Layton 说:“小步前进是好的”,不过 Day 指出,如果没有内核中的服务器代码,测试 Lustre 会更困难。这会影响 ext4 的开发,但其他更改,例如重写 jbd2 日志层使其不再需要 buffer heads 的计划,也可能因为包含 Lustre 服务器而变得复杂,他说。

Linux News搬运工 1450

LWN:分层固定带宽服务调度器!

相反,如果没有可运行的任务,截止期限服务器就会放弃 CPU,使其可供任何可能正在争夺它的实时任务使用。当截止期限服务器运行时,它将以通常的方式调度该组内的任务,确保整个组获得分配给它的资源,即使系统中其他地方有更高优先级的实时任务试图运行。有一个 CBS 调度器,即截止期限调度器(deadline scheduler)(详情请参阅备受怀念的 Daniel Bristot de Oliveira 撰写的 这篇文章),但该调度器并非分层的,并且要求实时任务是专门为其编写的。(所需的 CPU 时间);

Linux News搬运工 1430

LWN:6.1内核开发数据(以及更多)!

关注了就能看到更多这么棒的文章哦~Development statistics for the 6.1 kernel (and beyond)By Jonathan CorbetDecember 12, 2022DeepL assisted translationhttps://lwn.net/Articles/915435/6.1 内核于 12 月 11 日发布;到这次发布时,已经有 13942...

Linux News搬运工 653

LWN:文件系统回写并行化!

在一些简单的测试中,当禁用 XFS 的大页时,他在内核回写线程饱和之前能达到大约每秒 800MB 的速度。现有单线程回写所遇到的一些性能问题,在去年峰会的一次会议上曾被提及,当时讨论了并行回写的想法。他认为,对于多线程回写的第一个版本,保持单个 inode 列表将是合理的。通过远程连接,Jan Kara 表示他听到的情况是,大多数人的兴趣在于低层并行,这将并行化单个 inode 的回写。在该层,不同类型的文件系统操作,例如 XFS 的块分配与纯覆盖写入,可以由独立的工作队列(workqueue)处理。

Linux News搬运工 1328

LWN: 2019年LWN年终总结!

关注了就能看到更多这么棒的文章哦~A year-end wrap-up from LWNByJonathan CorbetDecember 18, 2019原文来自:https://l...

Linux News搬运工 1853

LWN:GNU C 库 2.39 版本!

关注了就能看到更多这么棒的文章哦~GNU C Library version 2.39By Daroc AldenFebruary 6, 2024Gemini translationhttps://lwn.net/Articles/960309/GNU C 库 (glibc)发布了 2.39 版,1 月 31 日,其中包含了些新特性。值得一提的重要内容包括用于孵化(spawning)子进程的新函...

Linux News搬运工 731

LWN:实时Linux和嵌入式Linux的当前状态!

关注了就能看到更多这么棒的文章哦~The state of realtime and embedded LinuxBy Jonathan CorbetApril 25, 2024OSSNAChatGPT translationhttps://lwn.net/Articles/970555/Linux 以存在于众多类型的系统中而闻名。其中服务器和数据中心确实获得了大量的关注,而今年又总是被称为 Li...

Linux News搬运工 484

LWN:Linux图形栈简介,第一部分!

关注了就能看到更多这么棒的文章哦~The Linux graphics stack in a nutshell, part 1December 19, 2023This article was contributed by Thomas ZimmermannChatGPT translationhttps://lwn.net/Articles/955376/Linux 图形开发者经常提到“现代”L...

Linux News搬运工 916

LWN:用BOLT进行内核优化!

关注了就能看到更多这么棒的文章哦~Kernel optimization with BOLTBy Jake EdgeOctober 25, 2024LPCGemini-1.5-flash translationhttps://lwn.net/Articles/993828/2024 年 Linux Plumbers Conference的toolchains track中的两场演讲探讨了不同...

Linux News搬运工 2342
上一篇: LWN:Timer ID,CRIU,API变动!
下一篇: LWN:网络代码中着手处理冻结页!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值