LWN:调查文件系统的错误来源!

29、内核锁调试与追踪技术全解析 本文深入解析了Linux内核锁调试与追踪技术,涵盖锁调试的基本方法、数据竞争问题及其检测工具KCSAN、内核追踪技术的原理与应用,以及ftrace、LTTng、perf等常用工具的使用。通过实际案例和资源推荐,帮助开发者系统性地掌握内核并发问题的调试与性能优化方法。 阅读详情

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

Tracing the source of filesystem errors

By Jake Edge
August 7, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/984556/

在 Linux 内核中,许多地方会向用户空间返回 EINVAL (无效参数) 错误码,但往往难以确定实际的根本问题,因为 errno (错误码) 的错误代码过于笼统。Miklos Szeredi 在 2024 年 Linux 存储、文件系统、内存管理和 BPF 峰会 (Linux Storage, Filesystem, Memory Management, and BPF Summit) 上远程主持的文件系统会议中,就想要讨论这个问题。他希望帮助那些试图调试问题的人追踪内核中特定错误代码的生成位置。

文件系统挂载就是这类问题的一个例子,Szeredi 说;在许多地方会返回 EINVAL ,所以这个错误码并没有真正告诉任何人任何信息。如果他正在调试一个内核文件系统并收到错误,那么开发者就会想知道该错误发生在代码中的哪个位置。 strace 工具对于调试很有用,所以理想情况下,无论采取什么措施来帮助显示错误来自哪里,都应该与它集成。

他认为添加类似的东西并不困难,尽管最好能够得到不需要 root 权限的解决方案。他提到了现有的解决方案,包括 dmesg 中的消息,但这些消息“不适合调试”。对于使用新的挂载 API 的文件系统,从 fsopen() 返回的文件描述符可以用来读取错误消息。

另一种可能性是使用 ftrace (函数跟踪器),它可以用来追踪某些错误的来源,但他表示, tracefs 接口很难使用。 trace-cmd 工具是一个更友好的接口,但它还不支持 funcgraph-retval 选项(即 function_graph tracer 获取所需信息的途径)。如果 trace-cmd 有一个选项可以过滤负返回值,那就更好了,这个选项应该很容易添加。但它需要 root 权限并且具有全局范围,这使得它难以与 strace 集成。

他探讨了 strace 友好的解决方案可能是什么样子。他建议在 struct task_struct 中添加一个错误描述符,以便在发生错误时,代码可以使用 current->err_desc 来存储一个包含错误生成位置信息的字符串。他表示,这应该对性能没有多大影响,因为错误路径不应该经常被跟踪。他想知道是否添加的任何消息都需要成为内核 ABI 的一部分,因此不可更改,或者它们是否可以包含,比如,源文件名和行号,这些显然会发生变化。

作为一个实验,他尝试重新定义 EINVAL 和其他错误代码为宏,这些宏将使用源文件名和行号创建一个 tracepoint,但在这样做时遇到了多个问题。例如,这些值在 switch 语句、条件表达式以及用错误代码预设变量中使用;在每种情况下,宏替换都会导致编译或其他问题。

另一种方法是对错误代码的不同使用方式使用不同的宏,因此在返回语句中也许可以使用 ERR_TRACE() 来放置跟踪点。他的幻灯片中展示了更多关于这些宏的示例,这些示例可以在 YouTube 视频中看到。这种更改的问题在于,它必须手动完成,会增加复杂性,并会导致大量代码改动。

但 Amir Goldstein 认为,代码改动将“仅仅局限于感兴趣的人”,因为它只会在维护者有兴趣获得额外信息的情况下,由维护者对其子系统进行改动。Kent Overstreet 说,重构可以使用 Coccinelle 来完成,而不是手动完成。他还认为,这可能与他一直在做的内存分配配置文件工作中最近合并的基础设施有一些重叠;他在 bcachefs 中使用了大量的错误代码,这些错误代码实际上在其中都编码了源文件名和行号,尽管它们在返回到用户空间之前都被映射到常规的 errno 值了。

Aleksa Sarai 不确定仅仅获得错误代码设置位置这一个数据是否真的有帮助。在他的调试经验中,通常需要查看整个调用栈,就像使用 ftrace 一样。

Ted Ts'o 说,尚不清楚此功能的用例是什么;是针对未来某个 RHEL 内核中的最终用户,还是针对文件系统开发人员,或者完全是为了其他用例?他说,根据用例的不同,权衡结果也有所不同。Omar Sandoval 作为一名用户空间开发人员,表示他希望看到一种简单的方法来获取一个字符串,该字符串指示 EINVAL 的生成位置,而不必处理跟踪点或 =ftrace=。

Szeredi 说,他认为这个功能的目标是那些正在调试这些问题的开发人员,可能是远程调试。这是他个人最常遇到的用例。他可以看到,它可能对向应用程序返回信息也有用。

Christian Brauner 说,他可能在过去几年中为内核添加了 50 个或更多 EINVAL 返回;每次他这样做时,他都会想知道是否应该添加一个 pr_info() 调用,其中包含一些额外的信息。他说,传统上,其他内核开发人员会在添加包含更多信息的额外调用时抱怨,但如果他在用户空间处理自己的项目,他会每次都添加它们。然而,有些人认为它们是 dmesg 中的噪音。

Goldstein 想知道内核如何为 C 库 (libc) 提供对包含源文件名和行号的字符串的访问权限。用户空间程序访问 errno 并使用 strerror() 来获取更多信息,因此内核需要通过 libc 可以访问的机制提供任何额外信息。Szeredi 提出将一个字符串放在 struct ptrace_syscall_info 中,但 libc 无法访问它。

Overstreet 说,bcachefs 的新错误代码“非常有用”;他尽量不重复使用这些代码,因此它们实际上指示了代码位置。David Howells 说,libc 机制可以是一个新的系统调用来检索附加信息;或者用户空间可以向内核注册一个针对每个线程的字符串缓冲区,用于存储该信息。Ts'o 回到了用例问题;一些用户只对高级摘要消息感兴趣,而开发人员可能想要一系列低级错误消息。这两种用例有不同的要求,他担心讨论变得复杂,因为它试图同时解决这两个问题。

说到复杂性,Howells 指出,错误也可能来自远程来源,例如来自网络文件系统。这似乎使讨论接近尾声,尽管目前尚不清楚是否已经做出任何决定。这个会议是在峰会第三天也是最后一天的末尾进行的,所以参加者可能已经筋疲力尽了。

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

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

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

a3c52c02f0478c83002649048f09c786.jpeg

YOLO26算法水面与液体识别+训练好的模型+393张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[未获取()] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 52 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.8528** mAP50-95 | 0.3441 Precision | 0.7729 Recall | 0.8354 train/box_loss | 1.5367 train/cls_loss | 1.0228 val/box_loss | 1.6809 val/cls_loss | 1.1758 【训练过程分析】 我这次训练了52个周期,模型在训练初期确实收敛速度很快,前20个周期mAP50从0.74逐步提升至0.82,这说明模型开始适应数据集,学习到一些关键特征。但到第30个周期后,提升速度逐渐放缓,到了40个周期时,mAP50达到0.85,这个阶段的曲线走势有些像磨砂玻璃,平滑且不规则,后期更是趋于平缓,表明模型可能已经达到最优解,再继续训练可能会有少量提升但代价较大。整体而言,从loss曲线来看,训练集的box_loss和cls_loss在52个周期内分别从1.80和1.25降到1.54和1.02,下降曲线较为稳定,但到了后期,这两项指标下降幅度逐渐减缓,尤其cls_loss下降至1.10左右后趋于稳定,这可能是模型对训练数据已有了较强的泛化能力,但也提示我们分类的稳定性可能还欠些火候。 至于验证集的表现,box_lo... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

相关推荐

AI大模型医学影像诊断智能识别应用方案.pptx

AI大模型医学影像诊断智能识别应用方案.pptx

LWN: 老编译器以及古老的bug!

关注了就能看到更多这么棒的文章哦~Old compilers and old bugsBy Jonathan CorbetJanuary 11, 2021DeepL assisted t...

Linux News搬运工 231

智能驾驶智慧交通行业智算中心(AIDC)建设规划方案.pptx

智能驾驶智慧交通行业智算中心(AIDC)建设规划方案.pptx

LWN:改进英文文档质量的工具!

关注了就能看到更多这么棒的文章哦~Tools to improve English textJune 16, 2020This article was contributed by Ma...

Linux News搬运工 790

LLC谐振变换器恒压恒流双竞争闭环控制simulink仿真(附说明文档)

内容概要:本资源是一套面向电力电子与智能控制领域的综合性科研仿真资料合集,核心聚焦于LLC谐振变换器的恒压恒流双竞争闭环控制策略设计与Simulink建模仿真实现,涵盖半桥LLC、双向全桥LLC等拓扑结构的调频闭环仿真,并提供详尽的说明文档与PPT辅助材料。资源体系不仅深入呈现LLC变换器的动态响应与控制逻辑,还扩展至双有源桥(DAB)变换器的软开关协同优化、最小应力控制、EPS调制策略及新扩展移相角优化等前沿技术,同时集成三相PWM整流器在电网不平衡条件下的功率平衡控制、VOC+SVPWM双闭环控制等典型应用场景。此外,资源包涵盖状态估计(如EKF、UKF、PF)、微电网经济调度、卡尔曼滤波融合、神经网络控制、PID优化、储能系统管理等多个交叉方向,特别强调对顶级EI期刊研究成果的高精度复现,旨在帮助科研人员快速掌握先进控制算法的核心思想与仿真实现方法。; 适合人群:电气工程、自动化、电力电子、新能源科学与工程等相关专业的硕士博士研究生、高校科研人员,以及从事新能源变换器、智能电网、电动汽车、微电网系统研发的工程技术人员。; 使用场景及目标:① 深入理解LLC与DAB变换器的闭环控制机理,掌握恒压恒流切换、软开关实现与损耗优化方法;② 利用Simulink平台构建复杂电力电子系统模型,开展动态性能分析与控制器参数整定;③ 复现高水平期刊论文中的先进控制策略,提升科研创新能力与论文发表竞争力;④ 支持毕业设计、科研课题、项目申报及工程原型开发中的仿真验证环节。; 阅读建议:建议结合提供的完整资源目录循序渐进学习,优先研读标注“顶级EI复现”的案例以获取权威方法参考,配合MATLAB/Simulink动手搭建模型,重点关注控制框图设计、调制逻辑实现与仿真结果对比,深入理解算法背后的物理意义与数学推导过程。

概率神经网络的分类预测-基于PNN的变压器故障诊断(Matlab代码实现)

内容概要:本文系统阐述了基于概率神经网络(PNN)的变压器故障诊断方法,结合Matlab代码实现分类预测。通过提取变压器运行过程中的关键特征参数,构建PNN模型以实现对正常状态与典型故障状态(如绕组短路、铁芯故障等)的高效分类识别。文章深入剖析了PNN的网络结构、概率密度估计原理、训练机制及分类决策过程,并通过仿真实验验证了该方法在故障诊断任务中具备较高的准确率与鲁棒性,展现了其在电力系统状态监测与智能运维中的良好应用前景。; 适合人群:具备一定机器学习理论基础和Matlab编程能力的电气工程、自动化、智能电网等相关领域的研究生、科研人员以及从事电力设备状态监测与故障诊断工作的工程技术人员。; 使用场景及目标:①实现变压器早期故障的智能化诊断与预警,提升电力系统运行安全性;②为基于神经网络的工业设备故障分类任务提供可复现的算法实现范例与技术验证平台; 阅读建议:建议读者结合文中提供的Matlab代码,动手复现实验流程,深入理解PNN在实际分类问题中的参数配置、训练策略、性能评估方法,并鼓励将该方法迁移至其他电力设备或机电系统的故障诊断场景中进行拓展研究与优化改进。

LWN: 对BPF tracing进行类型检测

Type checking for BPF tracingByJonathan CorbetOctober 28, 2019原文来自:https://lwn.net/A...

Linux News搬运工 617

优快云首页 发布文章 优快云同步助手 多无人机面向城市空中交通的多无人机路径规划研究(Matlab代码实现) 37 100 摘要:会在推荐、列表等场景外露,帮助读者快速了解内容,支持

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,系统阐述了该领域的核心挑战与关键技术。文章首先定义了多无人机路径规划的问题,明确了包括飞行安全、避障、协同效率在内的多项约束条件与性能指标。随后,重点介绍了三大类路径规划方法:基于改进RRT算法和图论的全局路径规划方法,用于构建初始可行路径;基于动态风险场的模型预测控制和动态窗口法(DWA)的动态避障方法,以应对环境中的突发障碍;以及多无人机协同规划策略和分布式协同控制算法构成的局部协同调整方法,确保多机间的飞行安全与任务协同。研究通过搭建Matlab仿真实验平台,设计了多种复杂城市飞行场景,对所提方法进行了全面的仿真验证与结果对比分析,展示了各方法在不同场景下的有效性与优劣。; 适合人群:具备一定自动化、计算机或航空航天领域基础知识,从事无人机、智能交通、路径规划等相关方向研究的研发人员和研究生。; 使用场景及目标:①为城市空中交通管理系统(UATM)的设计与开发提供理论基础和技术参考;②应用于物流配送、城市巡检、应急救援等多无人机协同任务的路径规划算法设计与仿真验证;③作为相关领域科研工作的技术参考资料,推动多智能体协同决策与控制技术的发展。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,通过复现仿真结果加深对各类算法原理与实现细节的理解。在学习过程中,应重点关注全局规划与局部避障的结合机制,以及多机协同策略中的冲突消解逻辑。

LWN: 新发现的一些WiFi漏洞!

关注了就能看到更多这么棒的文章哦~Holes in the WiFiBy Jake EdgeMay 12, 2021DeepL assisted translationhttps://lw...

Linux News搬运工 2229

RAGFlow源码解析-2、从源码构架ragflow v0.25.0镜像

本文详细记录了从零开始构建自定义RAGFlow镜像lt/ragflow:0.25.0的全过程。首先介绍了环境准备,包括检查Node.js、Docker版本和项目结构。然后详细说明了构建步骤:编译前端、创建自定义Dockerfile、构建镜像和验证。接着讲解了docker-compose配置修改要点,包括网络定义、MySQL依赖处理等。最后总结了部署过程中遇到的五个关键问题及解决方案,包括networks未定义、MySQL服务依赖、tiktoken文件缺失、数据库配置错误和端口映射问题。通过完整的操作流程和问

liutao841204的专栏 364

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。深度可分离卷积即DepthwiseSeparableConvolution,该卷积将一个常规卷积过程划分成两个完成Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。首先来看,一个常规卷积是怎么实现的。其示意图如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。...

xu.hyj 1万+

LWN:对生产内核使用drgn!

关注了就能看到更多这么棒的文章哦~Using drgn on production kernelsBy Jake EdgeNovember 28, 2023LPCChatGPT translationhttps://lwn.net/Articles/952942/drgn是由 Omar Sandoval 在 Meta 内核团队工作时开发的基于 Python 的内核调试器。他现在大部分时间都在致力于...

Linux News搬运工 1055

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 1 超级指标 指标公式:买卖提示非常明显(适合通达信) 指标源码如下: M:3 100 60 N 3 100 30 散户线: 100*(HHV(HIGH,M)-CLOSE)/(HHV(HIGH,M)-LLV(LOW,M));RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,5,1); D:=SMA(K,3,1); J:=3*K-2*D;主力

m0_60244077的博客 3万+

LWN:审查内核里的文件描述符的内存安全性!

关注了就能看到更多这么棒的文章哦~A review of file descriptor memory safety in the kernelBy Daroc AldenAugust 22, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/985853/2024 年 7 月 30 日,Al Viro 向 linux-fsdevel...

Linux News搬运工 1624

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

瑞芯微Android固件修改实战:从解包到root提权完整流程(附工具包)

本文详细解析了瑞芯微Android固件深度定制全流程,涵盖从固件包解包、系统镜像修改到植入root提权与分区调整的实战步骤。通过工具链操作与原理剖析,指导开发者安全实现系统精简、权限获取及存储扩容,最终完成固件重新打包与刷机验证,适用于追求设备完全控制权的技术爱好者。

ujm56789012的博客 697

LWN:FOSDEM主题演讲引发的顾虑!

关注了就能看到更多这么棒的文章哦~FOSDEM keynote causes concernsBy Joe BrockmeierJanuary 28, 2025Gemini-1.5-flash translationhttps://lwn.net/Articles/1006351/今年在布鲁塞尔举行的自由及开源软件开发者欧洲会议(Free and Open Source Software Deve...

Linux News搬运工 941

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1115

LWN:2024年开源软件最重要的安全事件是哪些!

关注了就能看到更多这么棒的文章哦~The top open-source security events in 2024By Jonathan CorbetNovember 11, 2024OSS JapanGemini-1.5-flash translationhttps://lwn.net/Articles/996955/Marta Rybczyńska 最近进行了一项投票,并得到了一些有趣的...

Linux News搬运工 1749

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9506

PCB铺铜技巧如何铺铜经验总结

铺铜是指在PCB电气层添加整块的铜皮;铺铜包括电源层铺铜,地层铺铜和信号走线层空闲区域铺铜;铺铜是PCB设计的一个重要的环节。

fydar的博客 1万+

LWN: 修复getrandom()

点击上方蓝色“Linux News搬运工”关注我们~Fixing getrandom()ByJake Edge内核5.3版本里面有人报出一个启动过程中死机问题,最终演化...

Linux News搬运工 2631

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LWN:MySQL以及MariaDB在Fedora 40中的变化!

关注了就能看到更多这么棒的文章哦~MySQL and MariaDB changes coming in Fedora 40By Joe BrockmeierMarch 6, 2024ChatGLM translationhttps://lwn.net/Articles/960630/Fedora 项目在 Fedora 19 版本中切换到 MariaDB,用它来做 MySQL 的默认实现,这是2...

Linux News搬运工 358

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LWN: BPF 程序状态可视化工具

当验证器拒绝一个 BPF 程序时,它会生成一个包含各种信息的验证日志(verification log):在失败路径上执行的确切 BPF 指令(BPF instructions)、对任何内核函数(kernel functions)或 BPF 子程序(BPF subprograms)的调用、程序调试信息中的行号,以及关于不同寄存器(registers)和栈槽(stack slots)内容的信息。”他们只针对最新的内核版本进行测试,但实际上验证器的日志格式相当稳定,因此它应该适用于“大多数现代版本”的内核。

Linux News搬运工 116

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LWN:Linux 5.3会支持BPF里的有限循环代码

点击上方蓝色“Linux News搬运工”关注我们~Bounded loops in BPF for the 5.3 kernelJuly 31, 2019This ar...

Linux News搬运工 530

Linux服务--3.DNS 服务

在/etc/named.conf文件的开头,可以使用acl指令定义地址匹配列表。acl指令不是用于控制客户端对服务器的访问,而是使用它们来定义IP地址和网络列表。把一组IP 地址 / 网段定义成一个名字(给 IP 段起别名,方便 DNS 权限控制),它们提供别名,可以与访问控制指令和其他配置选项一起使用,并使更新配置文件更加容易。后面在 named.conf 里可以直接用这个名字控制:谁能查询DNS谁能递归查询谁能同步区域数据。

fengkai4545的博客 465
上一篇: LWN:处理文件系统的可中断特性!
下一篇: LWN:内核unsafe Rust使用标准!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值