HotRing冷热页面识别论文解读

datop:冷热内存识别和跨NUMA访存的高效算法与技术 本文将介绍一种名为datop的算法和技术,它能够高效地识别冷热内存,并实现跨NUMA的访存操作。冷热内存识别是指根据内存对象的访问模式,将内存分为频繁访问的热内存(Hot Memory)和不经常访问的冷内存(Cold Memory)。在上面的示例中,我们首先创建了一个跨NUMA的数据对象,然后在不同的NUMA节点上进行了一系列的读写操作。通过使用datop算法,我们可以准确地识别冷热内存,并优化跨NUMA的访存操作,从而提高程序的性能和效率。 阅读详情

前言

这篇论文的读后感是我作为本科课程期间的一门大作业课程所需要完成的课外实践内容。如果能够对大家有所帮助就好,不过这一篇主要作为个人的小总结。提前告知,还望海涵。

HotRing策略背景

哈希索引是当前阿里公司在KVSes的中使用的最流行的内存结构,特别是当范围查询不需要上层应用程序时,由于原有哈希表的设计,访问此时应该是:

N(总数)=1+L/2  //L是链表长度
L=N/B  //N是总的item数目,B是哈希桶数目

其次,由于同样也要寻找响应items前提下的哈希桶,所以要在最前面+1。所以在已有的的哈希设计下,如何让热点数据长期处于链表头部,那么必然就会将访问复杂度贴近于O(1)。那么就可以想到初步想要解决热点感知的本质——即动态的感知热点并且将热点靠近至指针。

HotRing所要解决的问题

那么想到完善的结构,那么我们就需要结合实际进一步完善HotRing的数据结构:

1、热点的转移。在大数据下,热点的转移是随着时间变化的。访问模式是随着时间变动的。那么我们需要在系统中添加一种跟踪热量的方法。

2、并发访问。在操作系统中,每个热点都被大量的并发访问请求,如何在热点item仍然保持令人满意的性能,这对读写操作都需要有高并发的支持。

3、高效率,即本质上将感知热点靠近头指针。

HotRing设计概览

HotRing是一个环状的链式结构,将一种单链表编程有序环结构在数据结构并不能成为理想的O(1)模型,但是我们只需要将性能访问提升的更多即可。

有序的环哈希索引

无序的环状链要使用额外的哈希表存储已遍历过的item,或者使用双指针增加遍历的范围,若重合就可以进行返回。比如如下:

如果item(a)存在,那么既满足
item(a)=item(x);  //item(x)为当前指针指向的item信息

那么当item不存在时,就不存在。因为我们找不到item(a),那么应该就是:

item(x-1)<item(a)<item(x) || 
item(a)<item(x)<item(x-1) ||
item(x)<item(x-1)<item(a)

在这里插入图片描述

热点漂移识别

热点的漂移识别在于解决识别热点并且在热点移位中及时调整头指针。那么就需要准确性和及时性。准确性在于将头指针指向hot item的比例;而及时性在于多少延迟之后能够将头指针的指向变换成新的热点。

这里HotRing使用的是一种简单的随机移动策略。

随机移动策略

随机策略在于HotRing采用周期性将头指针指向本次查询到的item。假设设置一个周期为3,那么每3次查询到热点时就要进行判断:

  • 如果头指针指向了这个热点:不发生调整
  • 如果头指针没有指向这个热点:将指针指向这个热点

这种策略保留了较少的反应延迟(即设置一个周期来小范围进行热点搜寻),但精度相对较低(小范围搜寻的弊端)。但是这种随机策略能够很直接的将热点和cold item区分出来并且发生调整。当然,这个方案在环中存在多个hot item时表现并不好。

统计样本策略

我们设置一个Total Counter用来对HotRing头指针对哈希桶下的环结构命中次数。而在每个环结构中的item设置一个Counter来代表这个item的命中次数。

统计样本在于,HotRing周期性地进行样本分析,每次分析起始时,Total Counter和Counter均为0,在一定时间后,根据Total Counter和每个item的Counter值决定使用哪个item作为头节点。

公式如下:

这个时候,对于多hot item统计样本策略更加准确,并且能够应用更广泛的场景。

item节点设计

在这里插入图片描述

在HotRing中,我们设置一个如上图所示的节点结构。

比如我们在搜寻item时,我们在item添加了一个tag。此时判断语句变成:

item(a)=(tag(a),key(a))

这种设计在于不采用全部遍历链表所有元素,它可以提前终止遍历。此时平均情况下查找item此时也是达到(n/2)+1,但是头指针的优化使得查找往O(1)方向靠近。

在统计样本时,我们要使用一个Counter来记录该item被命中的次数。此时我们在item中设置一个14bit的Counter,除此之外,由于现代物理机可以使用64位原子比较和交换操作进行更新,我们用一个Counter(15bit)、address(48bit)、Occupied(1bit)和Rehash(1bit)进行构建。

热点继承

热点继承中,我们要将头结点的指针移动到另一个头节点上。随机的指向会大概率指向冷数据。这将导致热点识别的策略频繁触发。进一步导致热点性能下降。

如果头节点发生了更新,但是由于更行到了新的热点,它必然需要有更大可能被读取到。那么此时就直接指向这个热点。当头节点删除时,那么就将头指针移至下一项即可。

并发操作

并发操作要求在于首先应该是一个无锁状态。不然在有锁条件下要走的一个加工流程周期大大增加,不利于系统的性能。

此时,确定了无锁机制下,头指针的移动会使得无锁设计更加复杂:

  • 一方面,头指针移动可能与其他线程并发。因此,我们需要考虑头指针移动和其他修改操作的并发性,防止指针指向无效项。
  • 另一方面,当我们删除或更新一个项目时,我们需要检查头部指针是否指向该项目。如果是这样,我们需要正确而巧妙地移动头指针。

在HotRing,一味的插入的新数据到达时,环中的冲突项数量继续增加,导致每次访问都要遍历更多的项。此时在HotRing提出一种无锁重哈希策略。

在HotRing哈希表的扩容时,哈希槽的增加,环状链表也需要将item分配到新的环中。HotRing使用了访问开销(即检索项的平均内存访问次数)来触发重散列。所以HotRing面临以下三个步骤:

1、初始化:

HotRing创建了一个后端rehash线程。线程通过共享标签的最高位来初始化新的哈希表。这个新的哈希表的大小是旧哈希的两倍。

在计算一个item的哈希值时,值的前k位用作哈希表定位,后t位来作为tag。那么当哈希表扩容2倍,由于扩容后再新表有两个新的头指针,此时需要多占用k+1位哈希值。HotRing根据标签范围划分数据,假设哈希值有n位,那么标记的范围在于:
range=2∗t range=2*t range=2∗t
扩容后,因为根据哈希表和tag的关系,扩容两倍时,tag值应该是缩小成t-1位。(在计算一个item的哈希值时,值的前k位用作哈希表定位,后t位作为tag。k+1就意味着t-1)。

那么扩容后范围为2^(t-1)。此时正好将环状链表一分为二,即[0,range/2)和[range/2,range)。

在这么一个初始化的线程中,我们还会创建一个rehash节点,这包含着两个子rehash item。我们能够看到,item有一个rehash的1bit空间,这个地方我们可以引出0和range/2,后续就分别作为两个新环头结点。具体内容如下:

在这里插入图片描述

2、分裂阶段

rehash线程将两个rehash item放置环中并作为tag范围和遍历的边界。放置完成后便生效。整个过程大部分操作都是通过无锁的CAS完成的,并且开销会相对较低。

3、删除阶段

rehash线程需要确认所有的旧哈希表访问都已经结束,进而先删除旧哈希表,然后清理所有的rehash节点。

当所有访问结束时,重散列线程可以安全地删除旧表,然后重新散列节点。注意,过渡时期只会阻塞重散列线程,而不会阻塞访问线程。

总结

HotRing适应场景在于热点集中,这要求可能要形成一个宣传好的品牌前提,在这时候,HotRing设计特点如下:

1、将热点数据排列在链表最靠前位置,尽量缩短访问路径。

2、设计环状结构,实现头指针变更但不需要改变item变动。

3、实现随机策略和统计样本策略来处理热点数据、热点漂移。

4、无锁的、原子不可拆分的CAS操作

5、巧妙的进行重哈希,而且并没有数据迁移,只是嵌入两个rehash item并进行分裂。

引用

[1]陈继强,陈亮,王胜,朱国云,陈继强,孙媛媛,刘欢,李菲菲,阿里巴巴集团.《HotRing: A Hotspot-Aware In-Memory Key-Value Store》

[2]潇公子.《中国电信正式发布天翼云操作系统 CTyunOS:基于华为欧拉 openEuler 开源系统》(https://www.ithome.com/0/586/242.htm)

[3]人民日报客户端.《最新!华为发布openEuler欧拉操作系统,欧拉系统是什么?》(https://cbgc.scol.com.cn/news/2120006)

[4] zhisheng.《HotRing——热点感知的哈希冲突解决方案》(https://cloud.tencent.com/developer/user/1130324)

技术文档的语言表达:简洁、准确与易懂的平衡艺术 技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。 阅读详情

相关推荐

【点云语义分割】Ubuntu20.04下RangeNet++环境配置与实战指南

本文详细介绍了在Ubuntu20.04系统下配置和运行RangeNet++点云语义分割模型的完整实战指南。内容涵盖从Cuda、cudnn到TensorRT的深度学习环境搭建,RangeNet++源码编译的详细步骤与常见问题解决,以及如何运行首个分割Demo并可视化结果。最后,还探讨了处理自定义点云数据格式和进行性能调优的进阶技巧,旨在帮助开发者和研究者快速部署并应用这一先进的点云语义分割技术。

rnn9storyteller的博客 516

深度 | HotRing: 阿里缓存系统Tair的自感知热点数据子组件

写在前面:本文参考阿里发表的关于HotRing的英文论文,论文地址:https://www.usenix.org/system/files/fast20-chen_jiqiang.pdf...

技术原始积累 3201

SAP(ERP)工艺路线(Routing)业务视角解析

工艺路线(Routing)也是PP模块,即生产制造模块中最重要核心主数据之一,也是ERP(SAP)顾问,必需从业务与系统深入掌握的重要主数据,它也是整个生产计划与生产流程的重要基础。因为执行步骤只是操作层面的认知,业务顾问需要从业务本质上去理解它,要真正从业务视角理解工艺路线的业务价值,而不仅仅是操作层面的认知。因此将工艺路线理解为“有以上业务本质的理解,然后进到SAP系统中,就容易理解工艺路线(Routing)的每一组成部分结构与功能了,本质就是理解制造企业如何将设计意图转化为物理现实的编码规则。

m0_45197968的博客 1502

HotRing——热点感知的哈希冲突解决方案

本文作者:Jiekun,授权转发 原文链接:https://jiekun.dev/posts/hotring/在使用链表法解决哈希冲突时,由于多数场景下,热点数据异常集中,链表中多个ite...

http://www.54tianzhisheng.cn/ 727

CTF实战:手把手教你用Python破解转轮机加密(附完整脚本)

本文详细介绍了如何使用Python逆向破解转轮机加密,特别针对CTF比赛中的Crypto类题目。通过解析转轮机加密原理、实战Python脚本编写及调试技巧,帮助参赛者快速掌握破解方法,提升在攻防世界等CTF比赛中的解题效率。

silver的专栏 1116

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

hash热点转移-HotRing的简单Java实现

但发现active、rehash、occupied都占用1bit,total counter占用15bit,counter占用14bit,加起来刚好32bit,既然原来的方式无法实现,那就新增一个int来存储,int刚好32bit,占用也是降到了最低,而第一个active就占用int的第一个bit,rehash第二个,occupied第3个,total counter占用3-18个,counter占用19-32个。因此,我们得出结论,由于HotRing具有热点感知设计,因此它具有更好的性能和可伸缩性。

weixin_46767635的博客 308

模拟IC设计避坑:手把手教你用Cadence仿真恒定跨导轨到轨运放(附完整工艺库文件)

本文详细解析了使用Cadence仿真恒定跨导轨到轨运放的全流程,涵盖电路原理、工艺库配置、尺寸设计及仿真分析。通过1:3电流镜补偿技术实现跨导稳定,提供CSMC 0.25um工艺下的实战案例,帮助工程师规避设计陷阱,提升模拟IC设计效率。

weixin_30952535的博客 494

【Linux 内核知识梳理 6】Linux 中的冷热页面

在CPU 访问内存时,因于这个操作比较慢,为了加快速度, 根据本地性原则,CPU在访问主内存时的时候会把附近的一块数据都加载到CPU 的Cache 里,之后读这与这块数据都是在Cache 里做。 Linux 本来有伙伴系统分配内存页,为了加快单个内存页的分配, Linux 在每个 inode 里 为每个CPU 分配了一个per_cpu_pageset (暂且叫页缓存吧)。 每个 页缓存包含一个冷页缓存 和 一个热页缓存。 如果申请完一个内存页就立即用来写数据,用热页缓存。 如果申请完一个内存页,暂时用不

|~~~热爱生活、努力学习的小伙汁~~~| 705

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 870

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

Tair黑魔法之HotRing

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 引言 最近闲来无事,机缘巧合下在FAST’20 Research Track(USENIX Conference on File and Storage Techniques (FAST),CCF A类会议,存储领域顶会)中看到了熟悉的名字:欢神,宗岱大佬,飞刀大神。还能说什么呢,YYDS!! 这篇paper的名称是《HotRing: A Ho

李兆龙的博客 748

3D LUT Color Conversion之总体架构设计之三

摘要:本文提出了一种基于三维坐标一维化寻址的四面体网格编码方法。通过定义全局网格坐标P(R,G,B)=R+9G+81B和局部增量(ξ,η,ζ)∈{0,1},推导出偏移量Δ(ξ,η,ζ)=ξ+9η+81ζ的平移不变性质。该方法将6种坐标排序情况(Case)对应的固定偏移量三元组预先存储,其中V0和V3的偏移量恒定为0和91。硬件实现时只需根据Case选择对应常量组,无需实时计算坐标,显著提高了处理效率。该方案利用线性寻址公式的特性,确保相同局部结构在不同位置具有一致的偏移模式。(149字)

大熊 48

冷热数据浅浅见

冷热数据浅浅见一、前言二、冷热数据的标准(判断)三、判断冷热数据的算法3.1 基于数据结构特点的判断算法3.1.1 传统的方法3.1.2 改进的方法3.2 基于统计学上的判断算法3.3 基于机器学习的判断算法四、总结五、参考 一、前言 这个星期看了关于目前数据存储中关于冷热数据的一些相关内容。 所谓冷数据,简单来说就是在一段时间内访问的比较少,接下来的一段时间访问的概率也不是很大。相反的是,热数据,就是在一段时间内访问的较多的数据,它们在接下来的时间内访问的概率也会非常大。 在互联网中,很多业务对数据的访

xiaopan的博客 7075

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

性能提升2.58倍!阿里最快KV存储引擎揭秘

简介:阿里云智能数据库Tair团队主要负责自研分布式键值存储(KVS)系统,几乎涵盖了淘宝、天猫、阿里妈妈、菜鸟、钉钉、优酷、高德等阿里巴巴所有核心业务。十多年来,始终如一为阿里业务提供着高可靠、高性能、低成本的数据存储与访问服务。 01 概 述 近日,Tair团队的一篇论文——HotRing: A Hotspot-Aware In-Memory Key-Value Store 被FAST'...

阿里云开发者 4531

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

论文阅读 A Hotspot-Aware In-Memory Key-Value Store

A Hotspot-Aware In-Memory Key-Value Store 一些需要了解的知识点 1.rehash 2.无锁结构 3.RCU(Read-Copy Update)是数据同步的一种方式,适用于需要频繁的读取数据 4.CAS(Compare-and-Swap),即比较并替换 5.YCSB*,全称为*“Yahoo! Cloud Serving Benchmark,测试工具 Introduction 热点问题(即在高度倾斜的工作负载中频繁访问的一小部分项目)是现实场景中的常见问题 1、背景

qq_20532141的博客 442

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HotRing论文阅读笔记

一、主要思想 Rating这篇论文主要引入了缓存中热点数据的高效查找。对于一般的系统而言,热点数据一般都会放在Redis等缓存中间件中。但是当热门数据中存在着一些更热门的数据,即缓存的这些热门数据中,有一些数据的访问量大,其他的少一点。面临严重的数据访问倾斜时,如何提高热点的访问效率呢? Rating提出了"热环"的概念。即将原始的哈希表使用拉链法来解决冲突的方式改为将链表构造成一个循环链表。同时设置一个head指针指向当前环上的最热门数据。 这样更改结构后,就会容易造成查找某个元素,如果查找不到会形成无限

sinat_38705282的博客 635

HotRing: A Hotspot-Aware In-Memory Key-Value Store 阅读报告

一、主要内容 概要 ​ 作者认为内存中键值存储(In-memory key-value stores)的热点问题被忽视了,并提出了一种名为HotRing的热点可感知的KV数据结构,它具有以下的特性: 基于有序环哈希索引结构,通过让头节点更靠近热点数据来提高热点数据的访问速度 提供轻量、运行时的热点转移检测策略 支持并发且无锁 1介绍 ​ 互联网公司在实际生产环境中广泛应用内存中键值存储来提高数据存储的性能。学者们研究了不同场景下的热点问题,并且在一些场景中提出了有效的解决方案。然而,内存中键值存储场

Focus5679的博客 1347

【论文阅读】HotRing: A Hotspot-Aware In-Memory Key-Value Store

目录introductionbackground&motivation1.哈希索引与热点问题2.挑战与设计原则HotRing 设计1.有序环2.hotspot identification3.并发操作 introduction 互联网公司在实际生产环境中广泛应用内存中键值存储来提高数据存储的性能。学者们研究了不同场景下的热点问题,并且在一些场景中提出了有效的解决方案。然而,内存中键值存储场景下的热点问题被忽略了,但这个问题在互联网时代的变得空前重要。目前很多数据结构实现的KVS都不能感知热点项目,

俺是太上皇 872

linux内核冷热页,Linux中的冷热页机制概述详解

什么是冷热页?在Linux Kernel的物理内存管理的Buddy System中,引入了冷热页的概念。冷页表示该空闲页已经不再高速缓存中了(一般是指L2 Cache),热页表示该空闲页仍然在高速缓存中。冷热页是针对于每CPU的,每个zone中,都会针对于所有的CPU初始化一个冷热页的per-cpu-pageset.为什么要有冷热页?作用有3点:Buddy Allocator在分配order为0的...

weixin_34381648的博客 494

最强缓存!阿里云重磅发布云数据库Redis企业版(Tair)系列及专属主机组服务

2020年3月11日,阿里云数据库Redis正式上线Redis企业版(Tair)系列产品,提供性能增强和混合存储两个系列。性能增强系列提供3倍于社区版的性能,是目前最快的企业级缓存服务,混合存储系列通过引入 SSD存储介质,缓存成本降低70%-90%,满足超大容量低成本缓存需求。同时推出Redis专属主机组服务,提供用户级别资源隔离,通过主机组超卖比设置,数据库综合成本降低50%。 最快缓存,Re...

A1373712651的博客 1102

阿里3篇技术论文入选国际顶级会议FAST2020,全球第一!

2月26日,存储行业顶级国际会议FAST2020(18th USENIX Conference on File and Storage Technologies)在美国圣克拉拉举行,大会公开论文名单显示,阿里巴巴3篇第一作者论文入选,是全球入选数最多的企业。 FAST是由美国高等计算系统协会(USENIX)主办的顶级国际会议,也是中国计算机学会CCF推荐的A类国际学术会议。今年,FAST2020...

优快云云计算 3426

The Tail At Scale & HotRing 论文分享

简介 在分布式系统中会存在耗时过长的请求,或者服务本身也需要进行相关的耗时优化,本期给大家带来的是两篇耗时优化相关的论文,《The Tail At Scale》是Google发布的关于分布式系统中关于在不可靠的系统中打造一个可靠的整体耗时模型的论文,《HotRing》是阿里发布的关于服务本地缓存优化的论文。 The Tail At Scale 论文简介 在下游众多的系统中,由于我们无法预测下游正在发生或者将要发生的事情,有的时候会因为下游服务的一些异样操作而导致耗时上涨,即便这个比例是很低的,但是在大

专注做分享 1416

linux内核冷热页,Linux冷热页机制概念详细介绍

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统是企业和个人今天我们来讲解Linux中的冷热页机制什么是冷热页?在Linux Ker...

weixin_31763817的博客 386

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 339

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 176
上一篇: JavaSE(5)泛型、注解和特性
下一篇: MongoDB安装&基本操作
Xiao艾扶
博客等级 码龄7年 187粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值