带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化

5.3.3 数据库/JAVA等高性能场景中的内存优化


背景概述


在处理器内存缓存层级结构中,iTLB miss性能指标对访存优化至关重要,并且在ARM平台上优化效果更为明显。 在数据库/JAVA 等高性能场景中,iTLB miss可以成为影响性能的主要因素,我们通过实验观察到iTLB miss引入的CPU停顿时间最高 占任务运行时间的~13%。优化iTLB miss的手段很多,主要分为两类。一类是优化代码段布局,例如hfsort/gold linker、BOLT、 PGO,缺点是不通用;一类是使用大页映射代码段,例如静态大页 (hugetlbfs)、共享内存大页 (shmem),缺点是调试信息缺失, 需要额外运维等。


通用透明的方案需要基于文件透明大页来实现。社区Linux内核从5.4合入READ_ONLY_THP_FOR_FS特性,支持普通二进制文件的代码段部分映射文件透明大页;并通过写文件时清空文件缓存来规避写文件透明大页的问题。但仍有如下两个缺点。

- 应用程序需要主动通过madvise系统调用来使能代码段映射文件透明大页;

- 共享库、PIC/PIE(位置无关二进制文件)代码段的映射地址通常不能2M对齐,导致不能映射文件透明大页。



技术方案:透明代码大页(Hugetext)

我们给出透明代码大页的方案(Hugetext),提出四点优化和改进。如图5.3.3-1所示。

1. 检测可执行文件加载/映射,分配地址2M对齐,自动使能普通二进制、共享库、PIC/PIE(位置无关二进制文件)的代码段映射文件透明大页;

2. 检测匿名可执行代码 (例如JAVA code cache),提供开关自动映射匿名透明大页;

3. 相比普通透明大页,内核khugepaged线程优先整理可执行文件透明大页,达到加速效果;

4. 对于大小不足2M的代码段,通过补齐映射地址空间,增加文件透明大页的覆盖率。


image.png


应用场景及性能收益


本地测试中,某ARM平台上数据库类业务(例如MySQL),Hugetext可以提升性能5-12%;某ARM平台上JAVA类业务(例如Spring),Hugetext可以提升性能4-13%。

真实业务场景中,例如某ARM平台上MySQL/PostgreSQL业务,Hugetext可以带来6+%的端到端性能提升。

Hugetext特性也在Linux内核社区和Glibc社区回馈了开源补丁,增强了稳定性,修正了代码段地址映射问题。



相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
4月前
|
KVM 虚拟化
KVM的热添加技术之内存
文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。
103 4
KVM的热添加技术之内存
|
24天前
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
48 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
|
5月前
|
监控 Java 测试技术
Java并发编程最佳实践:设计高性能的多线程系统
Java并发编程最佳实践:设计高性能的多线程系统
78 1
|
5月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
137 1
|
1月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
5月前
|
存储 缓存 Java
Java本地高性能缓存实践问题之如何定义Caffeine的缓存
Java本地高性能缓存实践问题之如何定义Caffeine的缓存
|
2月前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
2月前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
23 2
|
2月前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。
|
3月前
|
缓存 前端开发 JavaScript
9大高性能优化经验总结,Java高级岗必备技能,强烈建议收藏
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文介绍了9种性能优化方法,涵盖代码优化、数据库优化、连接池调优、架构层面优化、分布式缓存、异步化、Web前端优化、服务化、硬件升级、搜索引擎和产品逻辑优化。欢迎留言交流。