LWN:两组跟memory-tier有关的patch!

[深度解析] 服务器内存(RAM)演进之路(2025):DDR5 vs HBM vs CXL 内存技术与选型指南 2025年服务器内存如何选?本文深度解析主流DDR5 SDRAM,GPU伴侣HBM高带宽内存,以及革命性CXL内存扩展技术的原理、优缺点与适用场景,助你为服务器配置合适的RAM。 阅读详情

关注了就能看到更多这么棒的文章哦~

Two memory-tiering patch sets

By Jonathan Corbet
June 27, 2022
DeepL assisted translation
https://lwn.net/Articles/898766/

很久以前,计算机只有一种类型的内存 memory,所以一个特定系统内的内存是可以互相替换使用的。非统一内存访问(NUMA)系统的出现使情况大大复杂化,因为有些内存的访问速度会比其他内存快,内存管理算法必须适应这一点,否则性能会受到影响。但 NUMA 只是一个开始;如今出现的分层内存系统(tiered-memory system),可能会包括具有不同性能特性的多层内存,这正在给我们增加新的挑战。目前正在审查的几个相关 patch set 有助于说明这里有哪些类型的问题需要我们解决。

NUMA 系统的核心挑战是要确保内存能要能根据后面需要在哪里使用,而决定从哪个 node 上来分配。一个进程如果能主要在本地节点(local node)的内存上运行,就会比使用大量远程内存的进程表现得更好。因此,为某个特定 page 来找到合适的分配来源是一个一次性的任务;一旦这个 page 和它的用户都进入了同一个 NUMA 节点,问题就解决了,剩下的唯一问题就是避免再次将它们分开。

Tiered memory (分层内存)是建立在 NUMA 概念之上的,但有一些区别。可能会有一段内存区域是作为一个没有 CPU 的 NUMA 节点来管理的,因此该内存将不会被视为系统中任何进程的本地内存(local memory)。一般来说,这些无 CPU 的 node 上的内存要比正常的系统 DRAM 慢。例如它可能是一个 size 巨大的 persistent memory。但情况并不一定如此,我们将在下面看到。

由于无 CPU 节点上的内存不是任何进程的本地内存,那么必须有一些其他的标准用来决定何时从那里分配内存。目前采取的方法是使用内核的正常回收机制来将页面从较快的 DRAM 降级到这样的 node 之上;在一个 page 本来会被驱逐(evicted)或推到交换区(pushed to swap)的情况下,可以改为移到较慢的内存上。这样就可以利用这种较慢的内存区域了,并且也同时保持该 page 是可用的,如果它仍然是有被用到的话就有价值了。最终,如果该 page 待在这个慢速的 memory 中一直未被使用,那么就可以 push 到一个更慢的 tier,或完全被 evict 出去。

不过,将 page 降级慢速 tier 不能是一个单向的操作,否则性能会受到影响;毕竟其中一些 page 最终会被频繁访问,如果将它们保留在慢速内存中会降低运行速度。因此,需要有一种机制来促进 page 回到更快的内存中去。在降级后的第一次访问到的时候将 page 直接移回快速内存是一种可能的方法,但这也会导致一些不是经常使用的内存就也会被提级,还有可能会在 tier 之间产生大量的 page 移动动作,这本身就有很大的开销。这里需要一个更好的解决方案。

Hot-page selection

Huang Ying 的 hot-page selection patch set 就是在试图找到更好的解决方案。这里所采取的方法是试图去估计每个 slow-tier page 的访问频率,并把那些最经常被访问的 page 提到更快的一个 tier。不过,由于没有 page 的访问 counter 数据,所以需要某种启发式的方法。具体方法是偶尔扫描一下 slow-tier 内存,将各个 page protection 设置为 PROT_NONE(无访问)。这样做了之后再把当前时间填到相关的 page structure 里面。后续在试图访问该 page 的时候会产生一个 fault,这时可以恢复以前的权限,从而让 fault 了的进程能继续正常运行。但是,内核也可以将当前时间与之前存储的时间戳进行比较;如果这个时间非常短,那么结论就是这个 page 会被频繁访问,应该被提级。

什么是 "足够短" 呢?该系列的第一个 patch 将阈值设置为一秒,这个值据说 "在我们的性能测试中很有效"。该 patch 也指出了这种方法的一些缺点;正确的阈值会是高度依赖于工作场景的,而且提升 tier 的机制在访问模式发生变化的时候响应会比较缓慢。如果一组在慢速内存中放置了一段时间的 page 突然变得很抢手,那么第一次访问仍然会显得很慢,而且这些 page 在被提升 tier 之前必须要再经过一次扫描周期。

为了缓解这最后一个问题,如果系统中有大量的空闲快速内存的话,访问时间阈值将不会被用到。换句话说,只要有可用资源,那么哪怕 page 看起来不常被使用,也会简单地被提升 tier。不过在不满足这种情况的时候,仍然会使用访问时间来检查,这里一秒钟的设置可能并不适合所有的工作场景。Ying 指出,似乎没有办法让用户自己尝试以合理的方式来配置这个值,所以没有提供做这种设置的配置项。

相反,该系列增加了一个配置项来限制每秒执行的 page promote 动作的数量,以 MB/s 带宽值表示。一旦在某个时间段内达到了此速率限制,page promote 这种提级动作将暂时停止,防止过多的 page promote 导致系统不堪重负从而损害其本身的性能。最后一步是动态调整这个 access-time 阈值,使符合 promote 条件的 page 数量与配置的 promotion limit 大致相符。因此,如果有太多的 page 被提级的时候,阈值将变得更严格,使算法能集中在最频繁访问的 page 上。

与 patch set 一起提供的性能测试结果显示新算法有一些明显的性能改进。不过,在回复之前发布的 patch set 时,Johannes Weiner 提出了一个更简单的方法,显然 Meta 也在使用这个方法。它使用了目前一般用来管理 memory eviction 的最小最近使用(LRU)机制,从而实现的效果是是 page 在第二次访问时将被提级。Ying 回答说,LRU 对识别 cold page 很有帮助,但对识别 hot page 则不太有效。Weiner 没有进一步回应。目前来看这组 patch set 的未来还不是非常清晰,但它确实提供了一个解决方案,看起来 mainline kernel 里面应该迟早会需要类似的功能。

Rethinking tier assignment

在支持 tier memory 的早期,将无 CPU 的 NUMA 节点分配到较慢的内存层是一种事实上很有效的启发式方法。但是,正如 Aneesh Kumar K.V 在其 patch set 中指出的,现实世界总是比这更复杂的。一个没有 CPU 的节点可能被填充了较慢的内存,但它也可能持有和正常系统 DRAM 一样快速的内存,甚至比它更快。这方面的例子有很多,比如底层是虚拟机中的 DRAM 的虚拟 node、快速互连(fast interconnect)后面的 CXL 内存,或者由专门设备提供的高带宽内存。将这种内存视为较慢的内存的话会剥夺系统的优势。文中还指出,CPU hot-add event 可能会导致一个没有 CPU 的 node 后续会带有 CPU,并被移到另一个 tier,即使该节点的内存特性没有发生改变。

他建议的解决方案是用更复杂且明确的方案来取代内核简单的 tier 配置。目前的内核并没有如此来确定 "tier";相反,它们把 node 设置一个内部维护的 "降级顺序(demotion order)",也就是根据 node distance 得到的一个函数。这个 order 不容易在用户空间看到,也不能修改。patch set 把 tier 变成了一个相应的的内核对象,并允许创建任意数量的用户可见的 tier,每个 tier 由一个整数 ID 值来识别(和排序)。编号更高的 tier 应该是包含了更快的内存。

default tier 的 ID 是 200(内部命名为 MEMORY_TIER_DRAM),所有有内存的 node 都是以这个 tier 来开始的。那些带有内存的设备的驱动程序可以请求将它们的内存放在不同的层中。另外两个 tier 是为了这个目的而建立的。MEMORY_TIER_HBM_GPU(300)是用于高带宽内存,而 MEMORY_TIER_PMEM(100)用于持久性内存(persistent memory)。如果一个驱动程序知道它的设备有其中某一种类型的内存,它可以将该内存放入适当的 tier。

这组 patch 还在 sysfs 中提供了一组文件(在 patch 的说明和相关文档 patch 中有描述),可以用来查看当前的内存 tier 配置。可以从用户空间来创建新的 tier,并且可以使用 sysfs 接口在 tier 之间移动 node。该 patch set 还让 demotion policy (用于将 page 移动到较慢 tier 的降级策略)变得更加明确以及方便配置。

Weiner 对早期版本的 patch set 的回应中质疑这种无论所有 node 是否包含 CPU 都将它们分配到同一 tier 的做法:

将层级明确声明出来是一个好主意,但是我们能不能保持目前的默认方式,也就是无 CPU 的 node 要比有 CPU 的 node 的 tier 层级低?我很难想象在哪些情况下这个做法是不合理的…… 或者说,就算是有,那些也应该是需要手动调整的非常特殊的场景。

不过,这种行为在当前版本的 patch set 中仍然没有改变。

无论如何,默认的 tier 分配策略是一件很可能会在未来某个时候进行的改动。一旦它被合并了,并且其 sysfs 文件成为内核 API 的一部分,使得 tier 成为显式对象(explicit object)的机制的整体结构可能就很难改变了。不过,这个 patch set 在这方面似乎没有什么争议;经过七次修订,大多数 review 意见都得到了解决。所以,虽然可能还有一两处需要调整的地方,但这项工作似乎已经准备好,可以合并了。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

format,png

tiered_memory_linux tiered_memory_linux 0.引言 该存储库包含A位配置驱动程序和分层内存仿真代码。 1.如何构建和安装 弄干净 fakeroot make-kpkg --initrd --revision = 1.0.custom kernel_image -j12 须藤dpkg -i ../linux-image-4.15.18+_1.0.custom_amd64.deb 2.关于驱动程序代码 3。 立即下载

相关推荐

Unity 调用安卓内部安装apk

一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA...

BDDNH的博客 1238

LWN:针对多层内存系统重新进行NUMA平衡!

关注了就能看到更多这么棒的文章哦~NUMA rebalancing on tiered-memory systemsMay 2, 2022This article was contributed by David VernetDeepL assisted translationhttps://lwn.net/Articles/893024/传统的 NUMA 架构是围绕 n...

Linux News搬运工 1200

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 234

内存管理:分层内存,巨页,EROFS;

关注了就能看到更多这么棒的文章哦~Memory-management: tiered memory, huge pages, and EROFSBy Jonathan CorbetAugust 15, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/984839/内核的内存管理开发者最近一直很繁忙,要想跟上这个核心领域的所有进展可能...

Linux News搬运工 2247

1.安装EMQX服务器

阿里云;EMQX

hfh8130的博客 5311

为Codex添加任务完成提示音:提升开发效率的实用技巧

在自动化脚本开发和模型训练过程中,实时获取任务状态反馈是提升工作效率的关键。通过Hook机制,开发者可以在代码执行的关键节点注入自定义逻辑,实现各种自动化操作。Codex的Hook系统特别适合用于任务完成提醒,其post_execution节点能准确捕获执行结束事件。技术实现上,只需简单配置TOML文件并编写音频播放脚本,就能让系统在任务完成时自动播放提示音。这种声音反馈机制尤其适用于长时间运行的批量任务和模型训练场景,实测可提升30%以上的工作效率。结合动态音效选择和跨平台兼容方案,该技巧还能扩展为桌面通

weixin_26767391的博客 533

LWN:分层内存的主动回收及其他!

关注了就能看到更多这么棒的文章哦~Proactive reclaim for tiered memory and moreBy Jonathan CorbetMay 13, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894849/Linux 中的内存回收(memory reclaim)基本上是采...

Linux News搬运工 592

工业质检终极方案:C#上位机融合 YOLO+Blob分析(一站式尺寸测量+缺陷检测)

本次上位机界面严格遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有功能一目了然。所有控件均为WinForms原生控件,拖拽即可完成布局,无任何自定义控件,开发效率拉满,核心布局永久复用本次实战完成的C#上位机+YOLO+Blob融合质检方案,是工业规则零件全尺寸质检的终极落地方案,完美解决了单一检测方案的所有短板,具备以下不可替代的工业价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1343

Memtis: Efficient Memory Tiering with Dynamic Page Classification and Page Size Determination——论文泛读

针对分层内存,现有方法对冷热页面划分不准确、不能动态调整页面大小。本文提出Memtis,可以动态确定页面位置和页面大小。(1)提出内存访问分析器。使用Intel PEBS(Processor Event-Based Sampling)工具实现,对LLC load misses和store指令进行采样,获取物理地址,统计页访问计数,将其表示在页面访问分布直方图中。(2)动态迁移冷热页面。根据页面访问分布直方图动态调整阈值,区分冷热页面,热页面常驻快速层,有额外空间容纳冷页面。

重新开始写博客 1434

如何用IDEA查看jar包中代码

我们在使用Java进行开放时经常会需要下载些第三方的jar包进行相应的开发。有时候相关jar包的使用文档不足,满足不了我们的特定开发使用要求,这就需要我们查看jar包内的相关代码逻辑,本文将基于IDEA工具介绍如何查看相关jar包的代码逻辑

mystonelxj的博客 2280

Python爬虫实战:如何爬取12306列车信息

本文介绍了如何使用Python编写爬虫,抓取12306列车信息。我们讲解了如何分析12306的列车数据接口,如何发送HTTP请求,解析返回的JSON数据,并将数据保存到本地文件中。我们还讨论了如何绕过反爬虫机制,如使用随机User-Agent和设置请求延时。通过这个实战项目,你应该掌握了如何爬取并解析来自公共API的数据,同时提高了你的爬虫技能。这些技能不仅适用于12306列车信息抓取,也可以广泛应用于其他需要抓取JSON数据的网站。

2201_76125261的博客 1921

LWN:CXL 如何管理以及分层!

关注了就能看到更多这么棒的文章哦~CXL 1: Management and tieringBy Jonathan CorbetMay 13, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894598/Compute Express Link(CXL)是一项新出现的内存技术,显然是 Linux 内...

Linux News搬运工 2523

【软考】高项论文写作常见模板

本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。

奶爸的编程之路,也就一周冷个三天 1686

【Pmem】持久内存介绍及访问模式总结

傲腾Pmem及其可配置的两种访问模式:Memory mode(内存模式) 和 App Direct mode(应用直接访问模式)

qq_45726331的博客 9642

深度学习工具包 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")

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

下一代分层存储方案:CXL SSD

此外,三星还在开发多款CXL方案,比如CXL DRAM (CMM-D)、CXL-PNM (CMM-DC)、内存语义SSD (CMM-H) 以及Smart SSD + CXL接口(I/F)计算(CMM-HC)均为CXL内存扩展和计算解决方案,这些都是三星内存实验室预测的产品。这一特性为降低固态硬盘(SSDs)的成本创造了机会,因为在“近内存”架构下,可以采用成本较低的存储介质,同时依然保证较高的性能水平,通过更好的资源搭配和层级设计,达到性价比最优的存储解决方案。这个跟三星的CMM-H TM类似。

存储随笔 5617

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Paper Read——Tiered Memory Management: Access Latency is the Key!

由于不同层级内存访存性能的差异,现有的分层内存管理系统使用了多种内存迁移技术尝试优化系统的吞吐和时延,但是它们都假定访问默认内存层级(硬件标明的内存访问时延最低的层级)的时延总是优于额外内存层级,因此总是把最热的页面放进默认层级。根据上面计算的每层访问延迟,用平衡访问延迟的原则决定页面迁移方向:如果默认层访问延迟小于备用层,则将热页面从备用层提升至默认层;否则,将热页面从默认层降级到备用层。”的原则迁移页面,将页面转移到访问时延更低的层级中,最终平衡时默认和额外层级的时延基本相同,从而动态地调节系统访问。

bukuishiwoa的博客 1171

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LWN:内存分层下的加权交错分配!

关注了就能看到更多这么棒的文章哦~Weighted interleaving for memory tieringBy Jonathan CorbetOctober 25, 2023ChatGPT translationhttps://lwn.net/Articles/948037/kernel里过去这些年一直都可以控制如何在有多个NUMA node的系统里进行内存分配。最近NUMA node已经...

Linux News搬运工 1041

【VMware ESXi】把硬盘当内存用?VMware 内存分层(Memory Tiering),你值得拥有!

VMware vSphere 8.0 U3 发布了一个非常有意义的功能叫内存分层(Memory Tiering),以利用基于 PCIe 的 NVMe 设备充当第二层(辅助)内存,从而使 ESXi 主机的可用物理内存(RAM)增加。从本质上讲,内存分层就是利用较便宜的 NVMe 设备充当物理内存,以此增加内存的总容量和工作负载的可用量,同时降低总体拥有成本(TCO)。 为什么会需要内存分层?会不...

weixin_40512283的博客 1121

Linux内核配置选项简介

Linux内核配置选项简介 2016年06月02日 16:09:41 没事多学点 阅读数:10730 标签: 内核配置kernel移植menuconfig 更多 个人分类: linux Linux内核配置选项简介   Gentoo Linux Gentoo内核(gentoo-sources)特有的选项 Gentoo Linux support CONFIG_GENTOO_LINUX ...

ysh1042436059的专栏 7488

LWN: Top-tier memory management!

关注了就能看到更多这么棒的文章哦~Top-tier memory managementMay 28, 2021This article was contributed by Marta R...

Linux News搬运工 666

LWN:6.1 合并窗口第二部分!

关注了就能看到更多这么棒的文章哦~The rest of the 6.1 merge windowBy Jonathan CorbetOctober 17, 2022DeepL assisted translationhttps://lwn.net/Articles/910608/Linus Torvalds 于 10 月 16 日发布了 6.1-rc1,并关闭了 6.1 合并窗口;此时,有 11...

Linux News搬运工 563

redis内存限制管理---maxmemory配置详解

         作为内存数据库,为了防止redis占用过多的内存对其他的应用程序造成影响,redis的使用者可以在redis.conf文件中通过设置maxmemory选项对redis所能够使用的最大内存做限制,并通过maxmemory_policy对redis占用内存超过maxmemory之后的行为做定制。这篇文章,我们从redis源码的角度剖析一下redis的最大内存管理策略。       ...

孤独剑 5万+

kubernetes的eviction机制

eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。eviction在openstack的nova组件中也存在。 目前kubernetes中存在两种eviction机制,分别由kube-controller-manager和kubelet实现 1. kube-controller-manager实现的eviction kube-co...

redenval的专栏 9060

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 409

Elasticsearch ingest pipeline 被禁用之后:性能代价、安全治理与数据入库时间的四种替代方案

生产环境为什么禁用 Elasticsearch ingest pipeline?写入路径同步执行的开销、Painless 脚本的安全治理是根因;而 _ingest.timestamp 出不了 pipeline,ES 8/9 也没有原生入库时间字段。本文给出四种替代方案:采集端注入时间戳、bulk 响应后回写、refresh=wait_for 近似、最小 set pipeline 白名单,附选型对比与踩坑清单。

Sayai的专栏 341

大数据工具介绍

Hive作为离线数仓的元数据管理与SQL接口,依托HDFS存储、Spark/MapReduce计算;Spark是统一的分布式计算引擎,承担复杂数据处理;DataX实现异构数据源间离线同步;ClickHouse擅长极速单表分析;Doris则提供实时、多表关联的综合分析能力;Flink作为原生流处理引擎,支持毫秒级实时计算与状态管理。两者共同构建起从离线批处理到实时流处理的完整数据链路。

yyk33324的博客 261
上一篇: LWN:介绍 PyScript!
下一篇: LWN:Linus 的炉边杂谈!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值