【底层原理】存储数据包的一生(上)

存储 存储软件
存储系统从整体的分层一览,包括了主机/应用,存储介质,存储网络。对于存储来说就做了一件事:Here is a bit of data. Hold onto it. Give that same bit back to me when I ask for it.

 最近认认真真学习了一个叫《Life of a Storage Packet》讲座,借助这个讲座将整个存储的过程理解了下,不放过任何一个有疑问的点。这篇文章算是对讲座的理解和自己收获的总结,同时也为那些对存储系统不够了解又想要了解的初学者,展现一个存储数据包的“生命”。这个演讲主要聚焦在“整体的存储”,强调存储系统中各个基本元素的关系,并且尽可能简单、清楚地用一种不同的方式可视化一些存储的概念。

[[217492]]

先上一张大图,可以说这篇文章目的就是解释这个图:

整体视角

存储系统从整体的分层一览,包括了主机/应用,存储介质,存储网络。对于存储来说就做了一件事:Here is a bit of data. Hold onto it. Give that same bit back to me when I ask for it.

Application视角

每个系统都有会有很多应用程序运行在CPU上,对于这些Application来说,他们觉得自己有很多很多足够的可用内存。

CPU和MMU

计算机系统中有一个“内存管理单元”(MMU,Memory Management Unit)的概念,MMU负责与DRAM内存直接通信,并且获得一些可用的“页”

多租户:内存被某个进程(比如一个应用)独享,这些内存不能被其他进程重写。

地址:将CPU的物理地址翻译成独有的DRAM地址或者是很多行DRAMs,有了MMU以后,对于每个进程来说,他们就像是一个人独占了所有的内存一样。

访问内存

Application在他需要访问的时候,获取这些内存,在实际进行访问时,会发生如下事情:

1:Application会问操作系统“Hey,我需要一些可用内存”

2:操作系统向MMU说,“能给我一些可以使用内存页不?”

3:MMU把一些可用的内存页给操作系统

4:操作系统把这些可用的内存页给Application。

分配内存

在上图中,获取的那些内存,实际是可以分布在内存中的任何地方的(非连续),MMU在把这些内存给应用的时候会进行初始化操作,当然,当应用不再访问这些内存页的时候,也会MMU也会负责回收这些内存。

加速访问

如果Application对内存的访问,每次都要都要从MMU获取的话,那太慢了,因此有个经验法则是:Always put storage/memory as close to the CPU as possible

可以说在存储中,改善时间的限制是永恒不变的主题,然后访问DRAM的话,需要60-100ns的时间。我们需要更快的访问,甚至达到“0”时间访问。

缓存的魔法

于是在CPU中增加了一些缓存,当然缓存也是分级别的,对于L1缓存大概花费1ns以内,L2缓存大概花费3-6ns,没错,这使得每次访问从60-100ns提升了几十倍!

更多的空间

如果DRAM中也没有足够的空间时,这是你需要更多的持久化存储,比如说磁盘。当然直接去访问磁盘会非常的昂贵,当然这里指的是时间的花费非常昂贵。

在Jeff Dean大神的Software Engineering Advice from Building Large-Scale Distributed Systems给出了数据:L1缓存、L2缓存、主存、硬盘的访问分别是1ns、5ns、100ns、10,000,000ns级别;

举个比较形象的例子:你需要快递送个包裹,快递一个1公里(L1)、5公里(L2)外的包裹,oops,可能马云爸爸保证当日达;快递100公里(DRAM)的包裹,11点前下单,当日达,不能再快了!;快递1000万公里(Disk)的快递,啊亲,你真的需要快递吗?这可是从地球到月球(38.4万公里)十几个来回的距离啊亲。

小结

存储设备和RAM不太一样,不会和CPU直接进行“对话”,而是有一些其他的部分来帮助他们完成对话,我们在下文从存储视角进一步去讲述。

责任编辑:武晓燕 来源: 码农有道
相关推荐

2015-04-23 08:51:53

2020-07-09 17:37:47

Linux网络包中断

2015-08-03 09:33:21

PH程序员一生

2021-05-12 00:07:27

TCPIP协议

2016-08-24 11:13:30

2023-01-10 08:20:55

RocketMQ消息源码

2019-04-29 07:53:11

TCP数据包TCP网络编程

2017-11-20 10:08:48

大数据后悔的事

2023-03-27 00:13:26

数据包Kubernete网络

2021-07-23 13:34:50

MySQL存储InnoDB

2021-10-26 13:18:52

Go底层函数

2021-05-26 08:01:25

数据包Scapy数据安全

2021-08-06 22:43:54

中断架构传递

2012-12-04 10:08:16

2015-03-24 13:39:08

IE

2018-01-05 12:42:01

Lisa电脑苹果Mac

2020-11-29 17:08:50

程序员IT

2021-09-28 08:05:56

黑客网络安全网络攻击

2018-09-26 10:45:01

Linux命令tcpdump

2020-11-18 07:54:31

太网数据包架构
点赞
收藏

51CTO技术栈公众号