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

简介: 带你读《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社区回馈了开源补丁,增强了稳定性,修正了代码段地址映射问题。



相关文章
|
7月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
790 44
|
7月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
683 1
|
8月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
248 4
|
8月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
1548 1
|
9月前
|
人工智能 Java
Java多任务编排技术
JDK 5引入Future接口实现异步任务处理,但获取结果不够灵活。Java 8新增CompletableFuture,实现异步任务编排,支持流式处理、多任务组合及异常处理,提升执行效率与代码可读性,简化并发编程复杂度。
206 0
|
7月前
|
Ubuntu Java 物联网
Java原生结合MQTTX,完成心跳对话
简介:本文带你用Java结合MQTT协议与EMQX服务器,在Ubuntu上实现两个程序的“隔空传话”。通过搭建消息代理、编写发送/接收代码,让Java应用实现实时通信,附完整源码与调试技巧,轻松掌握物联网通信核心技能。✨
428 2
|
8月前
|
Java 测试技术 API
2025 年 Java 开发者必知的最新技术实操指南全览
本指南涵盖Java 21+核心实操,详解虚拟线程、Spring Boot 3.3+GraalVM、Jakarta EE 10+MicroProfile 6微服务开发,并提供现代Java开发最佳实践,助力开发者高效构建高性能应用。
1126 5
|
8月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
392 3
|
7月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
597 0
|
9月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
191 2