前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Linux设备映射器使用持久内存设备

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

作者头像
yzsDBA
发布2020-11-23 11:04:45
1.1K0
发布2020-11-23 11:04:45
举报
文章被收录于专栏:PostgreSQL研究与原理解析

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

IO Alignment Considerations

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

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

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

Ø 大页:需要内核支持配置CONFIG_HUBETLB_PAGE和CONFIG_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架构下至少有两种大页大小:2M和1G。如果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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过Linux设备映射器使用持久内存设备
    • IO Alignment Considerations
      • Verifying IO Alignment
        • 原文
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档