通过Linux设备映射器使用持久内存设备

简介: 通过Linux设备映射器使用持久内存设备

通过Linux设备映射器使用持久内存设备


IO Alignment Considerations


传统的存储设备例如HDDSSDnvmeSAN LUNS等以blocks为单位提供存储功能。Block以字节为单位的可寻址存储单元。传统的硬盘的block大小是512字节。Newer设备通常是4K或者8K,但也可以选择逻辑/模拟的512字节的block

持久内存设备可以通过虚拟内存系统访问,因此IO可以使用系统页大小进行对齐。位于CPU上的内存管理单元(MMU)决定可能的页面大小。Linux支持两种页大小:

Ø 默认页大小,通常4KBLinux通常将其作为页表条目。

Ø 大页:需要内核支持配置CONFIG_HUBETLB_PAGECONFIG_HUGETLBFS。通常称为页面中间目录(PMD),大页大小通常为2MB

页面大小是内存使用和速度之间的折中:

Ø 大页造成空间浪费。

Ø 大内存容量下小页:需要大量的页表条目,从而需要更大内核内存保持页表

Ø 小页可能需要更多时间进行页表遍历。尤其是TLB未命中计数较高情况下。

DDR和持久内存模块之间的容量差异相当大,由于上述原因,内存为TB级的系统上使用较小页面可能会对性能带来负面影响。

使用getconf命令获取系统默认页大小,下面页面大小是4KB

$ getconf PAGE_SIZE

4096

或:

$ getconf PAGESIZE

4096

通过cat /proc/meminfo|grep -i hugepage验证系统是否支持大页:

.....

HugePages_Total: uuu

HugePages_Free:  vvv

HugePages_Rsvd:  www

HugePages_Surp:  xxx

Hugepagesize:    yyy kB

Hugetlb:         zzz kB

.....

根据处理器不同,x86_64架构下至少有两种大页大小:2M1G。如果CPU支持2M,那么会有PSE cpuinfo flag,而1G的有PDPE1GB flag/proc/cpuinfo显示这两种标签的设置。如果这些命令返回非空字符串,那么支持2M

$ grep pse /proc/cpuinfo | uniq

flags           : [...] pse [...]

如果下面命令返回非空字符串,支持1G

$ grep pdpe1gb /proc/cpuinfo | uniq

flags           : [...] pdpe1gb [...]


Verifying IO Alignment


需满足下面条件,DAX文件系统才能支持2M大页:

Ø mmap()至少映射2M

Ø 文件系统块分配的大小至少2M

Ø 文件系统块分配必须与mmap具有相同的对齐方式


原文


https://pmem.io/2018/05/15/using_persistent_memory_devices_with_the_linux_device_mapper.html

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
3月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
196 6
|
14天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
|
14天前
|
缓存 Linux
如何检查 Linux 内存使用量是否耗尽?
何检查 Linux 内存使用量是否耗尽?
|
23天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
6天前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。
|
29天前
|
存储 缓存 监控
|
2月前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
40 4
|
2月前
|
算法 Linux
Linux中内存问题
【10月更文挑战第6天】
58 2
|
26天前
|
缓存 算法 Linux
Linux内核中的内存管理机制深度剖析####
【10月更文挑战第28天】 本文深入探讨了Linux操作系统的心脏——内核,聚焦其内存管理机制的奥秘。不同于传统摘要的概述方式,本文将以一次虚拟的内存分配请求为引子,逐步揭开Linux如何高效、安全地管理着从微小嵌入式设备到庞大数据中心数以千计程序的内存需求。通过这段旅程,读者将直观感受到Linux内存管理的精妙设计与强大能力,以及它是如何在复杂多变的环境中保持系统稳定与性能优化的。 ####
32 0
|
2月前
|
存储 缓存 固态存储