首页 > 系统相关 >PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航

时间:2023-12-02 12:32:38浏览次数:40  
标签:管理器 Database 自研 PieCloudDB 接口 ASanContext 内存 ASanAlloc

内存管理是计算机科学中至关重要的一部分,它涉及到操作系统、硬件和软件应用之间的动态交互。有效的内存管理可以确保系统的稳定性和安全性,提高系统运行效率,帮助我们最大限度地利用有效的内存资源,合理分配和回收内存,预防各类内存错误。

在计算机科学的早期,内存管理是由程序员手动完成的。然而,随着高度数字化的时代的到来,计算机系统变得越来越复杂,内存管理和检测的任务已经超出了人工的范围。为了应对这个挑战并帮助开发者有效地找出和修复内存错误,一系列先进的内存检测工具应运而生。这些工具能够精确地检测各种类型的内存错误,并提供详细的诊断信息,从而为开发者定位和解决问题提供了极大的帮助。比如,Valgrind 和 AddressSanitizer,这两款知名度极高的内存检测工具,深受用户欢迎。然而,这两款工具均存在一定的局限性。为了保持对 PieCloudDB 软件质量的严格控制,PieCloudDB Database 打造了全新的内存管理器 ASanAlloc。



1 现有工具的局限

PieCloudDB 是一款云原生分布式数据库系统。为了检测和纠正内存错误,PieCloudDB 团队尝试利用 Valgrind 这一工具,然而,Valgrind 的使用可能导致应用程序性能的显著下降,有时甚至可能慢10到50倍。此外,Valgrind 无法检测到诸如“堆栈返回后的使用”(Stack use after return)、“未定义行为”(Undefined behavior)、“栈缓冲区溢出”(Stack buffer overflow)以及“全局缓冲区溢出”(Global buffer overflow)等问题,这对开发者来说困扰重重。

AddressSanitizer 作为另一种解决方案,可以有效地发现并处理以上的问题。然而,为了更加高效的操作内存,PieCloudDB 内部有一套完善的内存管理机制。由于其内存管理机制的特殊性,虽然 AddressSanitizer 提供了强大的功能,但在 PieCloudDB 上并不能直接使用。



2 ASanAlloc 实现思路

为了能够在 PieCloudDB 上进行有效的内存检测,我们深入剖析了内存管理机制。通过分析,我们发现需要将每次的内存操作——palloc 和 pfree,映射到 malloc 和 free 上,才能利用 AddressSanitizer 进行有效的内存检测。因此,我们需要创新并实现一个全新的内存管理器,以确保 palloc 和 malloc 之间可以一一对应,从而实现更精准、高效的内存管理和错误检测。



3 ASanAlloc 打造方案

针对上述问题和解决思路,PieCloudDB 打造了全新的内存管理器:ASanAlloc。ASanAlloc 内存管理器具备以下功能:

  • 适配 AddressSanitizer 内存检测工具

ASanAlloc 内存管理器能够完美适配 AddressSanitizer 内存检测工具。通过 ASanAlloc,可以充分利用 AddressSanitizer 的能力来检测和修复内存错误,从而提高 PieCloudDB 的稳定性和安全性。

  • 内存使用量统计

ASanAlloc 内存管理器提供了内存使用量统计功能,可以实时监控和跟踪内存使用情况,为内存管理决策提供有力的数据支持,有助于进一步优化系统性能和资源效率。

  • 内存上下文关系映射

ASanAlloc 内存管理器还提供了内存上下文关系映射功能。这意味着该管理器能够清晰地追踪和记录内存的分配和释放过程,帮助开发者更好地理解内存使用模式,并有效地定位和解决内存相关问题。

ASanAlloc 内存管理器由以下几个模块组成:

  • 内存操作管理模块:负责对外提供内存操作接口
  • 全局内存上下文映射模块:负责管理内存地址和内存上下文的关系
  • 内存块元信息模块:负责记录内存地址对应的元信息

在 PieCloudDB 中使用 ASanAlloc 内存管理器的内存上下文模块架构图如下,更清晰的展示了各模块之间的关系:

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航_内存管理

在 PieCloudDB 使用 ASanAlloc 内存管理器的内存上下文模块时序图如下,详细展示了对外接口细节和接口对应的内部流程。

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航_内存管理_02

相关对外接口细节包括分配内存接口 palloc 和释放内存接口 pfree。接下来我们将详细介绍这两个接口的主要逻辑处理步骤:

3.1 分配内存接口 palloc 

  • 开发者调用 MemoryContext 类提供的 palloc 接口申请分配内存;
  • MemoryContext 类调用 ASanContext 类提供的内存操作接口 alloc;
  • ASanContext 类调用 C 标准库提供的 malloc 系统调用,malloc 系统调用负责分配内存块,并返回内存块对应的地址;
  • ASanContext 类将内存块地址和 MemoryContext 映射关系写入 GlobalMemoryContextTable 中;
  • ASanContext 类将内存块地址和内存块信息映射关系写入 MemoryBlockMetaTable 中;
  • ASanContext 类将内存块地址返回给调用方;

3.2 释放内存接口 pfree

  • 开发者调用 MemoryContext 类提供的 pfree 接口申请释放内存;
  • MemoryContext 类调用 ASanContext 类提供的内存操作接口 free_p;
  • ASanContext 类调用 C 标准库提供的 free 系统调用,free 系统调用根据地址释放对应的内存块;
  • ASanContext 类移除 GlobalMemoryContextTable 中关于该内存块地址的映射关系;
  • ASanContext 类移除 MemoryBlockMetaTable 中关于该内存块地址的映射关系;
  • ASanContext 类的 free_p 接口调用完成,并返回;


4 应用场景及实例

借助 ASanAlloc 内存管理器,我们在 PieCloudDB 中实现了对 AddressSanitizer 工具的内存检测功能的完美适配。这一强大组合可以有效帮助 PieCloudDB 开发者在复杂的数据库环境中识别和避免各类内存错误。

其中最突出的问题之一就是内存访问越界问题,这是一种常见而又严重的内存错误,如果不加以处理,可能会导致数据损坏或者系统崩溃。ASanAlloc 能够有效帮我们定位和解决问题。

下图详细展示了内存访问越界的现象。通过 ASanAlloc 内存管理器的帮助,我们不仅能及时发现这些问题,还可以根据其提供的详细信息,快速定位到问题的源头,并有效进行修正。这极大地提高了我们解决内存错误问题的效率,确保 PieCloudDB 的稳定和高效运行。

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航_内存检测_03

为了确保日常开发迭代的质量,我们还将基于 ASanAlloc 的内存检测功能集成到了PieCloudDB 日常CI(Continuous Integration,持续集成)流水线中。通过自动化的工具和流程,我们可以在代码提交时实时进行内存检测,及时发现并修复潜在的内存问题。这种早期发现、早期解决的机制对于预防内存错误问题带来的影响至关重要。

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航_内存检测_04



5 ASanAlloc:质量与稳定性的保障

内存检测对于构建高质量、高性能和安全的软件是非常重要的。PieCloudDB 打造的这款全新的内存管理器 ASanAlloc,能有效帮助发现各类内存错误问题,同时在 CI 流水线中集成了内存检测功能,保证了日常开发迭代的质量,预防内存错误问题影响系统的稳定性。这种集成内存检测到开发流程中的策略,不仅提高了我们的开发效率,也使得我们能够始终保持对 PieCloudDB 软件质量的严格控制。

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航_开发者_05

标签:管理器,Database,自研,PieCloudDB,接口,ASanContext,内存,ASanAlloc
From: https://blog.51cto.com/u_16396625/8655015

相关文章

  • PieCloudDB Database 再次升级!社区版全新版本发布,免费下载
    10月24日,2023拓数派年度技术论坛在上海圆满落幕。拓数派正式发布大模型数据计算系统「πDataCS」,基于云原生技术重构数据存储和计算,重塑数仓、向量和机器学习等数据计算引擎,实现“一份数据存储,多引擎数据计算”。作为πDataCS首款计算引擎,PieCloudDBDatabase再度升级,推出全新......
  • 【PostgreSQL 数据库线下沙龙(武汉站)】PieCloudDB Database :云原生分布式虚拟数仓的诞
    2023年6月3日,开源软件联盟PostgreSQL中文社区在武汉举办了技术沙龙活动。本次活动主题围绕未来数据库展开讨论和分享。通过探讨未来数据库的概念和特点,为智能化时代的发展提供更多的支持和服务。同时,通过探讨数据库和AI技术的共生共荣,推动数字经济的发展和创新,开创未来数据库的新......
  • 【PostgreSQL 数据库技术峰会(成都站)】云原生虚拟数仓 PieCloudDB Database 的架构和关
    2023年6月17日,中国开源软件推进联盟PostgreSQL分会在成都举办了数据库技术峰会。此次峰会以“新机遇、新态势、新发展”为主题,结合当下信创热潮、人工智能等产业变革背景,探讨PostgreSQL数据库在这些新机遇下的发展前景。峰会邀请众多行业大咖、学术精英、技术专家、技术爱好者......
  • 「拓数派(OpenPie)2022发布会实录 」PieCloudDB Database元数据管理
    10月24日程序员节,拓数派(Openpie)发布了云原生数据库PieCloudDB。PieCloudDB以云计算架构为设计基础,实现云上存算分离,打造了“元数据-计算-存储”分离三层架构。传统MPP数据库的元数据与用户数据是紧密耦合的,元数据与用户数据解耦合是PieCloudDB作为一款云原生数据库的重要特征。......
  • 「拓数派(OpenPie)2022发布会实录 」PieCloudDB Database分布式引擎
    10月24日程序员节,拓数派发布了云原生数据库PieCloudDB社区版与商业版。本文整理自拓数派「OpenPie」2022发布会的演讲,将从PieCloudDBDatabase的计算、存储、事务三个方面来介绍分布式引擎模块。计算首先为大家介绍的方面是计算。PieCloudDB通过重新打造云上的数据库内核,突破......
  • 「拓数派(OpenPie)2022发布会实录 」PieCloudDB Database 新一代云原生存储引擎
    10月24日程序员节,拓数派「OpenPie」发布了云原生数据库PieCloudDBDatabase社区版与企业版。通过重新打造云上的数据库内核,突破了PC时代计算平台的限制,实现云上存算分离。PieCloudDB基于云的基础设施,专为云平台打造。本文整理自拓数派「OpenPie」2022发布会的演讲,将为大家着重介......
  • 「拓数派(OpenPie)2022发布会实录 」PieCloudDB Database优化器
    10月24日程序员节,拓数派(Openpie)发布了云原生数据库PieCloudDB。PieCloudDB以云计算架构为设计基础,实现云上存算分离,打造了“元数据-计算-存储”分离三层架构。在计算层,PieCloudDB设计了高效的查询优化器和执行器,实现了预计算、聚集下推等多种查询优化策略,保证查询的高效运行,减......
  • 「拓数派(OpenPie)2022发布会实录 」PieCloudDB Database智能化云原生平台
    作为一款云原生eMPP数据库,PieCloudDBDatabase的部署和管控也是云原生的。PieCloudDB为用户提供了智能化云原生平台,提供数据洞察、元数据浏览、用户管理、权限管理、SQL执行、ETL管理等功能,可视化管理平台界面使用户得以更方便地在网页端进行管理。本文整理自拓数派「OpenPie」202......
  • PieCloudDB Database 云上商业智能的最佳实践
    「商业智能(BusinessIntelligence,BI)」这个概念最早是Gartner在上个世纪九十年代提出的,它认为从功能上来说,商业智能是一种解决方案,其关键是处理企业来自多个来源的各种数据,提取有用的数据并清理,然后经过抽取(Extraction)、转换(Transformation)和加载(Load),即ETL过程,合并到一个企业级......
  • 『Postgres.Live 技术沙龙回顾』揭秘 PieCloudDB Database eMPP 架构设计
    2月1日,拓数派参与了由开源软件联盟PostgreSQL分会组织的Postgres.Live线上系列沙龙活动。拓数派产品及推广总监吴疆发表主题演讲《PieCloudDB:eMPP云原生数据库》。相关视频回放欢迎访问拓数派B站链接,PPT欢迎前往官网链接获取。本文由演讲内容整理而成。随着计算机技术的发展,”云......