共享内存在不同系统的应用与优劣详解

共享内存是一种使计算机程序能够同时共享内存资源以实现更高性能和更少冗余数据副本的技术。共享系统内存可以在单处理器系统、并行多处理器或集群微处理器上运行。对于分布式系统会有一些差异,但共享内存也可以其上运行。

共享内存的可扩展性不高,数据一致性也是一个问题。但是在适当的环境中并且运行缓存一致性协议,相对于这些问题,共享内存带来了更多的优势。

共享内存是一类进程间通信(IPC)技术,它改善了计算机组件之间的通信。

Pexels 上的 Valentine Tanasovich 拍摄的照片

什么是共享内存进程?

在最简单的形式中,共享内存是单个服务器上的低级编程过程,使客户端和服务器能够使用主内存交换数据和指令。其性能比使用操作系统数据缓冲区等系统服务要快得多。

例如,客户端需要与服务器交换数据以进行修改和返回。没有共享内存,客户端和服务器都使用操作系统缓冲区来完成修改和交换。

客户端写入缓冲区中的输出文件,服务器将文件写入其工作区。完成修改后,该过程会反转。每发生一次,系统在客户端和服务器之间生成2次读取和2次写入。

使用共享内存,客户端将其进程直接写入RAM并发出信号量值以标记服务器注意。服务器直接在主内存中完成修改,并通过更改信号量值来警告客户端。每次通信只有1次读取和1次写入,读取/写入比使用系统服务快得多。

共享内存和单个微处理器通用流程

  ·服务器使用系统调用来请求共享内存密钥,并记住返回的ID。

  ·服务器启动。

  ·服务器发出另一个系统调用,将共享内存附加到服务器的地址空间。

  ·服务器初始化共享内存。

  ·客户端启动。

  ·客户端请求共享内存。

  ·服务器向客户端发出唯一的内存ID。

  ·客户端将共享内存ID附加到地址空间并使用内存。

  ·完成后,客户端将分离所有共享内存段并退出。

  ·使用两个以上的系统调用,服务器分离并删除共享内存。

多处理器共享内存

这种简化方案适用于单个微处理器,而多个微处理器之间的内存共享更加复杂,尤其是当每个微处理器都有自己的内存缓存时。目前比较流行的方法有统一内存访问(UMA)和非统一内存访问(NUMA)。分布式内存共享也是可能的,尽管使用的是不同的共享技术。

UMA:并行计算环境中的共享内存

在并行计算中,多处理器使用相同的物理内存并且并行地进行访问,尽管处理器也可以具有私有内存缓存。共享内存可加速处理那些时间至关重要的大型应用程序的并行执行。

NUMA:对称多处理器系统(SMU)中的共享内存

NUMA将SMU配置为使用共享内存。SMU是一种集群架构,它将多个处理器紧密地耦合在一个单独的服务器环境中,只需一个操作系统。由于每个处理器使用相同的总线,因此密集型操作会降低性能并增加延迟。

NUMA通过将CPU和内存资源分组为称为NUMA节点的配置来替换单个系统总线。多个高性能节点在集群内高效运行,允许CPU将其分配的节点视为本地共享内存资源。这减轻了总线上的负载,并将其分配给灵活的、高性能内存节点。

分布式系统中的共享内存

分布式共享内存使用不同的技术,但结果相同:独立的计算机共享内存以获得更好的性能和可伸缩性。分布式共享内存使单独的计算机系统能够通过将其从服务器级别抽象为逻辑共享的地址空间来访问彼此的内存。

该体系结构可以分离存储器并在节点和主存储器之间分配部件,或者可以在节点之间分配所有存储器。分布式内存共享使用硬件(网络接口和高速缓存一致性电路)或软件。与单处理器或多处理器共享内存不同,分布式内存共享可以高效扩展,并支持密集处理任务,如大型复杂数据库。

共享内存的挑战

共享内存编程在单CPU或集群CPU中非常简单。所有处理器共享相同的数据视图,并且它们之间的通信非常快,共享内存编程是一个相对简单的事情。

但是,除了主存储器之外,大多数多处理器系统还为其处理器分配单独的高速缓冲存储器。高速缓存存储器处理比使用RAM快得多,但如果同一系统也使用共享存储器,则可能导致冲突和数据降级。在高速缓存存储器体系结构中共享存储器有三个主要问题:访问时间缩短,数据不连贯和错误共享。

访问时间缩短

多个处理器通过同时访问相同的内存位置而导致争用和性能下降。因此,非分布式共享内存系统不能在十个处理器上非常有效地扩展。

数据不连贯

具有内存共享的多个处理器通常具有单独的内存缓存以加速性能。在该系统中,两个或更多个处理器可以具有相同存储器位置的高速缓存副本。两个处理器都在不知道另一个缓存修改的情况下修改数据,这意味着应该相同的数据——即互相耦合——现在是不连贯的,并且当数据被写回主存储器时可能导致损坏。

缓存一致性

高速缓存一致性协议通过同步多个高速缓存中的数据值来管理这些冲突。每当缓存传播修改回共享内存位置时,数据保持一致。高速缓存一致性可保护高性能高速缓存,同时支持内存共享。

错误共享

此内存使用模式会降低性能,并在具有共享内存和单个处理器高速缓存的多处理器系统中发生。缓存通过从指定的内存位置和附近位置读取数据来工作。(高速缓存行的最小大小为64字节。)当处理器访问包含可修改数据或变量的共享块时,会出现问题。一个处理器是否实际修改了该数据并不重要; 读取更改后,其他缓存将重新加载整个块。缓存一致性协议不会启动重新加载,也不会向其授予任何资源,因此传入的进程必须承担开销。这会强制主总线重新连接每次写入共享内存位置,从而降低性能且浪费带宽。

编程是解决方案

“缓存填充”可以在精确的内存位置与其邻居之间插入无意义的字节,因此单个64字节缓存行仅写入确切的数据。高速缓存一致性执行同步,因此不会强制其他高速缓存重新加载其块。

共享内存优势

多个应用程序共享内存以提高处理效率

  ·在程序之间有效地传递数据,以提高通信和效率。

  ·适用于单微处理器系统,多处理器并行或对称系统以及分布式服务器。

  ·通过管理缓存中主内存中的共享数据来避免冗余数据副本。

  ·通过使程序能够访问已在内存中的单个数据副本,最大限度地减少输入/输出(I / O)进程。

  ·对于程序员来说,共享内存的主要优点是不需要为处理器交互和通信编写显式代码。

高速缓存一致性协议可以保护共享内存免受数据不连贯和性能下降的影响。

原文作者:Christine Taylor

Image placeholder
Ncuz
未设置
  16人点赞

没有讨论,发表一下自己的看法吧

推荐文章
一篇文章看懂,存储虚拟化在不同用例中的实践与优势

存储虚拟化是一种对物理存储资源进行抽象的技术,使其看起来像是一个集中的资源。虚拟化掩盖了管理内存、网络、服务器和存储中资源的复杂性。存储虚拟化运行在多个存储设备上,使它们看起来就像一个单一的存储池。这

多进程之间的线程利用XSI IPC共享内存分配互斥量进行同步

···#include#include#include#include#include#include#include#include#include#definehandle_error_en(en

兴业数金云数据库应用与实践

摘要:本文主要介绍兴业数金云数据库设计、优化、及运维实践,如何利用云数据库为企业创建核心价值,如何在云时代面对海量MySQL、Oracle、Informix服务的运维挑战。作者:林春编辑:张晓艺林春,

持续可用与CAP理论 – 一个数据库系统开发者的观点

本文作者为蚂蚁金服OceanBase研究员日照,发表于2015年。持续可用本文主要针对金融数据库,认为金融数据库的持续可用包含两点:一个是强一致性;另外一个是高可用性。数据库系统必须是强一致性的系统,

当Kubernetes成为云操作系统的标准应用,AWS也亮出了“杀手锏”!

作为云计算领域的排头兵,AWS一直是“老大哥”形象,他的一举一动都牵动着无数人的神经。AWS不仅在云计算领域投入时间早、运行时间长、客户多,在无服务器、容器以及现代化应用工具开发方面,也是当之无愧的引

详解数据服务共享发布

引言:随着云计算、大数据、物联网等技术兴起,数据朝着多样性、高体量、高速度方向发展,如何将海量数据安全、稳定、高效地数据共享出去成为各企业关注的重点。本次微课堂通过普元在数据服务共享平台研发过程中的实

windows利器使用与配置

1概述这篇文章主要讲述了一些windows下的"利器"级别工具的使用以及配置.2ListaryListary是一款强大的搜索工具,可以快速搜索过滤各种文件.下载地址.2.1基础配置右键进入配置选项,建

002.07 MineSweeper - PsSimleGUI 的应用

建檔日期:2019/12/07 更新日期:None 语言:Python3.7.2,PySimpleGUI4.6.0 系统:Win10Ver.10.0.17763主题:002.07MineSweeper

002.06 Klondike Solitaire - PsSimleGUI 的应用

建檔日期:2019/12/04 更新日期:None 语言:Python3.7.2,PySimpleGUI4.6.0 系统:Win10Ver.10.0.17763主题:002.06KlondikeSol

从零开始入门 K8s | K8s 的应用编排与管理

作者|张振阿里云高级技术专家一、资源元信息1.Kubernetes资源对象我们知道,Kubernetes的资源对象组成:主要包括了Spec、Status两部分。其中Spec部分用来描述期望的状态,St

中兴陈河堆:PostgreSQL在5G网管中的应用

2019年是中国5G试商用元年,各大电信运营商正在进行紧张的5G实验局测试。5G网络基于SDN/NFV虚拟化技术进行构建,组网架构非常复杂,由无线接入网、承载网、核心网等部分组成,包含了大量的网元设备

平安科技数据库总经理汪洋:开源数据库在平安的应用实践

本文转自| 平安科技数据库产品团队2019年5月9日,平安科技数据库产品及存储产品部总经理在第十届数据库技术大会DTCC上分享了《开源数据库在平安的应用实践》,本文根据演讲内容整理,围绕以下几个方面进

干货 | 每天十亿级数据更新,秒出查询结果,ClickHouse在携程酒店的应用

本文转自 |携程技术中心 作者 |蔡岳毅作者简介蔡岳毅,携程酒店大数据高级研发经理,负责酒店数据智能平台研发,大数据技术创新工作。喜欢探索研究大数据的开源技术框架。一、背景1)携程酒店每天有上千表,累

滴滴大数据在汽车金融风控场景中的应用

桔妹导读:滴滴独有的出行场景大数据在金融领域有着非常广泛的应用前景,未来可与银行,保险,支付和理财等机构深入合作,帮助传统金融机构提升资源配置效率,降低获客和风险管理成本。出行场景大数据在交易欺诈识别

《零知识证明在区块链上的应用》

2019年11月26日,同济创业谷与PPIOCodeTalks联合举办了《创新X-区块链与创新创业》区块链技术分享会。在本次分享会中,我们有幸邀请到了四位重量级嘉宾来做主题分享。在本期文章中,我们先向

GoldenDB ,一个已经全面支撑银行核心系统的国产数据库

摘要:沿用、并存还是替代,一直是银行核心系统数据库转型重点思考的问题。四大行目前主要采用的是沿用与并存的数据库产品战略,在确保稳定的大前提下对新兴数据库技术进行探索研究和实践。相对而言,股份制银行在这

慌了,居然被问到怎么做高并发系统的限流

来源:uee.me/cDuRD在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。本文结合作者的一些经验介绍限流的相关概念、算法和常规的实现方式。缓存缓存比较好理解,在大型高并发系统中,如果没

分片技术如何解决区块链系统的可伸缩性问题?

区块链技术的应用可能将改变组织存储数据和执行分布式事务的方式。即使在公共网络上,区块链也可以保证所有参与者都以安全、可靠和可验证的方式访问记录。但是区块链有一个非常明显的限制:可伸缩性。随着交易数量的

全球“黑客大赛”冠军霸气讲述:我是如何让50个文件一起骗过AI安防系统的?

大数据文摘出品来源:medium编译:邢畅、张睿毅、钱天培你有没有想过当黑客呢?破解手机密码,黑入公司系统,甚至…控制全球电脑。打住打住!违法犯罪的念头显然不能有。再退一步讲,咱也不一定有这本事。尤其

从300万行到50万行代码,遗留系统的微服务改造

在传统企业甚至互联网企业中往往存在大量的遗留系统,这些遗留系统大多都能够正常工作,有的可能还运行着关键业务或者持有核心数据。但是,大部分遗留系统通常经常存在技术陈旧、代码复杂、难以修改等特点。笔者曾经

Oracle数据库不同损坏级别的恢复详解

墨墨导读:在DBA的日常工作中不可避免存在着数据库的损坏,本文将主要介绍Oracle数据库遇到不同损坏级别下的应该采用的恢复方法,供读者在遇到此类情景时,能的找到适合自己的恢复方法,提高工作效率。数据

详解layui模块化与非模块化的不同引用方式

layui模块化与非模块化的不同引用方式:1、模块化与非模块化的区别layui中有许多不同的内置模块,如弹出层、日期与时间选择器、分页等不同模块。模块化:使用时加载相应的模块。非模块化:一次性加载所有

打造“数字化基石”,深信服在不断开疆沃土!

2019年深信服创新大会,已圆满结束,但也是一个全新的开始!深信服将以数字化转型为契机,打造更敏捷、更开放、更智能的新IT基础架构能力。为了具备这样的能力,深信服一直在研发和市场方面做大量投入。关于这

利用 samba 实现 Ubuntu18.04 与 Windows10 的文件共享

在Ubuntu18.04上安装samba服务 打开终端,使用下面指令安装samba服务。 $sudoaptinstallsamba $sudoaptinstallsmbclient 在Ubuntu1

Vagrant 开启 smb 文件共享

所需软件以及版本 vagrant_2.2.4_x86_64.msi vagrant-centos-7.2.box VirtualBox-6.0.8-130520-Win.exe php7.2.19 s