IO协议栈前沿技术研究动态(2015存储峰会分享)

上周冬瓜哥在由DOIT传媒举办的中国存储峰会数据经济峰会上做了一次技术分享。那些没来得及现场参与的朋友们,冬瓜哥为大家奉上了由DOIT传媒整理的冬瓜哥现场演讲听记,其中可能有些错误,冬瓜哥初步稍微整理了一些,但是在所难免,见谅。



  冬瓜哥:谢谢大家,这是我的微信公众号,大家有兴趣可以关注一下,里面有我平时写的一些文章,结尾还有这么一个码,大家来不及,可以结尾再扫。先上一道开胃小菜,大家知道这是什么东西吗?我估计可能没有人见过,我也没有见过。这个东西是一圈一圈的铁丝,说白是铁丝,当然不是一般的铁丝,是经过设计的。


  这是半个世纪前的一种存储装置,是怎么存的呢?跟我在这个房间里面讲话有回声,我说出一句话,声波反射到我耳朵里面,我听到,再把这个话再说出去,它又反射回来。我用这种方式,让我要传达的信息,不断在这个媒介上,空气的振动,不断的振动,循环的振动,这个信息就保存在这儿了,除非我断电。这个装置跟这个原理是一样的。你把一个你要存储的信息,编码成也是一种声波,从这个铁丝上传过去,声波在铁丝里面绕绕绕,绕回来以后,你在这儿再把它重新加强,再发出去,不断的循环。这改变所谓的延迟线存储器。一般延迟五微秒左右。


  下面我们进入正题。我今天这个话题就是想为大家分享一下IO协议栈里面一些前沿技术和动态。首先搞清楚什么叫协议,什么叫做栈,什么叫IO。IO协议栈是一个操作系统里面一系列软件的模块,让你的应用要读盘的时候,比如读一个U盘,U盘插上以后,点一个复制粘贴,复制粘贴是一个程序,并不是某个菜单,你点的这个菜单,激发了这么一个进程,后面起了一个进程,比如Linux下的做运维的都知道有一个dd的程序,这个程序会调用系统提供的一些代码。当然先得打开,然后做一个准备工作,然后才读写。这些代码都是OS提供的,你只需要调用就可以了。这些代码会被映射到用户空间里面。你把IO下发给这些代码以后,你把这些参数传给他,要读写哪个文件,哪个路径,哪个设备,怎么度,怎么写?把所有的参数告诉它。

(本图在“大话存储”公众号的某文章中可以获取原图)


  它下一步实现一个操作叫陷入内核,中断到内核里面,这一步操作开始非常大,因为牵涉到权限的转换,开销是很大的。进入内核以后,先到一个VFS的层,这是一大块的代码,这个层就是目录层,比如C:/,Linux下/某个字母,再写一些字母。谁来维护目录和底层的存储的实体的映射关系呢?由VFS层维护,你访问的是一个网络盘的路径,还是一个本地盘的路径,是一个文件,串口,终端,其实都是符号,由VFS把IO下发给底下对应的承载者,底下画了四个承载者。还有跨设备的各种设备,还有网络的系统,还有内存里面的数据结构,比如/PROC,有一些运维的时候用的一些命令,把它从零改成一,触发了某一个逻辑,这都是内存里面的数据结构,也在这个符合下限。


  这层再往下,如果访问块设备,直接下到块层,块层是最终对存储设备的集中访问点,在这个层里面,有一些附加功能,比如多路径,加密这种分层,缓存,很多的开源的这些产品,其实都是基本上在块层这个功能上面做二次开发做出来的。块层下面就是一个IO的队列,在这儿做一下IO的优化,合并,存盘这些事情。在这儿会有一个瓶颈,就是IO这个里头的队列是一个瓶颈,上层把IO往这个队列里面放,下层不断把IO拿走。俗话说的SCSI协议栈,包括三层,一个是上层的协议驱动,指磁盘驱动,磁带驱动,如果有其他的设备,比如打印机之类的,SCSI打印机和扫描仪也有,很早的时候,这块就是驱动设备了。SCSI Middle 层就是管SCSI指令,下发下来都是在内存里的数据结构,每个OS都不一样,但是如果发到磁盘,发到外面的交换机,必须把它弄成标准化的,因为外面有很多厂商做硬件,你不标准,就没法做了这个硬件,你不能说为每个OS都做一个硬件。这层除了翻译成SCSI指令,这边有SCSI语义,还有管真正的SCSI的处理,比如超时了怎么办这些事情,这是中间层。 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值