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

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 带你读《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 8迁移Anolis OS 8
Anolis OS 8在做出差异性开发同时,在生态上和依赖管理上保持跟CentOS 8.x兼容,本文为您介绍如何通过AOMS迁移工具实现CentOS 8.x到Anolis OS 8的迁移。
目录
打赏
0
19
20
41
309
分享
相关文章
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
90 0
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
733 166
Headless Chrome 优化:减少内存占用与提速技巧
在数据驱动的时代,爬虫技术至关重要。本文聚焦 Headless Chrome 优化方案,解决传统爬虫内存占用高、效率低等问题。通过无界面模式、代理 IP等配置,显著降低资源消耗并提升速度。实际案例中,该方案用于采集汽车点评数据,性能提升明显:内存占用降低 30%-50%,页面加载提速 40%-60%。结合技术架构图与演化树,全面解析爬虫技术演进,助力高效数据采集。
Headless Chrome 优化:减少内存占用与提速技巧
Java内存管理深度剖析与优化策略####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,重点分析了堆内存的分配策略、垃圾回收算法以及如何通过调优提升应用性能。通过案例驱动的方式,揭示了常见内存泄漏的根源与解决策略,旨在为开发者提供实用的内存管理技巧,确保应用程序既高效又稳定地运行。 ####
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
|
2月前
|
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
64 3
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
121 31
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
422 7
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
134 5
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
127 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等