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



相关文章
|
5月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1289 0
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
Ubuntu Java 物联网
Java原生结合MQTTX,完成心跳对话
简介:本文带你用Java结合MQTT协议与EMQX服务器,在Ubuntu上实现两个程序的“隔空传话”。通过搭建消息代理、编写发送/接收代码,让Java应用实现实时通信,附完整源码与调试技巧,轻松掌握物联网通信核心技能。✨
348 2
|
5月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
719 1
|
10月前
|
自然语言处理 Java 关系型数据库
Java|小数据量场景的模糊搜索体验优化
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
248 0
|
10月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
401 94
|
8月前
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。
|
7月前
|
存储 NoSQL Dubbo
Java主流分布式解决方案多场景设计与实战
本文介绍了Java领域的主流分布式技术,涵盖分布式服务框架(如Dubbo、Spring Cloud)、分布式数据存储(如Redis、MongoDB)、分布式锁(如ZooKeeper、Redisson)及分布式事务(如Seata、Hmily),并通过电商项目案例分析了这些技术在实际开发中的应用,帮助开发者应对高并发与大数据挑战。
364 0

热门文章

最新文章