首页 > 其他分享 >原子替换和累积补丁 【ChatGPT】

原子替换和累积补丁 【ChatGPT】

时间:2023-12-12 10:23:51浏览次数:29  
标签:累积 函数 补丁 原子 livepatch ChatGPT 替换

原子替换和累积补丁

在 livepatch 之间可能存在依赖关系。如果多个补丁需要对相同的函数进行不同的更改,那么我们需要定义补丁安装的顺序。并且来自任何更新的 livepatch 的函数实现必须建立在旧的 livepatch 的基础之上。

这可能会成为一个维护噩梦,特别是当更多的补丁以不同的方式修改了同一个函数时。

一个优雅的解决方案是使用名为“原子替换”的功能。它允许创建所谓的“累积补丁”。它们包括所有旧的 livepatch 中所需的所有更改,并在一个转换中完全替换它们。

用法

可以通过在 struct klp_patch 中设置 "replace" 标志来启用原子替换,例如:

static struct klp_patch patch = {
        .mod = THIS_MODULE,
        .objs = objs,
        .replace = true,
};

然后所有进程都会迁移到仅使用新补丁的代码。一旦转换完成,所有旧的补丁将自动禁用。

Ftrace 处理程序会自动从不再被新累积补丁修改的函数中移除。

因此,livepatch 作者可能只需维护一个累积补丁的源代码。这有助于在添加或删除各种修复或功能时保持补丁的一致性。

用户在转换完成后可以只保留系统上安装的最后一个补丁。这有助于清晰地看到实际使用的代码。此外,livepatch 可能被视为修改内核行为的“普通”模块。唯一的区别是它可以在不破坏功能的情况下在运行时进行更新。

特点

原子替换允许:

  • 在上一个补丁中原子地恢复一些函数,同时升级其他函数。
  • 消除因不再被修补的函数的核心重定向而导致的性能影响。
  • 减少用户对 livepatch 之间依赖关系的困惑。

限制

  • 一旦操作完成,没有直接的方法来撤销它并原子地恢复替换的补丁。
  • 一个良好的实践是在任何发布的 livepatch 中设置 .replace 标志。然后重新添加一个旧的 livepatch 相当于降级到该补丁。只要 livepatch 在 (取消)打补丁回调或 module_init() 或 module_exit() 函数中不做额外的修改,这是安全的。
  • 还要注意,只有在转换没有被强制的情况下,才能删除和重新加载替换的补丁。
  • 只有来自 累积 livepatch 的 (取消)打补丁回调会被执行。来自替换的补丁的任何回调都会被忽略。
  • 结果,通过旧的累积补丁替换新的累积补丁可能是危险的。旧的 livepatch 可能不提供必要的回调。
  • 这在某些情况下可能被视为限制。但在许多其他情况下,这会使生活变得更加轻松。只有新的累积 livepatch 知道添加/删除了什么修复/功能,以及对于平稳转换需要什么特殊操作。
  • 总之,如果调用了所有启用的补丁的回调,那么考虑各种回调的顺序和它们的交互将是一场噩梦。
  • 没有对影子变量的特殊处理。Livepatch 作者必须创建自己的规则,如何将它们从一个累积补丁传递到另一个。特别是它们不应该在 module_exit() 函数中盲目地移除它们。
  • 一个良好的实践可能是在后取消打补丁回调中移除影子变量。只有在 livepatch 被正确禁用时才会调用它。

标签:累积,函数,补丁,原子,livepatch,ChatGPT,替换
From: https://www.cnblogs.com/pengdonglin137/p/17896160.html

相关文章

  • 设备电源管理基础 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/devices.html设备电源管理基础版权©[email protected],NovellInc.©[email protected]©2016IntelCorporation作者:RafaelJ.Wysockirafael.j.wysocki@inte......
  • 电源管理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/index.htmlAPMorACPI?DebugginghibernationandsuspendChargerManagerTestingsuspendandresumesupportindevicedriversEnergyModelofdevicesFreezingoftasksOperatingPerformancePoints(OPP)Library......
  • CPU空闲时间管理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/cpuidle.htmlCPU空闲时间管理版权©2019IntelCorporation作者[email protected]空闲时间管理子系统系统中的每个逻辑CPU(看起来获取和执行指令的实体:如果存在的话,硬件线程或处理器......
  • 调度器统计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-stats.html调度器统计版本15的schedstats删除了一些sched_yield的计数器:yld_exp_empty、yld_act_empty和yld_both_empty。除此之外,它与版本14完全相同。版本14的schedstats包括对sched_domains的支持,......
  • 调度器调试文件说明 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-debug.html调度器调试文件说明numa_balancing目录numa_balancing目录用于保存控制NUMA平衡功能的文件。如果来自该功能的系统开销过高,则可以通过scan_period_min_ms、scan_delay_ms、scan_period_max_ms和scan_......
  • Scheduler pelt c program 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/text_files.html/**Thefollowingprogramisusedtogeneratetheconstantsfor*computingschedaverages.**==============================================================* Cprogram(compilewith......
  • 调度器 Nice 设计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-nice-design.html调度器Nice设计本文档解释了在新的Linux调度器中重新设计和简化nice-levels实现的思路。在Linux下,nicelevels一直比较弱,人们不断地纠缠我们,希望让nice+19的任务使用更少的CPU时间。不......
  • 实时组调度 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-rt-group.html实时组调度0.警告调整这些设置可能导致系统不稳定,这些旋钮只有root用户才能操作,并且假设root用户知道自己在做什么。最值得注意的是:在sched_rt_period_us中使用非常小的值可能导致系统不稳定,......
  • 利用率夹紧(Utilization Clamping) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-util-clamp.html利用率夹紧1.简介利用率夹紧,也称为utilclamp或uclamp,是一种调度器功能,允许用户空间帮助管理任务的性能需求。它是在v5.3版本中引入的。CGroup支持在v5.4中合并。Uclamp是一种提示机制,允许调度器了解......
  • 能量感知调度(EAS) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-energy.html能量感知调度1.简介能量感知调度(EnergyAwareScheduling,EAS)赋予调度器预测其决策对CPU能量消耗的影响的能力。EAS依赖于CPU的能量模型(EnergyModel,EM)来为每个任务选择一个能效高、对吞吐量影响最小......