当前位置: 首页 > news >正文

PostgreSQL数据库动态共享内存管理器——Dynamic shared memory areas

dsm.c提供的功能允许创建后端进程间共享的共享内存段。DSA利用多个DSM段提供共享内存heap;DSA可以利用已经存在的共享内存(DSM段)也可以创建额外的DSM段。和系统heap使用指针不同的是,DSA提供伪指针,可以转换为backend-local指针,但是该伪指针可以在后端进程之间共享,可以用于构建共享数据结构。
每个DSA管理多个DSM段,可以向其中添加新段,不需要时detach它们。每个段包含多个4KB页,一个free page manager(用于跟踪空闲页的连续运行)以及一个页面映射page map(用于跟踪分配给每个页面的对象的来源)。分配超过8KB的空间请求通过通过选择一个段并在其空闲页管理器中查找连续的空闲页来处理。较小的分配请求使用选定大小的对象池来处理。每个池由多个16页(64KB)超级块组成,以与大型对象相同的方式分配。大型对象和新超级块的分配由单个LWLock进行串行化,但从预先存在的超级块分配小型对象时,每个池使用一个LWLock。目前,每个大小类有一个池,因此有一个锁。提高并发性的每核心池和减少由此产生的碎片的策略是未来研究的领域。每个超级块都用一个“span”来管理,它跟踪超级块的空闲列表。自由请求是通过查看页面映射来处理的,以查找分配地址的跨度,这样小对象就可以返回到适当的自由列表中,大对象页面可以直接返回到自由页面映射中。在分配时,用于选择段和超级块的简单启发式方法试图鼓励集中占用的内存,从而增加了整个超级块变为空并返回到空闲页管理器的可能性,而整个段变为空并且返回到操作系统的可能性。Each DSA area manages a set of DSM segments, adding new segments as required and detaching them when they are no longer needed. Each segment contains a number of 4KB pages, a free page manager for tracking consecutive runs of free pages, and a page map for tracking the source of objects allocated on each page. Allocation requests above 8KB are handled by choosing a segment and finding consecutive free pages in its free page manager. Allocation requests for smaller sizes are handled using pools of objects of a selection of sizes. Each pool consists of a number of 16 page (64KB) superblocks allocated in the same way as large objects. Allocation of large objects and new superblocks is serialized by a single LWLock, but allocation of small objects from pre-existing superblocks uses one LWLock per pool. Currently there is one pool, and therefore one lock, per size class. Per-core pools to increase concurrency and strategies for reducing the resulting fragmentation are areas for future research. Each superblock is managed with a ‘span’, which tracks the superblock’s freelist. Free requests are handled by looking in the page map to find which span an address was allocated from, so that small objects can be returned to the appropriate free list, and large object pages can be returned directly to the free page map. When allocating, simple heuristics for selecting segments and superblocks try to encourage occupied memory to be concentrated, increasing the likelihood that whole superblocks can become empty and be returned to the free page manager, and whole segments can become empty and be returned to the operating system.

dsa_create/dsa_create_in_place

dsa_create函数在新的一个DSM段中创建一个新的shared area。dsa_create_in_place函数在已经存在的共享内存空间上创建一个新的shared area。

dsa_area *dsa_create(int tranche_id){dsm_segment *segment = dsm_create(DSA_INITIAL_SEGMENT_SIZE, 0); /* Create the DSM segment that will hold the shared control object and the first segment of usable space. */	dsm_pin_segment(segment); /* All segments backing this area are pinned, so that DSA can explicitly control their lifetime (otherwise a newly created segment belonging to this area might be freed when the only backend that happens to have it mapped in ends, corrupting the area). *//* Create a new DSA area with the control object in this segment. */dsa_area   *area = create_internal(dsm_segment_address(segment), DSA_INITIAL_SEGMENT_SIZE, tranche_id, dsm_segment_handle(segment), segment);/* Clean up when the control segment detaches. */on_dsm_detach(segment, &dsa_on_dsm_detach_release_in_place, PointerGetDatum(dsm_segment_address(segment)));return area;
}
dsa_area *dsa_create_in_place(void *place, size_t size,int tranche_id, dsm_segment *segment){dsa_area   *area = create_internal(place, size, tranche_id, DSM_HANDLE_INVALID, NULL);/* Clean up when the control segment detaches, if a containing DSM segment was provided. */if (segment != NULL)on_dsm_detach(segment, &dsa_on_dsm_detach_release_in_place, PointerGetDatum(place));return area;
}

请添加图片描述

dsa_attach/dsa_attach_in_place

dsa_allocate dsa_free

相关文章:

PostgreSQL数据库动态共享内存管理器——Dynamic shared memory areas

dsm.c提供的功能允许创建后端进程间共享的共享内存段。DSA利用多个DSM段提供共享内存heap;DSA可以利用已经存在的共享内存(DSM段)也可以创建额外的DSM段。和系统heap使用指针不同的是,DSA提供伪指针,可以转换为backend…...

Redission分布式锁详解

前言 ​ 在分布式系统中,当不同进程或线程一起访问共享资源时,会造成资源争抢,如果不加以控制的话,就会引发程序错乱。而分布式锁它采用了一种互斥机制来防止线程或进程间相互干扰,从而保证了数据的一致性。 常见的分…...

063、故障处理之快速恢复数据

数据丢失快速恢复的重要性 目的:尽快修复数据,恢复业务 快速恢复相关技术对比 常用备份恢复技术 数据快速恢复原理 MVCC 是TiDB数据库原生的一项功能,默认使用无需配置,它使用多个历史快照的方式来维护数据在某个时间点对并…...

从零开始学习CTF

前言 CTF简介 中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式 CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式 竞赛模式 解题模式: 在解题模式…...

【stable diffusion】保姆级入门课程05-Stable diffusion(SD)图生图-涂鸦重绘的用法

1.什么是涂鸦重绘 涂鸦重绘又称手涂蒙版。 简单来说,局部重绘手涂蒙版 就是涂鸦局部重绘的结合体,这个功能的出现是为了解决用户不想改变整张图片的情况下,对多个元素进行修改。 功能支持: 1.支持蒙版功能 2.笔刷决定绘制的元素…...

HBase 源码编译部署包

1. 版本 Java 版本: 1.8.0_201 HBase 版本: hbase-2.5.5 2.打包 git clone https://github.com/apache/hbase.git cd hbase git checkout branch-2.5 编译整个工程的 tar 包,编译一次 10 分钟左右 mvn clean package assembly:single -DskipTests ll hbase-assemb…...

备战秋招 | 笔试强训16

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、下列一段 C 代码的输出结果是&#xff08;&#xff09; #include <iostream> class Base { public:int Bar(char x){return (int)(x);}virtual int Bar(int x){return (2 * x);} }; clas…...

01 Excel常用高频快捷键汇总

目录 一、简介二、快捷键介绍2.1 常用基本快捷键1 复制&#xff1a;CtrlC2 粘贴&#xff1a;CtrlV3 剪切&#xff1a;CtrlX4 撤销&#xff1a;CtrlZ5 全选&#xff1a;CtrlA 2.2 常用高级快捷键1 单元格内强制换行&#xff1a;AltEnter2 批量输入相同的内容&#xff1a;CtrlEnt…...

PHP Laravel 路由、中间件、数据库等例子

以下是使用Laravel框架时的一些常见示例&#xff1a; 1. 路由&#xff08;Routes&#xff09;&#xff1a; // 定义基本路由 Route::get(/home, HomeControllerindex); // 带有参数的路由 Route::get(/user/{id}, UserControllershow); // 路由组 Route::middleware([auth])-&…...

Unity小游戏——使被砍中的怪物四处飞散

被武士砍中后&#xff0c;怪物将向四面八方飞散。 动作的不同将导致攻击力度的强弱表现不同&#xff0c;被攻击的各个对象的反应也有很大差异。在格斗游戏中&#xff0c;对对手一顿拳打脚踢后&#xff0c;看到其步履蹒跚的样子&#xff0c;往往可以感受到他的疼痛。相反如果对…...

hive之文件格式与压缩

hive文件格式&#xff1a; 概述&#xff1a; 为Hive表中的数据选择一个合适的文件格式&#xff0c;对提高查询性能的提高是十分有益的。Hive表数据的存储格式&#xff0c;可以选择text file、orc、parquet、sequence file等。 文本文件&#xff1a; 文本文件就是txt文件&…...

云原生容器内的一次pg_repack排错和解决过程

postgresql的pg_repack 这个cronjob一直执行不了。 排错过程: 用命令 kubectl describe job pg-repack-scheduler-manual-wv82r -n xxx没有查看用有用信息想办法进它启动的pod查看&#xff0c;于是在执行pg_repack.sh命令前&#xff0c;先加一个睡眠时间&#xff0c;如下: - …...

Centos Certbot 使用

安装 可选配置&#xff1a;启动EPEL存储库 非必要项 yum install -y epel-release yum clean all yum makecache #启用可选通道 可以不配置 yum -y install yum-utils yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional必要配置…...

VL163的基本信息

VL163是2:4差分通道多路复用/demux开关USB 3.1应用&#xff0c;为交换机信号性能支持高达USB 3.1&#xff0c;并使用QFN-28 3.5x4.5mm绿色封装。 VL163 QFN28 只能处理2Lane数据信号。自己没有CC识别沟通协议&#xff0c;如果要做USB-C Swtich&#xff0c;就要通过别的USB-C协…...

IntelliJ IDEA 2023.2 新版本,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…...

softmax回归

模型 softmax回归是多类分类模型&#xff0c;用于获取每个分类的置信度&#xff0c;置信度计算方式如下 经过全连接层&#xff0c;得到输出O&#xff0c;将O作为softmax的输入 O是输出向量&#xff0c;每个分量表示一个类别&#xff0c;y_hat_i表示i类别的置信度&#xff0…...

.NET 8 Preview 5推出!

作者&#xff1a;Jiachen Jiang 排版&#xff1a;Alan Wang 我们很高兴与您分享 .NET 8 Preview 5 中的所有新功能和改进&#xff01;此版本是 Preview 4 版本的后续版本。在每月发布的版本中&#xff0c;您将看到更多新功能。.NET 6 和 7 用户可以密切关注此版本&#xff0c;而…...

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral)&#xff1a;控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与…...

git冲突“accept theirs”和“accept yours”

Accept Yours 就是直接选取本地的代码&#xff0c;覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的&#xff0c;覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码&#xff0c;右边部分是远程仓库的代码&#xff0c;中间的res…...

Vision Transformer (ViT)

生成式模型与判别式模型 生成式模型,又称概率模型,是指通过学习数据的分布来建立模型P(y|x),然后利用该模型来生成新的数据。生成式模型的典型代表是朴素贝叶斯模型,该模型通过学习数据的分布来建立概率模型,然后利用该模型来生成新的数据。判别式模型,又称非概率模型,…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...