首页 > 其他分享 >Active MM 【ChatGPT】

Active MM 【ChatGPT】

时间:2023-12-12 23:25:10浏览次数:40  
标签:MM 匿名 空间 用户 mm 地址 Active ChatGPT active

注意,对于内核中配置为 CONFIG_MMU_LAZY_TLB_REFCOUNT=n 的系统,mm_count 引用计数可能不再包括“懒惰”用户(即运行任务时满足条件 ->active_mm == mm && ->mm == NULL 的用户)。必须使用 mmgrab_lazy_tlb() 和 mmdrop_lazy_tlb() 辅助函数来获取和释放这些懒惰引用,这些函数会对这个配置选项进行抽象处理。

列表:linux-kernel
主题:Re: active_mm
发件人:Linus Torvalds <torvalds () transmeta ! com>
日期:1999-07-30 21:36:24

抄送给 linux-kernel,因为我并不经常写解释,但当我这样做时,希望更多的人能够阅读。

在 1999 年 7 月 30 日,David Mosberger 写道:

有没有一个简要的描述,说明了在 task_struct 中的“mm”和“active_mm”应该如何使用?(如果这在邮件列表上已经讨论过,我很抱歉,因为我刚从度假回来,一段时间内无法关注 linux-kernel。)

基本上,新的设置如下:

  • 我们有“真实地址空间”和“匿名地址空间”。不同之处在于匿名地址空间根本不关心用户级页表,因此当我们切换到匿名地址空间时,我们只需保持之前的地址空间处于活动状态。

    “匿名地址空间”的明显用途是任何不需要任何用户映射的线程——所有内核线程基本上都属于这一类别,但即使“真实”线程也可以暂时表示在一段时间内不会对用户空间感兴趣,并且调度程序可能会尽量避免在切换 VM 状态时浪费时间。目前只有旧式的 bdflush 同步执行这一点。

  • “tsk->mm”指向“真实地址空间”。对于匿名进程,tsk->mm 将为 NULL,这是合乎逻辑的,因为匿名进程根本就没有真实地址空间。

  • 然而,我们显然需要跟踪为这样的匿名用户“窃取”的地址空间。为此,我们有“tsk->active_mm”,它显示当前活动的地址空间是什么。

    规则是,对于具有真实地址空间的进程(即 tsk->mm 非 NULL),active_mm 显然必须始终与真实地址空间相同。

    对于匿名进程,tsk->mm == NULL,而 tsk->active_mm 是匿名进程运行时“借用”的 mm。当匿名进程被调度走时,借用的地址空间将被归还并清除。

为了支持所有这些,现在“struct mm_struct”有两个计数器:一个是“mm_users”计数器,表示有多少“真实地址空间用户”,另一个是“mm_count”计数器,表示有多少“懒惰”用户(即匿名用户),如果有任何真实用户,则加一。

通常至少有一个真实用户,但可能会出现这样的情况:真实用户在另一个 CPU 上退出,而懒惰用户仍然活跃,因此实际上可能存在一个仅由懒惰用户使用的地址空间。这通常是一个短暂的状态,因为一旦该线程被调度以优先于真实线程,由于“mm_count”变为零,这个“僵尸”mm将被释放。

另外,一个新规则是,_没有人_再将“init_mm”视为真实的 MM。应该将“init_mm”视为“没有其他上下文可用时的懒惰上下文”,实际上它主要只在启动时使用,因为尚未创建真正的虚拟内存。因此,以前用于检查

   if (current->mm == &init_mm)

通常应该改为

   if (!current->mm)

(这更有意义——测试基本上是“我们是否有用户上下文”,通常由页面错误处理程序等部分执行。)

无论如何,我刚刚在 ftp.kernel.org 上发布了一个预补丁-2.3.13-1,因为它稍微改变了接口以适应 alpha(谁会想到,但 alpha 实际上最终拥有了最丑陋的上下文切换代码——与其他架构不同,alpha PALcode 将 MM 和寄存器状态合并在一起,因此需要同时切换两者)。

(来源:http://marc.info/?l=linux-kernel&m=93337278602211&w=2)

标签:MM,匿名,空间,用户,mm,地址,Active,ChatGPT,active
From: https://www.cnblogs.com/pengdonglin137/p/17898092.html

相关文章

  • 软脏(soft-dirty) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/mm/soft-dirty.html软脏(soft-dirty)是一个位于PTE(页表项)上的标志位,用于跟踪任务写入的哪些页面。为了进行这种跟踪,需要执行以下步骤:清除任务的PTE中的软脏位。这可以通过向相关任务的/proc/PID/clear_refs文件写入“......
  • hwpoison 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/hwpoison.html"hwpoison"是什么?即将推出的英特尔CPU支持从一些内存错误(MCA恢复)中恢复。这需要操作系统声明一个页面为“毒害”,终止与之关联的进程,并避免将来使用它。这个补丁包在虚拟机中实现了必要的基础设施。引用概述评论:高级......
  • 物理地址模型 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/memory-model.html物理内存模型系统中的物理内存可以以不同的方式进行寻址。最简单的情况是物理内存从地址0开始,并延伸到最大地址的连续范围。然而,这个范围可能包含对CPU不可访问的小空洞。然后可能存在完全不同地址的几个连续范围。......
  • KSM 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/ksm.htmlKernelSamepageMerging(KSM)KSM是一种节省内存的去重功能,通过CONFIG_KSM=y启用,添加到Linux内核中的2.6.32版本。有关其实现,请参阅mm/ksm.c,以及http://lwn.net/Articles/306704/和https://lwn.net/Articles/330589/。KSM的用......
  • 虚拟映射的内核栈支持 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/vmalloced-kernel-stacks.html虚拟映射的内核栈支持作者[email protected]概述这是从引入虚拟映射内核栈功能的代码和原始补丁系列中整理的信息https://lwn.net/Articles/694348/。介绍内核栈溢出通常很难调......
  • 页面迁移 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/page_migration.html#page-migration页面迁移页面迁移允许在NUMA系统中的节点之间移动页面的物理位置,同时进程正在运行。这意味着进程看到的虚拟地址不会改变。但是,系统重新排列这些页面的物理位置。另请参阅异构内存管理(HMM),用于......
  • Multi-Gen LRU 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/multigen_lru.html多代LRU多代LRU是一种替代LRU实现,它优化页面回收并在内存压力下提高性能。页面回收决定了内核的缓存策略和内存过度分配的能力。它直接影响了kswapdCPU的使用率和RAM的效率。设计概述目标设计目标包括:良好的......
  • 空闲页面报告 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/free_page_reporting.html空闲页面报告空闲页面报告是一种API,设备可以通过该API注册以接收当前系统未使用的页面列表。这在虚拟化的情况下非常有用,因为虚拟机可以利用这些数据通知hypervisor它不再使用内存中的某些页面。对于驱动程......
  • 文心一言 VS 讯飞星火 VS chatgpt (155)-- 算法导论12.3 2题
    二、用go语言,假设通过反复向一棵树中插人互不相同的关键字来构造一棵二叉搜索树。证明:在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。文心一言:为了证明这个结论,我们可以使用二叉搜索树的性质:在二叉搜索树中,每个节点包含一个关键字以及指......
  • 异构内存管理(HMM) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/hmm.html异构内存管理(HMM)HMM提供基础设施和辅助工具,将非常规内存(例如设备内存,如GPU板载内存)整合到常规内核路径中,其核心是为此专门设计的用于此类内存的structpage(请参见本文档的第5至7节)。HMM还提供了用于SVM(共享虚拟内存)的可选辅......