• 内存网格关键技术 不要轻易放弃。学习成长的路上,我们长路漫漫,只因学无止境。


     内存网格的出现次要自创了传统的网格盘算技巧和集群内存同享技巧。本文从静态函数截获,缓存数据布局与办理和异步缓存数据写入三方面讨论了内存网格零碎的要害技巧。   内存网格;静态函数截获;异步缓存数据   一    随着盘算机技巧的生长,CPU和零碎主存的机能得到了极大的进步。但是因为IO设施的生长绝对滞后,磁盘机能逐步成为了影响盘算机全体机能的瓶颈。对具有频仍、随机磁盘0的数据密集型运用,如web办事器和数据库零碎,磁盘访问的伟大提早将重大影响运用法式的机能。为了进步零碎0机能,提出了内存网格的观点,为同享和哄骗互联网中丰盛的内存资源来解决内存密集型运用的机能问题供应了实际支撑。本文联合已有的内存网格实际,对其要害技巧举行了零碎研讨。   二 静态函数截获技巧   (一)内核模块   Linux内核是繁多立体布局(monolithic),也等于说它是一个自力的大法式,所有的内核功效构件均可访问任一个内部

    暮气数据布局和例程。为了便当运用同时又供应了模块化的机制,这等于内核模块。内核模块是能够

    呐喊按照需求静态载入内核和从内核中卸载的代码。内核模块能够

    呐喊不需求重起零碎扩大内核的功效。对Linux内核模块,能够

    呐喊用insmod或rmmod饬令显式载入或卸载,或者由内核在需求时挪用内核守护法式(kerneld)主动载入和卸载。内核模块运转在Linux内核空间,能够

    呐喊便当地运用内核供应的零碎函数和变量。从模块法式链接的方式来看,它其实不克不及自由地运用用户空间里界说的函数库,只能运用内核空间中界说的、资源受到限制的函数。内核在内核标识表中维护了一个模万博体育APP客户,万博体育娱乐城,万博体育在线网投块的链表,每一个标识表对应一个模块,模块加载进内核时正确地对其举行说明,并将模块作为内核的一局部来实行加载进内核的模块具有所有的内核权限。模块能够

    呐喊在零碎启动时加载到零碎中,也能够

    呐喊在零碎运转时加载在不需求时,能够

    呐喊将模块静态卸载,如许就不消每次修正

    休学零碎的设置时都要从头编译内核了。一般来讲,内核模块能够

    呐喊运用于设施驱动、文件零碎驱动法式、网络驱动、可实行文件说明器和零碎挪用等方面。   (二)函数截获   内存网格零碎中哄骗了函数截获(APIHooking)的方式来静态转变零碎函数实行流程。所谓静态转变,等于指在不修正

    休学法式源代码和不笼罩法式在磁盘的存储映像条件下,对法式行为举行修正

    休学。   函数截获(API Hooking)是猎取指定实行代码控制权的基础方式[44,45]。它供应了一种在不修正

    休学法式源代码的条件下,静态转变驾御零碎行为的便捷方式。在众多古代驾御零碎中,运用函数截获方式的间谍软件(Spying Software)大批哄骗了零碎中具有的窗口法式来摆设本身的不凡运用。一般说来,运用函数截获方式具有以下利益   、便于API函数的监控   具备控制API函数挪用的才能长短常有用的。它能够

    呐喊

    呐喊使法式开发者追踪一些产生在API挪用进程中、通常对内部运用“不可见”的零碎行为。这类方式次要用于特定环境下对函数参数的验证和检讨。比方,在某些情形下,监控与内存相干的API挪用能够

    呐喊无效的捕捉内存资源泄漏的问题。   、便于调试与逆向工程   基于函数截获的调试方式一向在调试技巧中占据首要的位置。许多法式开发者运用函数截获方式来确定法式部件的完成和彼此关联。API截获(APlinterception是猎取二进制实行文件信息的首要方式。   3、便于窥视零碎内部

    暮气完成   许多法式开发者心愿对非开源驾御零碎有深档次的理解。函数截获方式是一种无效的探究API内部

    暮气细节的方式。   4、便于扩大函数的功效   为了能够

    呐喊

    呐喊转变或扩大模块功效,通常运用函数截获的方式对法式的正常实行流举行从头定向。比方,许多第三方软件产品有时候没法满足详细的安全要求,因此不得错误其举行一些调整。为理解决这类问题,运用法式开发者能够

    呐喊哄骗函数截获方式对原函数增加一些额外的前置和后置处理进程。这类方式对转变一些已编译后的代码行为极其有用。   对一个需求哄骗函数截获的零碎来讲,通常需求依据函数截获的目的和运用环境来决议详细采纳何种函数截获方式。起首,咱们需求斟酌设计目的是只针对繁多运用举行截获还是需求构建一个零碎级的截获计划。比方,若是只需求监控一个特定运用,那么就不需求对一个零碎级的函数举行截获。   一个截获零碎(Hook 万博体育APP客户,万博体育娱乐城,万博体育在线网投System)通常由至多两个局部组成,即一个截获办事器   CHook Server)和一个截获驱动器(HookDriver)。截获驱动器次要完成实际的截获功效,截获办事器则卖力将截获驱动器在特定时辰注入(inject到目的进程。截获办事器同时办理驱动器而且挑选性的接收来自驱动器的信息。   三 缓存数据布局与办理   (一)模子设计   内存网格零碎扩大了传统的零碎存储档次布局,在主存和磁盘之间增加了内存网格层。内存网格档次要由内存办事节点供应的闲暇内存空间形成,内存客户节点经由过程哄骗这些闲暇内存作为当地磁疵缓存的扩大,从而减速零碎磁盘0的机能。但是对内存办事节点供应的闲暇内存空间,如何无效的对其举行布局和办理就成为了一个要害问题。   在基于互助缓存的改良模子中,内存网格的内存客户节点和供应其办事的内存办事节点比例为n。因此咱们采纳了基数树和LRU链相联合的方式来解决查找和定位的问题,基数树用于解决缓存数据的定位问题而具有于内存客户节点中,LRU链用于对缓存数据的更新和互换具有于内存办事节点中。   在RAM Grid原型零碎的最后设计进程中,为了简化办理进程,咱们划定一个内存客户节点在某一时辰有且尽可能运用一个内存办事节点的办事。为了能够

    呐喊

    呐喊对内存办事节点中的闲暇内存资源举行无效办理,内存网格零碎挑选在内存客户节点中完成了缓存数据布局和办理模块。缓存数据布局和办理模块对缓存数据举行当地办理,办理信息包孕内存客户节点所运用的内存办事节点上数据页帧的形态信息、存储位置等。为了能够

    呐喊

    呐喊达到这些目的,咱们转变了模子中的缓存计划,运用了基于LRU和Hash双链的数据布局和办理方式。   LRU链和Hash链的双链办理布局在驾御零碎设计中由来已久。在开源驾御零碎Linux的晚期版本中,对数据布局的办理与布局就大批的运用了这类经典的双链布局。此中,LRU链次要对数据布局举行更新和互换Hash链次要用于数据布局的快捷查找和定位。经由过程双链布局的办理和布局,当内存客户节点经由过程当地文件零碎举行磁盘0驾御时,则能够

    呐喊哄骗远地内存办事节点的内存来猎取数据,从而减小内存客户节点磁盘开支

    开通,提升零碎机能。   (二)Cache一致性问题   在单处理器(uniprocessor)零碎中,因为处理器与0子零碎看到的内存视图不同而产生了Cache一致性问题。这是因为0子零碎间接读写的是内存区域处理器在写回(write-back)战略下,起首读写的是Cache,惟独当读写的块要被互换时,才将该Cache中的块内容写回到内存。这就产生了处理器看到的内存视图与0子零碎看到的不一样的情形。在多处理器(multiprocessors)零碎中,Cache一致性问题是由对同享数据的缓存激发。在RAM Grid零碎中。因为RAM Grid所扩大的缓存档次位于主存和磁盘之间,处理器其实不会间接举行读写。以是RAM Grid零碎其实不具有Cache一致性问题。   四 异步缓存写入   为了不影响零碎效率,内存网格零碎采纳了异步缓存写入的方式来完成内存客户节点对内存办事节点的数据更新。内存网格零碎运用函数截获方式来修正

    休学磁盘0的实行流程,异步写驾御产生在函数截获进程中,而函数截获进程产生在中心态,以是异步缓存写入不能不挑选在中心态完成。为了使写入进程错误本来的。零碎实行流程造成较大的机能失落,采纳了内核线程的方式来完成写入进程。在内核模块中,咱们设立了一个全局缓存区用以记载内存客户节点磁盘读写函数中产生的“新”缓存数据,而运用一个内核线程来将内存客户节点中的新缓存数据周期性的写入到内存办事节点的虚构块设各中。如许,整个问题演化成了传统驾御零碎中的读者/写者问题。缓存数据区的每一个块中寄存着一个缓存数据布局信息。这个数据布局中包含有设施号、块号、块巨细、缓存数据内容和运用标记位等元信息,这些信息次要用于缓存数据自身的办理和缓存数据在内存办事节点上数据的定位。




    这是万博体育APP客户,万博体育娱乐城,万博体育在线网投 水淼·dedeCMS站群文章更新器的试用版本更新的文章,故有此标记(2018-12-23 09:58:22)

    上一篇:德国图宾根大学巴克教授与达姆施塔特工业大学

    下一篇:没有了