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

    文章

    1476

    浏览量

    43089
  • 内存
    +关注

    关注

    9

    文章

    3234

    浏览量

    76506
  • 腾讯云
    +关注

    关注

    0

    文章

    224

    浏览量

    17497

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    虚拟机数据恢复—虚拟机vmdk文件被删除的数据恢复案例

    本次数据恢复涉及一台R710系列服务器和一台MD3200系列存储,上层是ESXI5.5版本的虚拟机和虚拟文件。因客户机房非正常断电,虚拟机无法启动。机房管理员检查发现虚拟机配置
    的头像 发表于 02-10 17:05 498次阅读
    <b class='flag-5'>虚拟</b>机数据恢复—<b class='flag-5'>虚拟</b>机vmdk<b class='flag-5'>文件</b>被删除的数据恢复案例

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

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

    虚拟化数据恢复—Hyper-V服务瘫痪危机:虚拟机数据文件丢失后的数据恢复案例

    一台服务器中虚拟机数据文件丢失,hyper-v服务受到影响,服务器无法正常使用。 北亚企安数据恢复中心的硬件工程师对服务器进行物理故障排查,未发现服务器存在物理故障。服务器数据恢复工程师对操作系统
    的头像 发表于 11-20 15:47 441次阅读

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

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

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

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

    搭建自己的ubuntu系统之创建ubuntu虚拟

    点击“下一步”完成。指定磁盘文件,这里默认即可。默认点击“完成”即可。至此,虚拟机创建完成。下一小节中我们介绍系统虚拟机中的安装,其在真机中的安装方法与
    发表于 09-25 09:39

    Linux三大主流文件系统解析

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

    开放原子开源基金会与腾讯达成合作

    近日,在北京举行的2025开放原子开源生态大会现场,开放原子开源基金会与腾讯计算(北京)有限责任公司签署“开源协作平台互联合作协议”。
    的头像 发表于 08-05 11:06 1499次阅读

    RISC-V 虚拟化堆栈和硬件的最新进展

    运行实时操作系统(RTOS)、高可靠性任务以及 Linux 等通用系统。   在计算场景中,虚拟化更是 “入场券”。它为计算提供了高可用
    发表于 07-18 16:00 4038次阅读

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

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

    中软国际鸿虚拟机安装指南

    鸿蒙电脑作为新一代分布式计算平台,凭借其卓越的多端协同能力和智能化特性,高效办公提供了新选择。针对专业软件兼容性这一核心痛点,中软国际的鸿虚拟机解决方案提供了务实的技术路径。作为专为鸿蒙生态打造
    的头像 发表于 06-23 16:31 5378次阅读

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

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

    服务器数据恢复—ocfs2文件系统被格式化为Ext4文件系统的数据恢复案例

    服务器存储数据恢复环境&故障: 人为误操作将Ext4文件系统误装入一台服务器存储上的Ocfs2文件系统数据卷上,导致原Ocfs2文件系统被格式化为Ext4文件系统
    的头像 发表于 06-10 12:03 884次阅读
    服务器数据恢复—ocfs2<b class='flag-5'>文件系统</b>被格式化为Ext4<b class='flag-5'>文件系统</b>的数据恢复案例

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

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

    基于云端虚拟化技术手机解决方案

    虚拟环境,将物理资源分割独立运行的手机实例,每个实例具备独立硬件配置和操作系统环境。 支持多用户并发操作,通过Open API实现批量设备控制与任务调度。 网络与资源调度‌ 采用边
    的头像 发表于 05-09 08:04 979次阅读
    基于云端<b class='flag-5'>虚拟</b>化技术<b class='flag-5'>云</b>手机解决方案