广告
返回顶部
首页 > 资讯 > 数据库 >HugePages 中怎么提升数据库性能
  • 601
分享到

HugePages 中怎么提升数据库性能

2024-04-02 19:04:59 601人浏览 安东尼
摘要

本篇文章给大家分享的是有关HugePages 中怎么提升数据库性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。内存是计算机的重要资源,虽然今

本篇文章给大家分享的是有关HugePages 中怎么提升数据库性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

内存是计算机的重要资源,虽然今天大多数的服务对内存的需求都没有那么高,但是数据库以及 hadoop  全家桶这些服务却是消耗内存的大户,它们在生产环境动辄占用 GB 和 TB 量级的内存来提升计算的速度,linux  操作系统为了更好、更快地管理这些内存并降低开销引入了很多策略,我们今天要介绍的是 HugePages,也就是大页[^1]。

绝大多数的 CPU 架构都支持更大的页面,只是不同操作系统会使用不同的术语,例如:Linux 上的 HugePages、BSD 上的 SuperPages  以及 windows 上的 LargePages,这些不同的术语都代表着类似的大页面功能。

HugePages 中怎么提升数据库性能

图 1 - CPU 架构和更大的页面

我们都知道 Linux 会以页为单位管理内存,而默认的页面大小为 4KB,虽然部分处理器会使用 8KB、16KB 后者 64KB 作为默认的页面大小,不过  4KB 仍然是操作系统的默认页面配置的主流[^2],虽然 64KB 的页面是 4KB 的 16 倍,但是与最小 2MB 的 HugePages 相比,64KB  的页面实在是不够大,更不用说默认的 4KB 了:

HugePages 中怎么提升数据库性能

图 2 - 默认和大页面大小

2MB 一般都是 HugePages 的默认大小,在 arm64 和 x86_64 的架构上甚至支持 1GB 的大页面,是 Linux 默认页面大小的  262,144 倍,我们可以使用如下所示的命令查看当前机器上 HugePages 的相关信息:

$ cat /proc/meminfo | grep Huge AnonHugePages:     71680 kB ShmemHugePages:        0 kB FileHugePages:         0 kB HugePages_Total:       0 HugePages_Free:        0 HugePages_Rsvd:        0 HugePages_Surp:        0 Hugepagesize:       2048 kB Hugetlb:               0 kB

通过上面的输出结果,我们可以看到当前机器上的大页面默认大小为 2MB 并且大页面的数量也为 0,即没有进程在申请或者使用大页。各位读者可以在 Linux  尝试执行上述命令,如果机器上没有做过额外的配置,那么使用上述命令得到的输出与这里也不会有太大的差别。

/proc/sys/vm/nr_hugepages 中存储的数据就是大页面的数量,虽然在默认情况下它的值都是  0,不过我们可以通过更改该文件的内容申请或者释放操作系统中的大页:

$ echo 1 > /proc/sys/vm/nr_hugepages $ cat /proc/meminfo | grep HugePages_ HugePages_Total:       1 HugePages_Free:        1 ...

在 Linux 中,与其他内存的申请和释放方式相同,我们可以在向 mmap 系统调用中传入 MAP_HUGETLB 标记申请操作系统的大页并使用  munmap 释放内存[^3],使用如下所示的代码片段可以在操作系统中申请 2MB 的大页:

size_t s = (2UL * 1024 * 1024);  char *m = mmap(     NULL, s, PROT_READ | PROT_WRITE,     MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB ,     -1, 0 );  munmap(m, s);

虽然 HugePages 的申请方式与默认的内存相差不多,但是它实际上是操作系统单独管理的特殊资源,Linux 会在 /proc/meminfo  中单独展示 HugePages 的相关数据,而容器编排系统 kubernetes 也会认为大页是不同于内存的独立资源,如下所示的 Pod  也需要单独申请大页资源[^4]:

apiVersion: v1 kind: Pod metadata:   name: huge-pages-example spec:   containers:   - name: example     ...     volumeMounts:     - mountPath: /hugepages-2Mi       name: hugepage-2mi     - mountPath: /hugepages-1Gi       name: hugepage-1gi     resources:       limits:         hugepages-2Mi: 100Mi         hugepages-1Gi: 2Gi         memory: 100Mi       requests:         memory: 100Mi   volumes:   - name: hugepage-2mi     emptyDir:       medium: HugePages-2Mi   - name: hugepage-1gi     emptyDir:       medium: HugePages-1Gi

作为 Linux 从 2.6.32 引入的新特性,HugePages 能够提升数据库、Hadoop 全家桶等占用大量内存的服务的性能,该特性对于常见的  WEB 服务以及后端服务没有太多的帮助,反而可能会影响服务的性能,我们在这篇文章中会介绍 HugePages 为什么能够提升数据库等服务的性能:

  • HugePages 可以降低内存页面的管理开销;

  • HugePages 可以定内存,禁止操作系统的内存交换和释放;

管理开销

虽然 HugePages 的开启大都需要开发或者运维工程师的额外配置,但是在应用程序中启用 HugePages  却可以在以下几个方面降低内存页面的管理开销:

  • 更大的内存页能够减少内存中的页表层级,这不仅可以降低页表的内存占用,也能降低从虚拟内存到物理内存转换的性能损耗;

  • 更大的内存页意味着更高的缓存命中率,CPU 有更高的几率可以直接在 TLB(Translation lookaside  buffer)中获取对应的物理地址;

  • 更大的内存页可以减少获取大内存的次数,使用 HugePages 每次可以获取 2MB 的内存,是 4KB 的默认页效率的 512 倍;

因为进程的地址空间都是虚拟的,所以 CPU  和操作系统需要记录页面和进程之间的对应关系,操作系统中的页面越多,我们也就需要花费更多的时间在如下所示的五层页表结构中查找虚拟内存对应的物理内存,我们会根据虚拟地址依次访问页表中的目录(Directory)最终查找到对应的物理内存:

HugePages 中怎么提升数据库性能

图 3 - 默认页的五层页表

如上图所示,如果我们使用 Linux 中默认的 4KB 内存页,那么 CPU 在访问对应的内存时需要分别读取 PGD、PUD、PMD 和 PTE  才能获取物理内存,但是 2MB 的大内存可以减少目录访问的次数:

HugePages 中怎么提升数据库性能

图 4 - 页表与大页

因为 2MB 的内存页占用了 21 位的地址,所以我们也不再需要五层页表中的 PTE  结构,这不仅能够减少翻译虚拟地址时访问页表的次数,还能够降低页表的内存占用。

CPU 总可以通过上述复杂的目录结构找到虚拟页对应的物理页,但是每次翻译虚拟地址时都使用上述结构是非常昂贵的操作,操作系统使用 TLB  作为缓存来解决这个问题,TLB 是内存管理组件(Memory Management Unit)的一个部分,其中缓存的页表项可以帮助我们快速翻译虚拟地址:

HugePages 中怎么提升数据库性能

图 5 - TLB

更大的内存页面意味着更高的缓存命中率,因为 TLB 缓存的容量是一定的,它只能缓存指定数量的页面,在这种情况下,缓存 2MB  的大页能够为系统提高缓存的命中率,从而提高系统的整体性能。

除了较少页表项和提高缓存命中率之外,使用更大的页面还可以提高内存的访问效率,对于相同的 1GB 内存,使用 4KB 的内存页需要系统处理 262,144  次,但是使用 2MB 的大页却只需要 512 次,这可以将系统获取内存所需要的处理次数降低几个数量级。

锁定内存

使用 HugePages 可以锁定内存,禁止操作系统的内存交换和释放。Linux  系统提供了交换分区(Swap)机制,该机制会在内存不足时将一部分内存页从内存拷贝到磁盘上,释放内存页占用的内存空间,而当对应的内存进程访问时又会被交换到内存中,这种机制能够为进程构造一种内存充足的假象,但是也会造成各种问题。

HugePages 中怎么提升数据库性能

图 6 - 交换分区

我们在 为什么 NUMA 会影响程序的延迟 一文中就介绍过 Swap 在开启 NUMA 时可能会影响数据库的性能[^5],系统中偶然发生的 Swap  并不是不可以接受的,但是频繁地读写磁盘会显著地降低操作系统的运行速度。

HugePages 与其他内存页不同,它是由系统工程师预先在操作系统上使用命令分配的,当进程通过 mmap  或者其他系统调用申请大页时,它们得到的都是预先分配的资源。Linux 中的 HugePages 都被锁定在内存中,所以哪怕是在系统内存不足时,它们也不会被  Swap 到磁盘上,这也就能从根源上杜绝了重要内存被频繁换入和换出的可能[^6]。

REHL 6 引入了透明大页(Transparent Huge  Pages、THP),它是一个可以自动创建、管理和使用大页的抽象层,能够为系统管理员和开发者隐藏了大页使用时的复杂性,但是不推荐在数据库以及类似负载中开启。[^7]

以上就是HugePages 中怎么提升数据库性能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: HugePages 中怎么提升数据库性能

本文链接: https://www.lsjlt.com/news/58830.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HugePages 中怎么提升数据库性能
    本篇文章给大家分享的是有关HugePages 中怎么提升数据库性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。内存是计算机的重要资源,虽然今...
    99+
    2022-10-18
  • 怎么提高数据库性能
    这篇文章将为大家详细讲解有关怎么提高数据库性能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。以下是提升数据库性能的6种实用的方式,无需增加更强大的服务器,也无需重写代码或...
    99+
    2022-10-18
  • Instagram中怎么提升PostgreSQL性能
    本篇文章为大家展示了Instagram中怎么提升PostgreSQL性能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 局部索引如果我们经常需要按某个固定的特征...
    99+
    2022-10-18
  • 怎么提升Web性能
    本篇内容介绍了“怎么提升Web性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么web性能如此重要真...
    99+
    2022-10-19
  • 怎么提升PostgreSQL性能
    本篇内容介绍了“怎么提升PostgreSQL性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用Post...
    99+
    2022-10-18
  • 怎么提升css性能
    小编给大家分享一下怎么提升css性能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!提升方法: 1、将样式写在css文件中,在head中引用;2、不使用“@impo...
    99+
    2023-06-15
  • 使用MySQL MVCC 提升数据库性能的技巧
    使用MySQL MVCC 提升数据库性能的技巧随着互联网的发展,数据库成为了系统架构中不可或缺的一部分。MySQL作为最常用的关系型数据库之一,广泛应用于各种网站和应用程序中。为了提高数据库的性能和可扩展性,MySQL引入了MVCC(多版本...
    99+
    2023-10-22
    MySQL mvcc 数据库性能提升
  • 怎么提升JSON.stringify()的性能
    本篇内容介绍了“怎么提升JSON.stringify()的性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • 阿里云MySQL数据库升级提升性能与安全性的有效途径
    随着云计算技术的发展,越来越多的企业开始使用MySQL数据库进行数据存储和管理。然而,随着数据量的增加,MySQL数据库的性能和安全性问题也逐渐凸显出来。阿里云作为全球领先的云服务提供商,其MySQL数据库服务也得到了不断的升级和完善。本文...
    99+
    2023-11-02
    阿里 有效途径 安全性
  • Oracle12c中怎么提升分布式性能
    本篇文章给大家分享的是有关Oracle12c中怎么提升分布式性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle 12c R2最近发...
    99+
    2022-10-18
  • 提升数据库性能的关键:选择Oracle还是MySQL?
    提升数据库性能的关键:选择Oracle还是MySQL?引言:在信息时代,数据库是企业重要的数据管理工具之一。随着大数据时代的到来,数据库的性能成为了企业发展的关键因素。Oracle和MySQL作为两个知名的关系型数据库管理系统,备受企业青睐...
    99+
    2023-10-22
    MySQL Oracle 数据库性能关键词:选择
  • eXtremeDB 4.1发布 嵌入式数据库核心性能提升
    eXtremeDB 4.1发布,这是一款嵌入式数据库,该版本提升了核心性能。eXtremeDB是一个高性能、可嵌入的数据库管理系统,...
    99+
    2023-09-22
    eXtremeDB
  • 怎么提升移动Web性能
    这篇文章主要介绍“怎么提升移动Web性能”,在日常操作中,相信很多人在怎么提升移动Web性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么提升移动Web性能”的疑惑有所帮...
    99+
    2022-10-19
  • React组件性能怎么提升
    这篇文章主要介绍了React组件性能怎么提升的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React组件性能怎么提升文章都会有所收获,下面我们一起来看看吧。react组件的性能优化的核心是减少渲染真实DOM节点...
    99+
    2023-07-05
  • kettle性能及效率怎么提升
    要提升水壶的性能和效率,可以考虑以下几个方面:1. 选择合适的材质:选择具有良好导热性能的材质,如不锈钢或铝合金,可以使水壶快速传热...
    99+
    2023-09-20
    kettle
  • 阿里巴巴云RDS数据库引擎优化顾问如何提升数据库性能
    随着互联网的快速发展,数据库技术的重要性日益凸显。在众多数据库技术中,阿里云RDS数据库引擎因其易于使用、安全稳定、性能优秀等特点,深受广大用户喜爱。但是,随着业务规模的扩大和数据量的增长,数据库性能问题也日益突出。如何提升数据库性能,成为...
    99+
    2023-11-07
    数据库 阿里巴巴 性能
  • 阿里云服务器与数据库分开使用提升数据安全性和性能
    在当今数字化时代,企业的数据管理变得越来越复杂。因此,许多企业开始将阿里云服务器和数据库分开使用,以提高数据安全性和性能。本文将详细解释阿里云服务器与数据库分开使用的原因,以及它能带来的好处。 阿里云服务器与数据库分开使用的原因: 1.数据...
    99+
    2023-10-30
    阿里 安全性 性能
  • 阿里云数据库中银行业务,提升数据处理能力
    阿里云数据库是阿里云推出的一种分布式数据库服务,具有高可用、高并发、高扩展性的特点。近日,阿里云数据库成功中标银行业务,进一步提升了银行的数据处理能力。 详细说明:随着科技的不断发展,数据已经成为了一种重要的资源。银行业作为重要的经济活动之...
    99+
    2023-11-20
    阿里 数据处理 数据库中
  • DB2数据库怎么提高备份操作的性能
    小编给大家分享一下DB2数据库怎么提高备份操作的性能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  提高数据库配置参数UTIL...
    99+
    2022-10-18
  • 怎么提升韩国服务器性能
    提升韩国服务器性能的方法:1、采用虚拟化技术,能充分优化每台韩国服务器的性能,最大限度地延长服务器的正常运行时间,且还可以降低开支和节省空间;2、使用管理工具进行服务器管理,如采用DCIM来提升韩国服务器管理效率,实现规划工作负载分配;3、...
    99+
    2022-10-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作