0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

腾讯云虚拟化开源团队为内核引入全新虚拟文件系统

Linux阅码场 来源:腾讯云 作者:誉磊 2021-02-20 17:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux内存管理概述

我们知道linux系统内核的主要工作之一是管理系统中安装的物理内存,系统中内存是以page页为单位进行分配,每个page页的大小是4K,如果我们需要申请使用内存则内核的分配流程是这样的,首先内核会为元数据分配内存存储空间,然后才分配实际的物理内存页,再分配对应的虚拟地址空间和更新页表。

好奇的同学肯定想问,元数据是什么,为什么我申请内存还要分配元数据,元数据有什么用呢?

其实为了管理内存页的使用情况,内核设计者采用了page structure(页面结构)的数据结构,也就是我们所说的元数据来跟踪内存,该数据结构以数组的形式保存在内存中,并且以physical frame number(物理页框号)为索引来做快速访问 (见图1) 。

27ec6f16-71ad-11eb-8b86-12bb97331649.png

(图1)

元数据存储着各种内存信息,比如使用大页复合页的信息,slub分配器的信息等等,以便告诉内核该如何使用每个页面,以及跟踪页面在各个映射列表上的位置,或将其连接到后端的存储等等。所以在内核的内存管理中页面元数据的重要性不言而喻,目前在64位系统上这个数据结构占用64个字节,而由于通常的页面大小为4KB,比如一台安装了4GB内存的普通电脑上就有1048576个普通页,这意味着差不多需要64MB大小的内存来存储内存元数据来用于管理内存普通页。

似乎看起来并没有占用很多内存,但是在某些应用场景下面可就不同了哦,现今的云服务中普遍安装了海量内存来支持各种业务的运行,尤其是AI机器学习等场景下面,比如图2中,如果服务器主机有768g的内存,则其中能真正被业务使用的只有753g,有大约10多个g的物理内存就被内存元数据所占用了,假如我们可以精简这部分内存,再将其回收利用起来,则云服务提供商就可以提供更多的云主机给自己的客户,从而增加每台服务器能带来的收入,降低了总体拥有成本,也就是我们常说的TCO,有那么多好处肯定是要付诸实施咯,但是我们要如何正确并且巧妙地处理这个问题而不影响系统的稳定性呢?

28245b24-71ad-11eb-8b86-12bb97331649.png

(图2)

Direct Memory Management File System(直接内存管理文件系统)

有的小伙伴会说好像现有的内核接口就可以解决类似问题呀,比如我可以mmap系统中的/dev/mem,将线性地址描述的物理内存直接映射到进程的地址空间内,不但可以直接访问这部分内存也绕过了内核繁复的内存管理机制,岂不是很方便。但其实这里有很大的局限性,首先对于/dev/mem的访问需要root权限的加持,这就增加了内核被攻击的风险,其次mmap映射出来的是一整块连续的内存,在使用的过程中如何进行碎片化的管理和回收,都会相应需要用户态程序增加大量的代码复杂度和额外的开销。 为了既能更好地提高内存利用率,又不影响已有的用户态业务代码逻辑,腾讯云虚拟化开源团队独辟蹊径,为内核引入了全新的虚拟文件系统 - Direct Memory Management File System(直接内存管理文件系统)(见图3),该文件系统可以支持页面离散化映射用来避免内存碎片,同时全新设计了高效的remap (重映射)机制用来处理内存硬件故障(MCE)的情况,并且对KVM、VFIO和内存子系统交互所用到的接口都进行了优化,用来加速虚拟机机EPT页表和IOMMU页表的建立,在避免了内存元数据的额外开销的情况下还增加了虚拟机的性能提升的空间。

2878d6ae-71ad-11eb-8b86-12bb97331649.png

(图3)

从内存管理上来看,dmemfs在服务器系统启动引导的时候就将指定数量的内存预先保留在系统中的各个NUMA节点上,这部分内存没有被系统内存管理机制接管,也就不需要消耗额外的内存来存储元数据。 我们知道内核的内存信息全部来自e820表, 这部分e820信息只提供了内存的区间描述和类型,无法提供NUMA节点信息, 所以必须在memblock初始化之后, 内核buddy伙伴系统初始化之前做好内存预留 (见图4), 而这时memblock可能已经有分配出去的空间, 以及BIOS会预留等等原因, 导致同一个节点存在不连续的内存块,因此dmemfs引入了全新的kernel parameter “dmem=”,并将其指定为early param。 内核在解析完参数之后会将得到的信息全部存放在全局结构体dmem_param,其中包含着我们需要预留的memory的大小和起始地址等,随后在内核初始化到在ACPI处理和paging_ini()之间,我们插入dmem的预留处理函数memblock_reserve(),将dmem内存从memblock中扣除,形成dmem内存池。而存留在memblock中的系统内存则会被paging_init()构建对应的内存元数据并纳入buddy子系统。(见图4)

28a10142-71ad-11eb-8b86-12bb97331649.png

(图4)

预留下来的内存由称为dmem_pool的内存池结构体来管理,第一层拓扑为dmem numa node,用来描述dmem在各个numa 节点上的分布情况以实现了numa亲和性,第二层拓扑是在dmem numa node的基础上再实现一个dmem region链表,以描述当前节点下每段连续的dmem内存区间(见图5)。每个region中以page作为分配的最小颗粒度,都关联到一个local bitmap来维护和管理每个dmem 页面的状态,在挂载dmemfs文件系统时为每个 region申请并关联 bitmap, 并且指定页面大小的粒度, 比如4K, 2M或1G,从而方便在服务器集群中部署使用

28c237cc-71ad-11eb-8b86-12bb97331649.png

(图5)

简单的来说在挂载了dmemfs文件系统之后,就可以使用如下的qemu参数将dmemfs所管理的物理内存传递给虚拟机直接使用。

而在虚拟机启动之后,对内存的读写会发生缺页异常,而内核的缺页处理机制会将请求发送给dmemfs,dmemfs就会将预留内存按照所需页面的大小补充到EPT表中从而帮助虚拟机建立好GVA->HPA的映射关系。 为了满足实际生产环境,dmemfs还必须支持对MCE的处理。MCE, 即Machine Check ERROR, 是一种用来报告系统错误的硬件方式。当触发了MCE时, 在Linux内核流程中会检查这个物理页面是否属于dmem管理, 我们在基于每个连续内存块的dmem region内引入了一个error_bitmap, 这是以物理页面为单位的, 来记录当前系统中发生过mce的页。同时通过多个手段, 保证分配内存使用的bitmap和这个mce error_bitmap保持同步, 从而后续的分配请求会跳过这些错误页面(见图6)。 然后在内存管理部分引入一个 mce通知链, 通过注册相应的处理函数, 在触发mce时可以通知使用者进行相应的处理。 而在dmem文件系统层面, 我们则通过inode链表来追踪文件系统的inode,当文件系统收到通知以后, 会遍历这个链表来判断并得到错误页面所属的inode,再遍历inode关联的vma红黑树, 最终得到使用这些错误页的相关进程进行相应的处理。

28f133ec-71ad-11eb-8b86-12bb97331649.png

(图6)

在使用了dmemfs之后,由于消除了冗余的内存元数据结构,内存的额外消耗有了显著地下降,从图7的实验数据中可以看到,内存规格384GB的服务器中, 内存消耗从9GB降到2GB, 消耗降低了77.8%,而内存规格越大, 使用内存全售卖方案对内存资源的消耗占比越小, 从而可以将更多内存回收再利用起来, 降低了服务器平台成本。

29333760-71ad-11eb-8b86-12bb97331649.png

(图 7)

原文标题:内存管理的另辟蹊径 - 腾讯云虚拟化开源团队为内核引入全新虚拟文件系统(dmemfs)

文章出处:【微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    4

    文章

    1436

    浏览量

    42485
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76108
  • 腾讯云
    +关注

    关注

    0

    文章

    224

    浏览量

    17379

原文标题:内存管理的另辟蹊径 - 腾讯云虚拟化开源团队为内核引入全新虚拟文件系统(dmemfs)

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙技术大会2025丨虚拟化与容器分论坛:构筑开源鸿蒙虚拟化技术高地

    随着开源鸿蒙技术的快速发展,各行各业、各品类的生态设备加速融入生态,当数字世界的边界不断拓宽,我们正站在操作系统革命的十字路口。虚拟化技术打破硬件桎梏,‌让一块芯片承载多重宇宙,从智能手表到车载
    的头像 发表于 11-20 17:35 531次阅读
    <b class='flag-5'>开源</b>鸿蒙技术大会2025丨<b class='flag-5'>虚拟</b>化与容器分论坛:构筑<b class='flag-5'>开源</b>鸿蒙<b class='flag-5'>虚拟</b>化技术高地

    虚拟机数据恢复—异常断电致ESXI存储失联?这份实战数据恢复案例请收好

    服务器存储数据恢复环境: 一台服务器上部署esxi虚拟化平台。上层采用通过FreeNAS构建的iSCSI方式FCSAN功能,FreeNAS层采用UFS2文件系统。 esxi虚拟系统
    的头像 发表于 11-11 14:11 109次阅读

    飞凌嵌入式ElfBoard-系统应用编程之文件I/O

    字机制,用于不同进程之间的通信。管道和套接字也被视为文件,并通过文件描述符进行访问。虚拟文件系统(Virtual File System):虚拟文件系统是Linux
    发表于 10-24 08:57

    Linux三大主流文件系统解析

    还在为选择哪个文件系统而纠结?作为一名摸爬滚打多年的运维老鸟,我将用最接地气的方式,带你彻底搞懂 Linux 三大主流文件系统的奥秘。
    的头像 发表于 08-05 17:37 1038次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-文件系统常用命令之磁盘管理与维护常用命令

    :当前系统在哪个设备的哪个分区,其中tmpfs虚拟文件系统;Type:文件系统类型;Size:当前系统的大小。1K-blocks对应列的单
    发表于 06-24 11:26

    飞凌嵌入式ElfBoard ELF 1板卡-文件系统简介

    临时的设备,例如网络文件系统/proc一个虚拟文件系统内核提供向进程发送信息的机制。操作系统运行时,进程以及
    发表于 06-19 17:22

    Vsan数据恢复——Vsan分布式文件系统虚拟机不可用的数据恢复

    一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用,存储内的数据丢失。
    的头像 发表于 05-15 17:42 424次阅读
    Vsan数据恢复——Vsan分布式<b class='flag-5'>文件系统</b>上<b class='flag-5'>虚拟</b>机不可用的数据恢复

    Linux内核编译失败?移动硬盘和虚拟机的那些事儿

    Linux内核却失败了,这是咋回事?FAT和NTFS文件系统不能支持软链接,在这写格式的磁盘里编译内核会失败,同样也不能在这样的磁盘里解压内核源码,会造成软链接被破
    的头像 发表于 04-11 11:36 728次阅读
    Linux<b class='flag-5'>内核</b>编译失败?移动硬盘和<b class='flag-5'>虚拟</b>机的那些事儿

    支持48位寻址!华为开源文件系统EROFS跨入大模型训练

    的要求。   最近,开源文件系统EROFS在即将到来的Linux 6.15内核周期中进行扩展,以处理更大规模的存储系统。此次改进旨在使EROFS更适配AI训练场景及其他大规模数据归档需求。   在Linux 6.15合并窗口开启
    发表于 03-27 01:22 969次阅读

    虚拟化数据恢复—VMware虚拟化环境下重装系统导致服务器数据丢失的数据恢复

    VMware虚拟化平台 vmfs文件系统 工作人员误操作重装操作系统,服务器崩溃。 重装系统会导致文件系统
    的头像 发表于 03-13 10:33 631次阅读
    <b class='flag-5'>虚拟</b>化数据恢复—VMware<b class='flag-5'>虚拟</b>化环境下重装<b class='flag-5'>系统</b>导致服务器数据丢失的数据恢复

    NFS网络文件系统深度解析

    NFS:Network File System 网络文件系统,基于内核文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端
    的头像 发表于 03-01 14:15 1155次阅读

    电脑搭建虚拟,电脑搭建虚拟电脑的具体方法

    较好的服务器,至少具备多核处理器、16GB以上内存和大容量硬盘,且有稳定的网络连接。    安装系统:下载电脑系统的镜像文件并制作U盘启动盘,将服务器设置从U盘启动,然后按照安装向导
    的头像 发表于 01-22 10:27 1124次阅读
    电脑搭建<b class='flag-5'>虚拟</b><b class='flag-5'>云</b>,电脑搭建<b class='flag-5'>虚拟</b><b class='flag-5'>云</b>电脑的具体方法

    知声Atlas超算平台的核心亮点

    ”,荣耀入选《分布式统一大数据虚拟文件系统Alluxio原理、技术与实践》。这一荣誉不仅彰显了知声在技术创新方面的实力,也充分肯定了其在AI计算领域的贡献。
    的头像 发表于 01-07 16:08 948次阅读

    腾讯内核团队修复Linux关键Bug

    腾讯操作系统(Tencent OS)内核团队近日在Linux社区取得了显著成果。他们提交的两项改进方案,成功解决了自2021年以来一直困扰
    的头像 发表于 12-31 10:58 915次阅读

    关于更新openharmony文件系统时遇到的问题

    用的固件,文件系统内核是之前的,之前版本用起来没问题。但是 用下面三个的时候 固件可以正常烧录,也按照文档里面加载了环境变量,但是烧录内核文件系统(都是U盘更新的)的时候出现了
    发表于 12-30 11:55