DRAM的整体架构(简单翻译)
参考文章,进行一个简单的翻译
同时,更多的参考了2008年出版的Memory System的第十章内容。
目前使用DRAM的基本架构为Processor <=> Memory Controller <=> DRAM。
其中DRAM中包含了Channel => Rank => Chip => Bank => Subarray => Mat => Row, Column => Cell,下面介绍这些术语具体含义。
Channel
A channel is the collection of all banks that share a common physical link (command, address, data buses) to the processor.
在上图中,可以看到第一种设计只有一个channel。第二种和第三种设计,一个Memory Controller有两个通道,这两个通道协同运行。这种channel被称为物理通道。
而下图则是逻辑上的通道,使用了多个内存控制器进行实现。
书中、博客中对 ...
docker学习
it’s simply a translation to docker tutorial
container和container image
Simply put, a container is a sandboxed process on your machine that is isolated from all other processes on the host machine. That isolation leverages kernel namespaces and cgroups, features that have been in Linux for a long time.
container是一个可以运行的image的实例。可以对一个container进行创建、开始、停止、移动、删除的操作。
container可以在本地机器,虚拟机,或者部署在云上运行。
container与其他的containers是隔离的,运行着自己的软件、二进制文件和配置。
而image包括了container的文件系统,所有的依赖、配置、脚本、二进制文件等等。
需要使用Docker ...
gem5与nvmain的集成
由于NVMain已经停止维护很久了,直接与新的gem5集成会出现很多错误,只能选取老版本的gem5进行协同编译。老版本的编译会遇到一些问题,在这里罗列出来,以免后面还有人需要使用NVMain但不知道该如何运行它。
工具下载
下载已经经过patch的源代码。在这个仓库中已经准备好了旧版本的gem5,以及nvmain。
推荐使用docker。笔者之前使用Ubuntu22.04遇到了非常多的warning和bug,即使全部解决了集成也没有成功。在此使用的是Ubuntu18.04进行编译。如果读者没有Ubuntu18,或者不想再进行过多的环境配置,使用docker是最简单的方案。
环境构建
构建的docker file如下:
12345FROM ubuntu:18.04WORKDIR /simulatorRUN apt -y updateRUN apt -y upgradeRUN apt -y install python2.7 g++ scons vim swig m4 mercurial python-dev zlib1g-dev libprotobuf-dev protobuf-comp ...
抽象感想
最近经历了一段比较迷茫的时间,和去年的迷茫不太一样。去年的迷茫概括来讲是没有希望和一种深深的无力感,不知道该做什么,不知道能做什么。不过在调整之后能够明确什么是目标了,因此也短暂地享受了状态非常好的几个月。最近又有些迷茫,迷茫的原因我猜测是吸取了上一次的教训思维变得极度理性,把想要的标准定的过高,把一些可以得到但没有那么想要的东西都舍弃了,陷入了不知道该往哪条路上走的迷茫。哈哈,确实有一些极端了,再加上思维上有些怠惰,打游戏总是比看代码开心很多,所以考试结束之后就是原神+塞尔达的模式了,在学科上完全没有些长进。不过也过得算比较愉快,不过这种极端的态度可不会随时间慢慢淡化,总之,截至目前问题依旧存在。
小的时候想做一个清醒但痛苦着的人,大了之后倒是半梦不醒,但是自己蛮会给自己创造痛苦的,于是开始苦于没找到合适的方法展开自救。最近在和初中同学的聊天中似乎找到了一些契机,当然聊天内容本身不涉及什么道理,甚至有些无聊,无非就是谈恋爱+学习+保研之类的话,但是确实看历史总觉得无关痛痒,自己感觉到时间的流淌是一件非常奇妙的事情,即使非常平常的事情发生在他身上,我也觉得能感悟到非常多,也许也是交流都 ...
SSD-OCSSD-ZNS
传统SSD,OCSSD,ZNS SSDSSD有与HDD机械硬盘完全不同的性质。机械硬盘是可以覆盖写的,但SSD在写入数据前必须先擦除。SSD在闪存单元存取数据中有page和block的概念。SSD被划分成多个大小固定block,一个block被划分成了很多page。block是最小擦除单位,写操作只能写到空page中。由于SSD使用的是闪存颗粒,有一定的擦除次数限制。因此,为了能提高SSD的使用寿命,还需要在其中加入均衡磨损的策略。
为了保证上层设备无需任何修改,就能从机械硬盘换成SSD,传统SSD需要做到和机械硬盘一样能够原地修改数据,SSD中的FTL模块正是去实现这个目的的。在FTL模块中,有DRAM来保存逻辑块地址到物理块地址的映射关系,同时还需要添加垃圾回收策略以减少大量的失效数据。由于上层的数据放置习惯和SSD本身的性质并不匹配,这样的设计使传统SSD并不能完全利用自身的所有资源,导致了over-provisioning问题,较大的WAF和尾部延迟。
Open Channel SSD的设计是在传统SSD上的改进。相较于之前SSD与主机的相对隔离,它允许主机与SSD通过一组连续 ...
latex中文模板
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849% ctex_test.tex\documentclass[UTF8]{ctexart}\usepackage{geometry}\geometry{a4paper,left=3cm,right=3cm,top=4cm,bottom=4cm}\usepackage{ctex}\usepackage{algorithm} \usepackage{algpseudocode} \usepackage{amsmath} \usepackage{url}\usepackage[colorlinks=red, linkcolors=red]{hyperref}\usepackage{listings}\usepacka ...
装箱问题
题目描述有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。
要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
$n\leq 30$,$0\leq V\leq 20000$。
分析由于$n$非常小,可以尝试用穷举的方法计算每种情况。但是最坏情况下的时间复杂度大致为$O(10^9)$,这个会直接TLE。不过确实是一种求法啦^ _ ^。
但实际上,这就是一个01背包问题(zht学了还是不会写唉),是个带有体积限制和物品有其价值(也就是体积)的背包。并不是一个直观上的一维函数可以解决的背包。
代码实现123456789101112131415161718#include <bits/stdc++.h>using namespace std;const int N = 31, M = 20001;int n, v;int f[N][M];int a[N];int main() { scanf("%d%d", &v, &n); for(int i = 1; i <= n; ++i) s ...
austere cache讲稿
Austere Flash Cache with Deduplication and Compression有关闪存缓存当计算机处理大量数据密集型工作时,对于硬盘的IO吞吐率和读写性能要求尤其高,但目前硬盘的性能远没有达到处理机的性能。因此,当想要更高效地去处理这类工作,可以在硬盘之上增加一层闪存缓存。
而在过去的很多研究中都使用了SSD作为闪存缓存介质,因本身具有的性质能够保证它作为闪存缓存介质有着很好的表现。比如说SSD具有
高IO吞吐率
低能耗
高可靠性
价格较低
非易失性(?)
为什么一定要用非易失性cache?是因为HDD是非易失的吗?
然而,由于SSD只有有限的储存空间,并且有写次数限制,想要将SSD作为闪存缓存,还需要克服如下问题:
最大利用有限的SSD存储空间
极大减少写操作
对于解决第一个问题,直观的想法就是去删除SSD缓存中的重复数据,并将缓存中的数据压缩地尽可能紧凑。这也是经常被运用到的两种技术:deduplication和compression。相对应的,不同于使用硬件实现的逻辑地址-物理地址的映射,在cache中实现去重和压缩必然会增加SSD的写次 ...
Austere Cache
conventional flash caching
flash caching with deduplication and compression
the mappings of each logical address to the physical address of the non-duplicate chunk in the flash cache after deduplication and compression
flash缓存中所有存储块的密码散列(又称指纹),用于重复检入重复数据删除
所有大小可变的压缩块的长度
传统的deduplication & compression cache将会给内存带来极大负担,在权衡之下并不能很好地使用。
HDD和SSD的区别
cache的duplication参考论文
Abstract现代存储系统使用flash caching来提高IO性能,并加强空间利用率。flash caching的持久化面对一直在增长的数据密集型工作量一直是一个具有挑战的问题。deduplication和compression是能够有效降低存储和 ...
导弹防御系统
原题链接
题目描述为了对抗附近恶意国家的威胁,RR 国更新了他们的导弹防御系统。一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降。例如,一套系统先后拦截了高度为3和高度为4的两发导弹,那么接下来该系统就只能拦截高度大于4的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。
思路描述由于最多只有50枚导弹,因此可以直接遍历整个导弹序列。如果被放到了单调上升序列中,那么去枚举该数放到哪个单调序列中;如果被放到了单调下降序列中,那么去枚举该数放到哪个单调序列中。这样时间复杂度直接爆炸。实际上,并不需要去枚举该数应该放在哪个单调序列中,这里可以使用一个up[]和down[]数组,分别储存所有单调上升子序列的最后一个元素,以及下降子序列的最后一个元素(该优化是对于之前直接枚举的极大提升)。那么遍历应该怎么怎么实现呢?如果既可能放在上升,也可能放在下降,这样就有两种可能,这样进行一个dfs搜索,但如果是爆搜还是会TLE,还需要一层一层搜索,才能高效得到答案。
代码实现12345678910111213141516171819202 ...