点击上方蓝字关注我们

面向非易失性内存的持久索引数据结构研究综述

王永锋, 陈志广

中山大学计算机学院,广东 广州 510006

摘要随着非易失性内存从理论走向实用,现代存储系统的设计与实现将迎来颠覆性变革。针对传统存储设备设计的存储系统并不能充分利用非易失性内存带来的性能红利。为了构建高吞吐、低时延、大规模的存储系统,迫切需要设计与非易失性内存硬件特性相匹配的持久索引数据结构,从而进一步提升性能。从持久索引数据结构出发,分别对B+-Tree和哈希表在非易失性内存上的设计和优化进行分析,比较其优缺点,并展望了该方向的机遇与面临的挑战。

关键词 存储系统 ; 非易失性内存 ; 持久索引数据结构 ; 性能优化

论文引用格式:

王永锋, 陈志广. 面向非易失性内存的持久索引数据结构研究综述[J]. 大数据, 2021, 7(6): 78-88.

WANG Y F, CHEN Z G. A survey of persistent index data structures on non-volatile memory[J]. Big Data Research, 2021, 7(6): 78-88.

1 引言

非易失性内存是一种新兴的存储介质,其具备字节可寻址、内存级别读写时延的特性,这给当前大量的存储系统带来了根本性的变革。非易失性内存正在迅速发展,现有的大部分非易失性内存(如相变内存、STT-RAM等)仍处于研究阶段,但由美光科技有限公司和英特尔联合研制的傲腾持久内存(基于3D XPoint)已经发布,并且投入市场。由此,在存储系统中尽可 能发挥非易失性内存性能优势的需求越发迫切。其中,面向非易失内存研发新型持久索引数据结构是解决该问题的关键。

在存储系统的设计与实现中,持久索引数据结构是核心之一。文件系统中文件路径到索引节点的寻址、大文件中偏移量到指定数据块的寻址、键值存储系统中根据键寻找值的数据结构、数据库中的聚集索引等,都需要持久存储的索引数据结构,且这些持久索引数据结构的实现对系统本身的性能至关重要。但这些持久索引数据结构目前大多面向传统存储设备进行优化,而不能高效利用非易失性内存的硬件特性。将这些持久索引数据结构在非易失性内存上重新设计实现,并面向非易失性内存的硬件特性进行优化,能够大大降低存储系统的时延、提升吞吐量。

近年来,已经有一些工作对非易失性内存上的存储系统进行了深入的探讨和研究。陈游旻等人在大数据环境下分析了基于新型存储硬件进行存储系统构建的挑战和趋势;Liu H K等人对非易失性内存下的内存架构设计、持久内存管理、性能优化和功耗管理、编程框架以及非易失性内存之上的应用进行了全面的综述;Lersch L等人将基于模拟非易失性内存设计的有序索引数据结构进行分析,并在英特尔傲腾持久内存上进行了测试;Hu D K等人则针对面向非易失性内存构建的哈希表进行了测试和分析。另外,邓镇龙等人将非易失内存与MPIIO相结合,大大提升了应用在高性能集群上的读写性能;杨青霖等人提出的高效数据缓存方法显著提升了存储系统的读写性能。这些工作对在非易失性内存上设计存储系统具有重要的指导意义。本文从持久索引数据结构的设计出发,对不同的设计之间的差异进行细粒度的对比。

提高持久索引数据结构的性能是实现低时延、高吞吐的现代存储系统亟须解决的问题。针对大量在非易失性内存上优化持久索引数据结构的工作,笔者对其进行分类、汇总、对比,厘清索引数据结构的发展主线,总结其中的关键挑战,并对其发展趋势进行展望。

2 持久索引数据结构

索引数据结构是一种能够存储键值对映射的数据结构。常用的数组仅能实现高效的查询,无法实现高效的插入操作,而设计良好的索引数据结构对于查询和插入操作,都能达到对数时间复杂度,甚至是常数时间复杂度,这样的性能优势使其在内存系统和外存系统中均得到广泛应用。索引数据结构面向的场景种类繁多,针对不同的场景,索引数据结构有多种不同的实现,本文关注需要持久存储在存储设备上的索引数据结构,这样的索引数据结构被称为持久索引数据结构(以下简称索引数据结构)。

2.1 索引数据结构的分类

在不同的场景中,对索引数据结构中存储的数据有不同的假定。构建在关系型数据库中的索引数据结构往往需要处理大量的范围查询,即查询在某个区间内的所有键值对。为了高效支持范围查询,索引数据结构需要维护数据的有序性,并针对范围查询进行优化。而在一些键值存储系统中,可能仅输入指定的键,要求系统返回对应的值,不需要范围查询,此时底层的索引数据结构就不需要额外的开销来维护数据的有序性,相邻的键值对可以存放在存储设备上的任意位置。因此,根据其内部数据结构对数据有序性的维护情况,可以将索引数据结构分为有序索引数据结构和无序索引数据结构。

有序索引数据结构需要严格维护数据结构中的有序性。对于每一次写入操作,有序索引数据结构都需要根据插入的数据对整体的结构进行修改以保证有序性,因此范围查询的性能最好。哈希表完全不维护数据结构中的有序性,因此一般而言额外开销最小,但无法对范围查询进行优化。另外,在有序索引数据结构中,维护有序性会带来大量开销,因此一些面向写优化的有序索引数据结构会放松一部分对有序性的约束,从而提升写性能。

除了传统索引,新兴的学习索引(learning index)将索引任务变为一个回归问题,能够根据输入数据自适应地调整数据的存放模式。

2.2 面向非易失性内存的索引数据结构关键问题

为了能够让索引数据结构在传统的存储设备(如机械硬盘、固态硬盘)中进行持久存储,并且高效地利用硬件特性,很多研究人员进行了大量的研究工作。随着新型存储设备(如非易失性内存)渐渐成熟,研究人员分析了非易失性内存和传统存储设备的差异,并且就索引数据结构的设计提出了不少新颖的方法。具体地说,在非易失性内存上实现持久索引数据结构,需要解决以下3个问题。

● 如何减少在操作持久索引数据结构时的软件开销?

● 如何针对特定的持久化语义实现崩溃一致性保证?

● 在非易失性内存上如何利用多核架构高效并发处理读写请求?

索引数据结构的软件开销逐渐成为限制性能的关键因素。传统存储设备的持久化时延往往是微秒级甚至毫秒级,而内存的时延最多不过一百多纳秒,因此在传统存储设备上的持久索引数据结构并不需要过多地关注与内存读写相关的软件开销,而是更多地关注如何通过写聚合等方式尽可能减小持久化的开销。但在非易失性内存的背景之下,持久化开销与内存的读写相近,如傲腾内存的写时延为62 ns,而读时延为169~305 ns,过去的一些略微提高软件开销、降低持久化开销的优化手段无法被直接应用在非易失性内存中,软件开销对性能的影响大大增加。同时,缓存未命中、流水线停顿等体系架构层面的性能损失也会对构建在非易失性内存之上的索引数据结构有较大的影响。如为了进一步降低开销,MOD将持久化所需要的内存屏障进一步降低,以提升性能。另外,为了降低开销,还需要尽可能解决读写放大的问题,有工作指出,由于傲腾内存的内部读写粒度为256 byte,小于256 byte的读写均可能带来写放大,这会对索引数据结构的性能有所影响。

同时,需要重新思考崩溃一致性的实现。传统存储设备基于块设备的抽象、操作和读写都以块为单位(更具体地说,机械硬盘的读写粒度为扇区,大小一般是512 byte,固态硬盘的读写粒度为闪存页,大小一般是4 KB),只要相应的块或页被写入存储设备,即完成了持久化。但在非易失性内存中,一般的store指令原子操作粒度仅为8 byte,且该指令会由于CPU的乱序执行而难以按照开发者预想的顺序写入存储。另外,数据会首先写入CPU的L1/L2/L3缓存中,而CPU的缓存并不能保证持久化。因此,为了保证让数据在非易失性内存上持久化存储,需要在store指令后相应地加入内存屏障和刷写缓存行指令(如clflush或clwb),将缓存行从CPU缓存刷到非易失性内存里。由此,非易失性内存上需要新的方法来保证崩溃一致性。

另外,面对海量的读写请求,需要设计适合多核架构的索引数据结构。由于极低的时延以及字节可寻址的特性,与传统存储设备相比,构建在非易失性内存之上的索引数据结构的吞吐量有多个数量级的优势,在多核架构上非易失性内存的优势将更加显著。尽管如此,由于前面提到的两个问题,能够在动态随机存取存储器(dynamic random access memory, DRAM)上使用的并行索引数据结构并不能直接用于非易失性内存上。另外,由于非易失性内存额外引入的刷写缓存行操作,以及傲腾内存在线程数过多时带宽反而会下降,需要对索引数据结构上的并发读写做进一步的优化,才能够充分适应非易失性内存的特性。

针对上述3个问题,目前已有很多研究给出了针对非易失性内存的索引数据结构设计。本文主要分析其中两种常见的索引数据结构(B/B+树(B/B+-Tree)和哈希表),并总结了它们在非易失性内存上的发展。

3 有序索引数据结构在非易失性内存上的实现

有序索引数据结构能够高效地处理范围查询任务,其中的一种实现——B/B+Tree能够显著地减少磁盘I/O的次数,已经被广泛应用到InnoDB等存储引擎中。针对B/B+-Tree在非易失性内存上的实现,笔者总结了下面的工作,并分析了其优劣。其中2011—2018年的工作都是在模拟的非易失内存模拟器上完成的,之后的工作才开始在真实的傲腾内存上实现。

2011年Venkataraman S等人首次提出了针对非易失性内存设计的CDDS B-Tree。他们使用mfence(内存屏障)和clflush(刷写缓存行)的组合指令来保证数据按顺序写入非易失性内存中,在B-Tree的基础上,使用多版本机制实现更新操作,另外通过写时复制实现节点的分裂和合并,从而减少了额外的写入,无须通过写日志保证崩溃一致性。但是使用多版本和写时复制的代价是需要后台线程来进行垃圾回收,这会带来额外的性能开销。

2015年Yang J等人对非易失性内存上的B+-Tree进行了改进,提出了能够进一步降低维护一致性开销的NV-Tree。通过深入分析,他们发现在叶子节点维护顺序存放的键值需要刷写多个缓存行,另外还需要维护B+-Tree的内部节点的崩溃一致性,这些引入了大量开销。为了进一步优化,该文章提出可以让叶子节点存放的键值对乱序,具体的实现是使用日志结构写入。另外,由于内部节点可以重建,不需要额外维护内部节点的崩溃一致性。但由于叶子节点没有维护顺序,这种方法对读操作的性能造成了一定的影响。

2015年Chen S M等人基于参考文献[14]进一步优化了B+-Tree在非易失性内存上的实现,提出了wB+-Tree。如果叶子节点没有维护键值对的顺序,就会影响读操作的性能,因此该文章在叶子节点中使用位图记录槽的分配情况,并进一步增加槽数组(slot array)用于记录键值的顺序,优化读操作。另外针对崩溃一致性的实现,wB+-Tree在插入操作和更新操作中,都先在节点中寻找空的或无用的槽写入并保证持久化,然后通过一次8 byte的原子写入和持久化修改元数据,从而完成操作。这样的实现使用非易失性内存上的8 byte原子写入指令保证崩溃一致性,但节点分裂操作依然使用了传统的重做日志方法,带来了额外的写入。

2016年Oukid I等人结合参考文献[14]提到的分析,在非易失性内存上进一步优化了B+-Tree,提出了FPTree。基于内部节点可以通过叶子节点重建的原理, FPTree将所有内部节点都放在DRAM里,只将叶子节点持久化存放在非易失性内存中,减小维护崩溃一致性的开销。同时FPTree在叶子节点中存放了每个键各1 byte的指纹,用于快速判断指定键是否在该叶子节点中,从而降低叶子节点无序存放键值对读操作的影响。为了进一步降低软件开销,优化并发,FPTree将分配内存的开销分摊到多个节点上,并结合硬件事务内存降低了并发访问的开销。

2018年Arulraj J等人 基于PMwCAS在非易失性内存上实现了能够无锁并发的BzTree。比较并交换(compare and swap,CAS)指令是实现无锁并发算法的关键指令,其能够对单个字节进行原子的比较和交换操作,而PMwCAS将该操作扩展到多个字节且保证非易失性内存上的持久化。通过PMwCAS提供的原子性,开发者可以避免非易失性内存带来的编程细节,使用通用的方法在非易失性内存上实现支持崩溃一致性且无锁并发的BzTree。

2018年Hwang D等人在非易失性内存上基于FAST(failure-atomic shift)&FAIR(failure atomic in-place rebalancing)算法实现了可容忍瞬时不一致的B+-Tree。由于一些不一致的情况可以通过修改读操作来容忍,避免读取错误的内容,作者首先通过FAST算法保证在节点内部维护有序性时,移动键值对产生的不一致是可容忍的,然后FAIR算法能够以类似的保证进一步处理节点分裂或合并的情况。这个方法无须任何日志就能够保证B+-Tree在任何操作中都处于不一致但可容忍的状态,同时由于内部节点也存在于非易失性内存中,基于该方法实现的B+Tree崩溃后能够马上恢复,而无须重建索引。

2020年Chen Y M等人发现非易失性内存上的B+-Tre e有较严重的长尾时延,经过深入分析后,他们认为在非易失性内存中对叶子节点的结构进行改变的操作(排序和节点平衡)以及并发线程之间相互等待访问非易失性内存是造成长尾时延的根本原因。基于这样的分析,他们提出uTree。uTree的内部节点组织与一般B+-Tree相同,存放在内存上,而叶子节点分成内存中的数组层与存放在非易失性内存上的链表层。该设计能让造成长尾时延的操作在内存上完成,而在非易失性内存上可以并行操作链表的个别元素。这样的设计缓解了长尾时延,但也增加了索引数据结构的内存占用。

2020年Liu J H等人在3D XPoint上优化了B+-Tree,提出了LB+Trees。他们充分利用了3D XPoint上内部介质读写粒度为256 byte和持久化粒度为64 byte之间的差异,发现影响性能的是CacheLine的写入,在CacheLine写入数量相同的情况下,CacheLIne内部脏字写入是没有影响的,进而提出可以通过节点内部键值对的移动来减少内部介质读写。同时为了保证崩溃一致性,他们在wB+-Tree的实现上进一步扩展,基于类似的思路,利用8 byte的原子写保证了包括节点分裂和聚合在内的所有操作的崩溃一致性,无须写日志,并且还能够通过分布式头元数据的方式扩大叶子节点的大小(256 byte的倍数)而不牺牲崩溃一致性。

B/B+-Tre e在非易失内存上的实现及优缺点见表1。除了B/B+-Tree之外,在非易失性内存上进行优化的有序索引数据结构还包括基数树(radix tree)以及其变体,如WORT、P-ART、HART、DPTree、ROART等。这些工作从不同方面对上述3个关键问题给出了不同的解决方案。从这些工作可以发现,为了高效地利用非易失性内存的性能,减小软件开销、通过避免日志写入实现崩溃一致性、通过避免锁的使用来实现高效的并发、结合处理器体系架构和非易失性内存的硬件特性来进行优化,已经成为主流的方法。

4 哈希表在非易失性内存上的实现

随着NoSQL存储系统逐渐发展,无须维护数据有序性从而具备更小开销和更简洁实现的哈希表目前在各种存储系统中得到越来越广泛的应用,如MongoDB、HBase、Memcached等。在哈希表的设计中,需要解决的两个核心问题分别是哈希表扩容和哈希冲突。哈希表扩容指的是当哈希表的容量不足以容纳用户需要写入的所有数据时,哈希表需要进行容量扩大,并根据需要将旧的数据重哈希到新的哈希表上。哈希冲突指的是哈希表中的单个桶(bucket)没有空闲位置放置键值对的情况。

现有的针对哈希表的研究可分为两类:动态哈希和静态哈希。在静态哈希中,当哈希表容量需要进行扩大时,一般需要创建一个更大的哈希表,并将旧哈希表中的数据重新插入新的哈希表中,其扩容的开销与哈希表本身包含的数据量成正比。关于这种哈希表在非易失性内存上的实现,目前的研究成果如下。

Zuo P F等人提出的Path-Hashing针对非易失性内存环境下的哈希表,指出以往的哈希表设计会带来大量的额外写,这会极大地影响哈希表在非易失性内存上的性能。因此他们提出了一个基于路径的哈希表。该哈希表通过位置共享技术解决哈希冲突问题,优化了对CPU缓存的使用且不会带来额外的写。为了进一步提高负载因子和读写性能,Path-Hashing还能够使用两个哈希函数构建两条搜索路径,并进行路径压缩,在缓解哈希冲突的同时,减小路径的深度。

Zuo P F等人进一步优化了哈希表的写入操作,提出了Level-Hashing。他们不仅提出了一种写优化的层次哈希结构,通过双哈希函数和冲突后一次键值对的移动来提升哈希表的负载因子,同时还实现了一种原地扩容机制,这让LevelHashing只需要对1/3的内容进行重哈希,将处于底层的内容重新写到顶层的哈希表中,即可完成扩容。另外Level-Hashing还能够以无须日志的方式保证插入、修改、删除、扩容操作的一致性,只有更新操作可能需要写日志。

Chen Z Y等人提出的CLevelHashing对哈希表的并发性能进行了大量改进。一方面,CLevel-Hashing能够在后台异步扩容和重哈希,而不会阻塞操作,从而避免了等待扩容导致的长尾时延;另一方面,过去哈希表一般使用锁来实现并发,他们针对读取、插入、更新、删除操作均基于CAS原语实现了无锁并发算法,从而避免锁竞争,提升哈希表的扩展性。

相对于静态哈希,动态哈希能够根据用户插入的键值对的数量灵活地扩大或缩小哈希表的容量,每次扩容时只需要常数时间复杂度的开销。

Nam M等人在非易失性内存中引入了可扩展哈希CCEH(CacheLineconscious extendible hashing)。基于原始的可扩展哈希设计,他们根据非易失性内存的特性进行了一些改进,包括将桶的大小设置为缓存行的整数倍,以及增加一层段(segment)来减少空间占用。同时他们还提出了一种崩溃恢复算法,使其能够保证在修改CCEH和进行段分裂时无须任何日志即可保证崩溃一致性。

Lu B T等人进一步提出了一种扩展性更好的哈希表Dash。他们认为不仅要优化非易失性内存上的写入,还要尽量减少非易失性内存上的读取操作。因此他们对Dash做了两方面的优化。从哈希表本身的设计上,他们提出基于指纹对键的存在与否进行快速的判断以优化读取速度,同时在哈希冲突的解决上,他们使用哈希桶间自平衡的方法来提高哈希表的负载因子。同时Dash还能够让插入和更新操作均不需要用日志来保证崩溃一致性,仅在段分裂时需要使用重做日志。另外,Dash还使用了优化的并发控制访问,读取不需要锁的参与,写时使用原子变量实现互斥访问。

Zou X M等人提出了HMEH(hybrid memory extendible hashing)。他们在CCEH的基础上,考虑到可扩展哈希的目录层可通过非易失性内存上额外构建的一颗基数树来重建,因此将目录层放到DRAM中,以减少非易失性内存上的读写。另外他们还提出了一种利用8 byte原子写实现的键值交错策略,使HMEH无须任何日志也无须显式地刷写缓存行就能够保证一般操作的崩溃一致性。对于段分裂操作,基于之前设置的基数树,HMEH实现了一种无须任何日志和写时复制的分裂方法。

哈希表在非易失性内存上的实现与优缺点见表2,可以发现,其发展趋势与有序索引数据结构是一致的,在充分利用硬件特性进行优化的同时,无须日志的崩溃一致性保证和无锁算法成为在非易失性内存上高效实现索引数据结构的关键所在。

5 结束语

本文分别对B+树和哈希表在非易失性内存上的设计和实现进行了深入的分析。根据两者的发展发现,在非易失性内存上实现持久索引数据结构所需要解决的3个问题目前已有一致的趋势。为了减小索引数据结构的软件开销,现有研究会放松对数据有序性的维护,减少内存屏障与缓存行的刷写,感知内部存储介质的读写粒度以及尽可能减少额外写,而对于崩溃一致性与适应多核架构,则分别趋近于无须日志和无须加锁的方法。

最后,对在非易失性内存下高效实现索引数据结构的过程中存在的一些挑战进行总结。

一是如何在保留崩溃一致性的同时利用DRAM进一步优化索引数据结构的性能。目前的非易失性内存尽管性能接近DRAM,但是其时延仍然比DRAM高好几倍,且带宽更加受限。由于非易失性内存和DRAM之间的性能差距仍然不可忽略,现有的研究工作已经在尝试使用DRAM来优化索引数据结构的性能,但也有研究表明,在一些场景中,DRAM和非易失性内存混用可能会由于额外的数据迁移造成性能损失,因此如何高效地利用DRAM来优化索引数据结构仍然是一个需要深入研究的问题。

二是如何更进一步地利用非易失性内存的硬件特性对索引数据结构进行优化。非易失性内存与DRAM类似,但又有其独特的性质,之前的研究大多在使用DRAM模拟的非易失性内存上完成,近两年的研究工作大多基于英特尔傲腾持久内存,指出过去的研究中存在的问题,并对傲腾内存的硬件特性进行了一些适配。但一方面英特尔并没有公布傲腾持久内存的内部原理和架构,研究人员只能通过猜测其硬件特性进行优化,另一方面还有更多的新型非易失性内存存储介质未面市,这些存储介质可能具备不一样的特性,在这样的背景下,持久索引数据结构需要具有更灵活的设计才能适应存储介质的发展。

三是如何实现高效的非易失性内存空间分配器。在索引数据结构的设计和实现中,非易失性内存空间的动态分配是一个不可或缺的操作,其作为软件开销的一部分,对索引数据结构的性能有较大影响。同时一个高效的非易失性内存分配器要求避免永久性的内存泄露,并支持高效的并发操作。然而现有的研究中大多仅关注数据结构本身,忽略了这部分重要的软件开销,另外在DRAM中的内存分配器也需要更进一步的改进才能充分利用非易失性内存的特性。

作者简介

王永锋(1998-),男,中山大学计算机学院博士生,主要研究方向为存储系统、分布式系统。

陈志广(1984-),男,博士,中山大学计算机学院副教授,主要研究方向为大数据存储与处理、并行与分布式计算、高性能计算与超级计算机。在并行文件系统、大规模并行I/O优化、大数据分析处理方面取得了关键技术突破。

联系我们:

Tel:010-81055448

010-81055490

010-81055534

E-mail:bdr@bjxintong.com.cn

http://www.infocomm-journal.com/bdr

http://www.j-bigdataresearch.com.cn/

转载、合作:010-81055537

大数据期刊

《大数据(Big Data Research,BDR)》双月刊是由中华人民共和国工业和信息化部主管,人民邮电出版社主办,中国计算机学会大数据专家委员会学术指导,北京信通传媒有限责任公司出版的期刊,已成功入选中国科技核心期刊、中国计算机学会会刊、中国计算机学会推荐中文科技期刊,并被评为2018年、2019年国家哲学社会科学文献中心学术期刊数据库“综合性人文社会科学”学科最受欢迎期刊。

关注《大数据》期刊微信公众号,获取更多内容

面向非易失性内存的持久索引数据结构研究综述相关推荐

  1. 今晚直播 | PostgreSQL基于非易失性内存优化探索

    PostgreSQL基于非易失性内存优化探索-07/22 Intel于2019年首次完成PCM商品化,其3D XPoint傲腾系列持久内存新硬件具有可字节寻址.非易失.大容量.堪比内存的速度特性,这种 ...

  2. 非易失性内存技术及数据库

    非易失性内存技术及数据库 内容 "2013年开始这个项目的研究,当时不确定非易失性内存技术是否可商用.2019年Intel商用了NVM产品,NVM对下一代数据库系统的影响吸引了广大研究者&q ...

  3. 或取代当前非易失性内存技术 Crossbar正式进军中国存储市场

    阻变式存储器(RRAM)技术的领导者Crossbar公司日前宣布正式进军中国市场,并在上海设立新的办事处. 目前,Crossbar RRAM能够在邮票大小的芯片上实现太字节(terabyte)存储,而 ...

  4. Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl

    <持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK> <PMDK介绍> <PMDK(NVM ...

  5. 非易失性内存在阿里生产环境的首次应用:Tair NVM最佳实践总结

    阿里妹导读:本文介绍了非易失性内存在阿里巴巴集团生产环境的首次应用:线上运行的情况:使用NVM遇到的问题和优化的过程:最后,总结性地给出了基于NVM构建缓存服务的设计要点,希望这些实践总结能对大家的工 ...

  6. Linux傲腾DC128G内存设置,Intel发布傲腾DC非易失性内存:3DXpoint、128GB起、服务器专用...

    Intel今日举行了内存存储日活动上,会议上正式发布了3DXpoint黑科技DDR4内存Optane DC Persistent Memory,一看名字就知道不是我们普通人能用上的,单条128GB起步 ...

  7. NVM(NonVolatile Memory)(非易失性内存)

    NVM特性 NonVolatile Memory,非易失存储器,具有非易失.按字节存取.存储密度高.低能耗.读写性能接近DRAM,但读写速度不对称,读远快于写,寿命有限(需要像ssd一样考虑磨损均衡) ...

  8. 非易失性数据库系统存储与恢复方法

    非易失性数据库系统存储与恢复方法 摘要 非易失性内存的出现从根本上改变了数据库管理系统的内存和持久存储的架构.这些新型NVM设备具有堪比DRAM的速度,但是写到NVM设备后这些数据就具备了持久性.因为 ...

  9. 面向非易失内存的MPI-IO接口优化

    点击上方蓝字关注我们 面向非易失内存的MPI-IO接口优化 邓镇龙, 陈志广 中山大学计算机学院,广东 广州 510006 摘要:在高性能计算环境中,MPI应用多个计算节点同时访问底层存储系统文件时, ...

最新文章

  1. OpenGL Julia Fractal(Julia分形)的实例
  2. 倒腾了一天的笔记-centos 部署jar包
  3. 每周一个 Python 模块 | calendar
  4. hibernate.hbm2ddl.auto配置及意义
  5. android listview动态加载网络图片不显示,Android Listview异步动态加载网络图片
  6. MAVEN 的常用命令
  7. 嵌入式Linux USB WIFI驱动的移植
  8. 又烧一辆!蔚来ES8维修时起火烧到只剩底盘 官方回应:已开启调查
  9. c语言基础知识难点,C语言基础的几个难点解析
  10. matlab2c使用c++实现matlab函数系列教程-cumsum函数
  11. 【线性代数】矩阵及其运算
  12. FishC02 讲:用 Python 设计第一个游戏
  13. 对服务器上出现大量的SYN_RCVD状态的TCP连接的问题分析
  14. word制表符怎么设置(word制表符详细教程)
  15. [转载】中移物联网NB模组注册指令生成小工具-M5310/M5310_A
  16. 温莎大学的计算机专业,加拿大留学,温莎大学英语计算机专业了解一下
  17. 基于 ocr 的屏幕文字识别 开源
  18. python 函数式编程包_Python——详解函数式编程与闭包
  19. C语言经典面试笔试题
  20. 怎么关闭vivo系统自检_科技资讯:vivo手机中软件的自启动功能怎么关闭

热门文章

  1. 接口自动化实战设计思路,想法及疑问(一)
  2. 【Python】Pygame模块设计游戏
  3. python小白如何看报错?实用三步法
  4. brython的问题
  5. Yii 2.0 GII 访问404错误
  6. django class类即视图类添加装饰器的几种方法
  7. 针对科技文章的多标签分类
  8. 3、事件响应函数(一)
  9. MySql数据库表类型MYISAM与InnoDB的区别
  10. HTTP - PUT 上传文件/Shell