LWN: 如何让LTTng能继续正常工作?

LTTng作为追踪子系统,在内核社区删除某些函数后面临挑战,这影响了其访问内核信息的能力。内核开发者对增加外部模块支持持谨慎态度,担心限制未来内核接口变更。LTTng的未来可能在于成为内核的一部分。

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

How to unbreak LTTng

By Jonathan Corbet
April 20, 2020

原文来自:https://lwn.net/Articles/817988/

主译:DeepL

早在2月份,内核社区就讨论过删除几个函数,因为他们可能会被loadable module利用来访问一些符号(函数和数据结构),而这些符号(函数和数据结构)本来是不应该被这些module所使用的。这一改动在5.7合并窗口期间就合入kernel了。这将导致此前依赖这些函数的module出错。由于这些模块大多都是proprietary(专有)的,因此内核社区没什么人对此担心。但有一些内核tree之外的module,使用了GPL兼容的许可证,他们也受到了这个改动的影响,LTTng就是其中之一。修复LTTng可能并不是很简单。

LTTng 属于tracing subsystem领域,要执行tracing任务,它必须能够在内核中许多深入位置加上hook。那么LTTng访问到kernel中被认为不适合导出到module的部分也就不足为奇了。无法访问kallsyms_on_each_symbol()之后,LTTng就无法查找这些地址了,从而导致破坏它的大部分功能无法正常工作了。这对于那些开发 LTTng 或者使用 LTTng 的人来说,肯定不是一个好消息。

LTTng 开发者 Mathieu Desnoyers 对这一变化采取了一些措施。他准备了patch set来导出一些新的符号;有了这些符号,LTTng 就可以做它需要做的事情,而不需要使用更通用的 kallsyms_on_each_symbol() 函数。例如,LTTng需要访问stack_trace_save_user()函数来保存用户空间的堆栈痕迹。还需要能访问task_prio()、disk_name()和get_pfn_blocks_mask()等函数。当然,LTTng也会从 tracepoints 中获取内核信息,随着 tracepoints 取代了之前使用的一些直接访问内部信息的方式,也更加适合这种用法了。此patch set将在tracepoint位置用于传递给BPF程序的参数数量提高到了13个(这样每个tracepoint位置就可以传递出更多的信息),但这个改动最终可能是用不到的。

任何关注过内核社区一段时间的人,都能猜到这个patch set收到了什么样的回应。Christoph Hellwig很直率地说道:"Which part of every added export needs an in-tree user did you not get?" 内核社区整体态度都非常强烈反对为内核仓库之外的代码添加任何形式的支持。这种抵触很大程度上是来自于对proprietary kernel modules的厌恶,但这并不仅仅因为这个。

LTTng,作为自由软件,不会像proprietary kernel code那样受大家反感。但是,正如Greg Kroah-Hartman所解释的那样,仍然有理由避免增加对免费的、out-of-tree module的支持。一旦这些module以某种方式得到了支持,它们就会给内核开发者能做的事情增加限制。内核内部接口可以根据需要随时进行更改,由于这些接口的所有调用者都存在于同一个代码库中,所以可以同时更改掉。但是,如果必须支持external module,那么要很难进行这类修改,因为调用这个改动过的接口的代码无法及时修改,从而导致接口不匹配问题。事实上,甚至改完之后都很难知道未来是不是会在某些应用场景下导致问题。

因此,Kroah-Hartman说:

We can't do anything for out-of-tree modules as they suddenly become "higher priority" than in-tree code if you have to not do specific changes or extra work for them. Which is not fair at all to the in-tree code developers at all.

这一切都表明,LTTng的发展前景并不明朗。如果无法访问内核内部信息,它就无法运行。而此刻大家已经明确拒绝了给它这个访问权限。

当然,还有一个选择,这是由Steve Rostedt首先提出的:"I guess we should be open to allowing LTTng modules in the kernel as well"。如果LTTng是mainline kernel的一部分,那么就不会再有问题了,它会拥有所需要资源的访问权限。

这不是一个新的想法。人们曾多次尝试将LTTng代码纳入主线内核,但都没有成功。在早期,内核还没有任何tracing功能之前,添加这个功能是很难做到的。现在的内核开发者在他们的工作中非常依赖tracing,他们会强烈抵制任何试图剥夺这一功能的行为,但就在不久前,同样这些开发者还不相信tracing功能是必要的。在那时候,要把任何tracing功能引入内核并不容易。

随着时间的推移,LTTng的一些底层代码已经合入内核了,但LTTng作为一个整体并没有跟着合入。最近,在2011年,Kroah-Hartman将LTTng加入了Staging Tree,作为合并LTTng的第一步。这一举动带来了大量的反对意见,其中一些意见似乎我们都很眼熟。例如,在把task_prio给export出来的时候可能会触发一个非常耗时的线程。最终,LTTng 从staging tree中被移除了——跟之前一样,回到了原点。

因此,LTTng似乎处于一个两难境地:无法独立于kernel来工作,但也无法被合并入kernel。但是,如果LTTng 无法使用的话,会对许多用户造成严重的伤害,这样也不太可能对推动 Linux 或自由软件的发展有好处。所以,也许是时候该对LTTng好一些了。如果真的不能为这个subsystem允许export出来很少的一些符号,也许可以想些办法在mainline kernel中为这么一个广泛使用的tracing subsystem准备一个容身之所,即便它在某种程度上是跟以前一些功能有重复也没关系。

全文完

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

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

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

内容概要:本文系统研究了电力系统短期负荷预测问题,提出并实现了基于极限学习机(ELM)及其智能优化改进模型的预测方法。研究涵盖标准ELM、白鲸优化算法(BWO)优化ELM和鹭鹰优化算法(IBOA)优化ELM三种模型,重点通过智能优化算法对ELM的输入权重与偏置参数进行全局寻优,有效克服了传统ELM因参数随机初始化导致的不稳定性和泛化能力不足的问题。文章完整呈现了从数据预处理、特征选择、模型构建、参数优化到预测结果对比分析的全流程,利用Matlab编程实现各模型的仿真验证,显著提升了预测精度与模型鲁棒性,为电力系统调度决策提供了可靠的技术支撑。; 适合人群:具备电力系统基础知识、时间序列预测理论及Matlab编程能力的高校研究生、科研机构研究人员以及电力公司从事负荷预测、电网调度与规划工作的技术人员。; 使用场景及目标:①应用于实际电力系统短期负荷预测业务中,提升电网运行调度的精细化与智能化水平;②作为智能优化算法与神经网络融合的经典案例,服务于学术论文撰写、科研项目申报及算法性能对比研究;③应对新能源大规模接入背景下负荷波动加剧的挑战,为构建高精度、强鲁棒性的现代负荷预测体系提供解决方案。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解ELM网络结构与优化算法的集成机制,重点对比分析不同优化策略在收敛速度、预测误差(如MAE、RMSE、MAPE)等方面的性能差异,进而掌握智能优化技术在提升预测模型性能方面的关键作用。
内容概要:本文研究了基于Benders分解与输电网运营商(TSO)和配电网运营商(DSO)协调机制的不确定环境下输配电网双层优化模型,旨在提升高比例可再生能源接入背景下电网系统的协调性与鲁棒性。模型上层以系统整体经济性为目标进行优化调度,下层采用Benders分解实现TSO与DSO之间的信息交互与协同决策,通过引入割平面迭代机制保障求解的收敛性与全局最优性。研究充分考虑新能源出力与负荷需求的不确定性,构建了具有强适应性的双层优化框架,并基于Matlab完成了模型的编程实现与仿真验证,有效解决了多主体、多层级、多不确定性因素耦合下的电力系统优化调度难题。; 适合人群:具备电力系统分析、运筹学与优化理论基础,熟悉Matlab编程环境,从事智能电网、能源互联网、分布式能源集成、电力市场等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究高渗透率可再生能源条件下输配电网协同优化调度策略;②掌握Benders分解在电力系统双层优化建模中的应用方法与实现技巧;③构建TSO-DSO多主体协调机制,实现跨层级电网资源的高效互动与决策解耦;④提升对不确定性建模、分解算法设计及大规模优化问题求解能力。; 阅读建议:建议读者结合Matlab代码逐模块剖析模型构建流程,重点理解Benders割的生成逻辑、主从问题的信息传递机制及收敛判据设定,推荐在标准IEEE测试系统上复现实验以深入掌握模型特性与算法性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值