LWN:用户空间的中断!

运维系列【仅供参考】:RustDesk部署疑难解答 RustDesk部署疑难解答 阅读详情

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

User-space interrupts

By Jonathan Corbet
September 30, 2021
LPC
DeepL assisted translation
https://lwn.net/Articles/871113/

"interrupt(中断)" 这个术语会让人联想到源自硬件的、由内核所处理的那个中断信号,甚至连软中断(software interrupt)也是属于内核的一个概念。但是,似乎有一个场景中会需要让用户空间的进程互相之间直接来发送 interrupt。在 2021 年的 Linux Plumbers 大会上,Sohil Mehta 主持了一场关于 Linux 如何支持这个功能的内核峰会。

84b0d07d830c3034694623d8d827c1b0.png

Mehta 说,用户空间中断(user-spaceinterrupt,或简称 "user interrupt (用户中断)")这个功能的核心就是要以快速的方式来进行 event signaling (事件通知)。它可以绕过内核,直接向用户空间来传递 signal,从而实现更低的 latency。他说,我们现有的进程间通信机制都有一些局限。同步机制(synchronous mechanism)通常需要用一个专门的线程来做事,会有很高的延迟,而且通常效率很低。异步机制(比如说信号)的延迟甚至更高。所以往往我们唯一的选择就是轮询(polling),这种做法浪费了 CPU 时间。如果能有一个快速、高效的替代方案就更好了。

用户空间中断就是一个很好的选择,它将首先出现在英特尔的 "Sapphire Rapids" CPU 中。支持这一功能的 RFC patch 已于 9 月中旬发布了。这些 patch 支持 user-to-user 的信号发送,不需要经过内核,直接使用新的 SENDUIPI 指令就可以让一个进程直接向另一个进程发送中断了。未来的版本中还会包括 kernel-to-user 的信号发送,并最终支持让设备直接发送中断给到用户空间进程。

Mehta 提供了一些 benchmark 结果(可以在幻灯片中看到),数据显示用户空间中断比使用 eventfd()快 9 倍,比使用管道(pipe)或信号(signal)快 16 倍。如果接收进程在内核中被阻塞了的话,这个优势就会降低,因为在这种情况下无可避免地需要进行上下文切换。即使如此,用户空间中断对接收方来说也要快 10%,而对发送方来说则要快得更多,因为发送方根本不需要进入内核了。Florian Weimer 问道,用户空间中断与 futexes 相比如何,但看起来这方面还没有进行过测试。

这个功能的使用场景当然也会包括快速进程间通信(fast interprocess communication)。那些 user-mode CPU scheduler 调度器可以从中受益,用户空间的 I/O stack(例如 networking stack)也可以受益。要想充分利用这一特性,就需要对 libevent 和 liburing 等库进行修改。Mehta 说目前还没有真正在使用这个功能的应用,他很想听听大家的反馈看有哪些其他可能受益的应用。Ted Ts'o 建议在虚拟化环境中用来进行 host-to-guest 的唤醒;看起来这个用例正在进行调查,但目前还没有实际测试结果。

用户空间的进程出于各种原因不能随意向他人发送中断,这里需要进行一些设置。在接收方,相关的工作都始于一个调用:

uintr_register_handler(handler, flags);

其中 handler() 是用来处理用户空间中断的函数,flags 必须设为 0。handler 函数的定义需要特别注意,它的原型是这样的:

void __attribute__ ((interrupt))
    handler(struct __uintr_frame *frame, unsigned long long vector);

接下来需要创建至少一个跟这个 handler 关联起来的文件描述符:

int uintr_create_fd(u64 vector, unsigned int flags);

这里,vector 是 0 到 63 之间的一个数字。每个 vector 都可以创建一个文件描述符。然后,该进程将该文件描述符交给发送方。如果发送方是同一进程中的另一个线程,那么这个传递就很简单,否则的话就需要使用 Unix 里的 socket 来传输这个文件描述符了。然后,发送方要通过以下方式来进行配置:

int uintr_register_sender(int fd, unsigned int flags);

其中 fd 是接收者传递过来的文件描述符,flags 和之前一样需要是 0。返回值是一个 handle,可以与 GCC 11 支持的 _senduipi() intrinsic 一起使用来实际进行中断发送到接收者。

中断的实际递交时机要取决于接收方当时正在做什么。如果该进程正在用户空间中运行,那么 handler 函数将会被立即调用,并取得相应的 vector 编号。一旦 handler 处理程序返回了,那么就会在之前被中断的位置继续执行。如果接收者此时被阻塞在内核的系统调用中,那么该中断将会在返回到用户空间时被触发,也就是说并不会打断当前正在进行的系统调用。在 patch set 中有一个 uintr_wait() 系统调用,它的作用是一直阻塞到收到一个用户空间中断,然后就立即返回,但此函数目前的行为还是一个示意性质的,需要等大家决定了这种情况下的理想行为之后再进行修改。

Prakesh Sangappa 询问大家是否真的有必要与所有相关的发送者来传递文件描述符。在一个可能有大量发送者的系统中,这个动作可能会耗费不少资源。Mehta 回答说这里有几个优化方案正在研究中。Ts'o 询问用户空间中断是否可以广播给多个接收者,回答是不支持广播。

Arnd Bergmann 想知道是否考虑过在老式 CPU 上模拟这一功能。答案似乎是肯定的,内核将捕获相关指令,并采取一种透明的方式来模拟实现它们的行为。Mehta 要求得到关于这个仿真机制的反馈,尤其是这个机制是否应该在其他架构上也实现。Bergmann 不赞成这个想法,他说,如果为这些架构也实现了用户空间中断的话,它们肯定与仿真出来的版本不兼容。他说,对其他架构的仿真应该只有在这些架构自己定义了它们自己的指令之后才能进行。

Greg Kroah-Hartman 询问 Clang 编译器是否支持 _senduipi() intrinsic。这个支持目前正在进行中,但尚未完成。Kroah-Hartman 还询问了从该功能中受益的工作场景的更多细节,Mehta 回答说他也还没有什么具体的东西可以提供。

时间已经不多了,结束这次会议之前,Mehta 问了一个问题,当接收者在系统调用中被阻止时应该发生什么。如前所述,目前的 patch set 在完成中断传递之前会一直等待系统调用返回。我们是否应该改变行为,使之更接近于信号,也就是立即会完成中断传递,而系统调用则被打断并返回 EINTR?没有人对这个问题发表意见,会议就此结束了。

这个讲座的视频可以在 YouTube 上找到。

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

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

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

5662a8c5e6cfd7d928f6f91d3898c211.png

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分) 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右 阅读详情

相关推荐

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 349

Intel 计划在Linux kernel中引入 User Interrupts,效率是eventfd的10倍

文章目录未来Eventfd的替代品 User Interrupts详细介绍什么是 User Interrupts底层是如何工作的?内核管理相关的数据结构User IPI应用接口具体的例子 未来Eventfd的替代品 User Interrupts         近期,在Linux kernel邮件列表中看到了Intel计划在最新的硬件中支持 User Interrupts功能,并在linux kernel社区中征求意见。邮件中

从善若水的博客 1688

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1255

uio_interrupt / user space interrupt

TO BE DONE //drivers/uio //################################### // uio framework //----------------------------------- // uio based specific driver //################################### //====

340

Ubutntu下使用realsense d435i(二):获取某二维像素点的三维坐标

00 准备工作 准备工作包括安装驱动以及pyrealsense2,具体可参考上一篇: Ubutntu下使用realsense d435i(一):准备工作以及安装pyrealsense2 https://blog.youkuaiyun.com/gyxx1998/article/details/121461293 01 通过二维像素点获得物体三维坐标 这个在上一篇已经介绍了代码: realsense d435i获取某像素点三维坐标(计算深度和点云两种方法) https://blog.youkuaiyun.com/gyxx1998/

gyxx1998的博客 9943

Python CalmAn(Calcium Imaging Analysis)神经生物学工具包安装及环境配置过程

CalmAn是一个用于大规模钙成像数据分析和行为分析的Python工具箱。CaImAn实施了大规模钙成像数据分析管道中所需的一套基本方法。针对多天的运动校正、源提取、尖峰反褶积和分量配准,实现了快速且可扩展的算法。它适用于双光子和单光子荧光显微镜数据,可以在批处理和在线模式下运行;CaImAn还包含一些分析摄像机行为的例程。

Fine的优快云博客 3557

linux shell中断函数,linux – 在bash中捕获键盘中断

我在bash中有一个捕获键盘中断的函数.该函数如下所示:user_interrupt(){echo -e "\n\nKeyboard Interrupt detected."sleep 2echo -e "\n Cleaning up..."rm -rf /usr/local/src/mysources}现在,在同一个脚本中,我有另一个名为install()的函数,它使用标准的./configur...

weixin_31749595的博客 522

SWIPT技术(无线通信携能技术)的简介与架构——(后续补充无人机SWIPT方向)

SWIPT一、SWIPT(无线通信携能)技术简介1.1、组成:1.2、与传统无线通信的区别:1.3、SWIPT 的集成接收器架构设计1、单独的接收器2、TS架构——时间开关(Time switching,TS)3、PS架构——功率分流(Power splitting,PS)4、天线开关接收器主要两种架构的区别参考文献SWIPT的发展 一、SWIPT(无线通信携能)技术简介 SWIPT(Simultaneous Wireless Information and Power Transfer )是各种WPT技术

Blue 1万+

Linux kernel -- 用户空间中断实现赏析

待上传

500 661

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3175

工商银行数据智能架构实践

工商银行大数据平台技术创新与实践摘要(149字): 工商银行构建了企业级大数据云基础设施,形成包含批量计算、流计算、联机分析等核心能力的技术架构。平台创新性地实现流批一体处理,将个人储蓄存款监测时效提升至分钟级;通过实时数仓技术将报送时效缩短至1-5分钟;融合内外部数据构建风控模型,债券违约预警准确率达100%。平台还支撑了"码上赢"精准营销和空间数据服务等创新应用,未来将向存算分离、实时数仓和云数智融合方向演进,持续提升数据价值转化能力。

银行信息系统应用架构详解 538

记录一种在内核空间向用户空间通知中断的方法

最近在项目中遇到一个需求,需要将一个设备的中断状态通知到用户态的一个指定程序中,该设备的整体架构如下:CPU通过SPI与设备通信,在设备中存在一个ISR控制单元,当设备发生中断时,会在ISR单元中给对应的寄存器置位,CPU可以通过轮询这些寄存器单元来判断这些中断是否发生。但这样做就失去了中断的意义,内核依旧是通过轮询方式来扫描中断。

weixin_45682654的博客 1128

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 527

LWN:为用户空间的加锁情况延长时间片!

关注了就能看到更多这么棒的文章哦~Extending time slices for user-space locksBy Daroc AldenFebruary 19, 2025Gemini-1.5-flash translationhttps://lwn.net/Articles/1009509/Steven Rostedt 最近发布了一个补丁集,该补丁集可以通过让调度器更多地了解何时可以安全...

Linux News搬运工 960

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

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LWN:用户空间的 per-CPU memory!

本质上,这是缓存行对齐数组方法的变体,但分配器会将分配的数据紧凑地排列在每个 CPU 的区域内,从而减少这些区域之间的内存浪费。Desnoyers 首先表示,他的目标是帮助用户空间开发者更好地利用 restartable sequences (可重启序列),它通过在关键部分中断进程(如果进程在此时被迁移),从而促进对 per-CPU 数据的某些类型的访问。因此,该库首先在一个特殊的“初始化区域”中初始化一个 CPU 的内存,然后为每个 CPU 创建该区域的写时复制(copy-on-write)映射。

Linux News搬运工 1516

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LWN:平衡好处理软中断以及实时任务!

关注了就能看到更多这么棒的文章哦~Juggling software interrupts and realtime tasksBy Jonathan CorbetDecember 2, 2022DeepL assisted translationhttps://lwn.net/Articles/915320/软件中断(software-interrupt)机制是内核中最古老的子系统之一了。甚至可...

Linux News搬运工 444

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LWN:seccomp用户空间通知功能以及信号处理!

关注了就能看到更多这么棒的文章哦~Seccomp user-space notification and signalsBy Jonathan CorbetApril 9, 2021Dee...

Linux News搬运工 408

LWN:用户空间临界区相关的延后调度处理!

关注了就能看到更多这么棒的文章哦~Deferred scheduling for user-space critical sectionsBy Jonathan CorbetOctober 27, 2023ChatGPT translationhttps://lwn.net/Articles/948870/User-space 开发人员在处理深度多线程化的应用程序时,通常希望能够使用自旋锁(spi...

Linux News搬运工 813

LWN:把软中断锁放到更底层去!

关注了就能看到更多这么棒的文章哦~Beginning the software-interrupt lock pushdownBy Jonathan CorbetAugust 4, 2023ChatGPT assisted translationhttps://lwn.net/Articles/939973/大内核锁(BKL)现在已经成为了一个遥远的记忆,但在那么多年里,它都是内核开发社区面临的一...

Linux News搬运工 933

LWN:利用SFrame提供更可靠的用户空间调用栈记录!

关注了就能看到更多这么棒的文章哦~Reliable user-space stack traces with SFrameBy Jonathan CorbetMay 22, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932209/许多调试和优化任务中都需要拿到完整的调用栈信息(stack trace),但是,要想...

Linux News搬运工 1037

LWN:处理文件系统的可中断特性!

关注了就能看到更多这么棒的文章哦~Handling filesystem interruptibilityBy Jake EdgeAugust 5, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/983714/David Howells 希望在 2024 年的Linux 存储、文件系统、内存管理和 BPF 峰会...

Linux News搬运工 2154

LWN:在kernel中实现完整的task-isolation!

关注了就能看到更多这么棒的文章哦~A full task-isolation mode for the kernelApril 6, 2020This article was contr...

Linux News搬运工 2566

LWN:UIO驱动的DMA地址!

他后来补充说,该提案“从根本上说是错误的且不安全的”,并且,如果他建议的方法不起作用,则唯一的选择是编写完整的内核驱动程序。当然,如果不破坏未知数量的现有驱动程序,就无法删除 UIO,但是可以将其冻结,目的是减少将来编写的使用 UIO 接口的驱动程序的数量。但是,拒绝新的 UIO 功能的真正结果似乎很可能是将这些功能推入到一组(可能更危险的)特定于驱动程序的 hacks 中,正如 DMA 地址显然已经在发生的那样。该系列还添加了一个新的 dma-buf 堆模块,用于创建简单的、缓存一致的 DMA 缓冲区。

Linux News搬运工 1280

LWN:tasklet要被终结了!

关注了就能看到更多这么棒的文章哦~The end of taskletsBy Jonathan CorbetFebruary 5, 2024Gemini translationhttps://lwn.net/Articles/960041/在内核开发中,常见的困难在于控制何时让特定的任务完成。内核代码经常在一些动作(例如休眠或调用文件系统)无法进行的环境中执行。虽然可能执行其他动作,但可能会妨...

Linux News搬运工 308

LWN:最近在关注的kernel改动!

关注了就能看到更多这么棒的文章哦~Kernel topics on the radarBy Jonathan CorbetAugust 2, 2021DeepL assisted tran...

Linux News搬运工 523

LWN:把NAPI轮询改为使用kernel threads!

关注了就能看到更多这么棒的文章哦~NAPI polling in kernel threadsBy Jonathan CorbetOctober 9, 2020DeepL assiste...

Linux News搬运工 561
上一篇: LWN:滚动发布的稳定版内核!
下一篇: LWN:Google 更加靠近 mainline 开发!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值