当前位置:首页 > 安全管理 > 安全动态
IO协议栈的前沿技术和发展趋势|888am集团登录入口
时间:2021-01-09 来源:888澳门集团娱乐网址 浏览量 48909 次
本文摘要:SCSI中间层负责SCSI指令,打印分发时都是内存中的数据结构,每个OS都不一样。在HBA下,有这样一层设备找到的库,因为传统的SCSI和几十年前的SCSI一样只是物理硬件,可能有人见过又粗又蠢的电缆。

近日,PMC公司高级数据中心架构师东丈在中国存储峰会上分享了IO协议栈的前沿技术和发展趋势。以下是讲话的精髓。

IO协议栈概念IO协议栈是操作系统中的一系列软件模块,让你在想读磁盘的时候,比如读u盘的时候可以使用。优盘挂起后,点击复制粘贴。复制粘贴是程序,不是菜单。

你点的菜单就唤起了这样一个过程,然后是一个过程。比如Linux,所有做运维的操作人员都告诉有一个dd程序,它不会调用系统获取的一些代码。当然,你必须再次关闭它,然后在阅读它之前做一项预期的工作。这些代码都是OS获取的,你只需要调用即可。

这些代码不会同构到用户空间中。你把IO发给这些代码后,把这些参数传给他,哪个文件,哪个路径,哪个设备,怎么写?告诉他所有的参数。

下一步是构建一个名为陷在内核中的运算符,并将其中断到内核中。这一步,操作者一开始很大,因为涉及到权限的切换,开销相当大。转移到内核后,转到VFS层,这是一大段代码。

这一层是目录层,比如c:/,Linux/一个字母,然后写一些字母。谁将确保目录和底层存储实体之间的同构关系?VFS层确保您访问的是网络磁盘路径或本地磁盘路径、文件、串行端口和终端,这些只是符号。VFS将IO发送给底部对应的支持者,在底部抽取4个支持者。

内存中还有跨设备、网络系统和数据结构的各种设备,如/PROC。在运维中使用了一些命令,把它从零变成一,启动了一定的逻辑。

这些都是内存中的数据结构,这里也满足上限。这一层向北延伸。如果访问块设备,则需要转到块层。

数据块层是存储设备访谈点的最终焦点。这一层有一些可选的功能,比如多路,加密,内存,还有很多开源的产品,但是基本上都是在块层这个功能上二次开发的。

块层下面是一个输入输出队列。在这里,做IO的优化,拆分,保存。

这里不会有瓶颈,就是IO内部的队列是瓶颈。上层把IO敲进这个队列,下层把IO偷得大大的。俗话说,SCSI协议栈也包括三层。

一个是上层协议驱动,指磁盘驱动和磁带驱动。如果说还有其他设备,比如打印机,SCSI打印机,扫描仪,很久以前,这个是驱动设备。SCSI中间层负责SCSI指令,打印分发时都是内存中的数据结构,每个OS都不一样。

但是如果LTL之外的LTL磁盘和交换机,标准化的话还是要盖的,因为外面做硬件的厂商很多,如果你不标准的话就做不到这个硬件。你不能说你可以为每个操作系统做一个硬件。这一层不仅翻译成SCSI指令,这里还有SCSI语义,还负责实际的SCSI处置,比如超时后如何做这些事情。这是中间层。

最底层是HBA层,首先要有驱动。在HBA下,有这样一层设备找到的库,因为传统的SCSI和几十年前的SCSI一样只是物理硬件,可能有人见过又粗又蠢的电缆。

后来,更慢更高效的物理链路类型FC和SAS也经常出现。SCSI协议,如果你想在这些物理链路上运行,你必须有这样一段代码。在这个网络中,找到您对面的SCSI设备。

如果后端更改为SAS,此代码将不会在SAS网络上接收到一些广播消息,观察设备,然后分解设备符号。北面,有硬件。如果有协议,那就是硬件。

硬件必须连接到HBA、SCSI卡、SAS卡、以太网卡和各种卡。通过这张卡,它可以通过网络,或者连接到交换机,或者直接连接到最后一台设备。

那么,这里画的一些箭头是什么意思呢?每个硬件,每个角色都有自己的驱动。在设备的底部,它的驱动在上面,往北一层,HBA驱动在这个地方,然后HBA上有一个PCIE控制器,是一个由内而外扩散的东西。但是IO要再次发送到顶层驱动,然后再发送到底层设备,驱动就是从上到下接收。

协议栈

这是传统的协议栈。红色的是所谓的NVMe协议栈。NVMe和PCIe的区别是什么?NVMe是一个协议栈和协议。

就像说话一样,汉语看起来很SCSI,很博大精深,有语法和成语,很厚实。NVMe相当于英语,非常简单,需要26个字母。但是,我们都是用声音说话,用空气传播,用振动传播,这就是原因。

SCSI也可以在PCIe上运行,就像SCSI在光纤通道上运行一样。同样,NVMe也可以在以太网或光纤通道上运行,但是只要速度不太慢,也可以在串行端口上运行。NVMe的协议栈非常轻量级,而且像英语一样,它的通信非常简单,所以它的速度相对较慢。

传统IO协议栈的问题这个传统协议栈怎么了?为什么那么多人要去改变?主要问题是内存。之前没有经常出现,也没什么问题。

当它频繁出现时,它只是一个问题。看看有什么问题。

第一个问题是太长了。你可以看到,上面说的都只是IO协议栈。

设备

当然,SCSI协议栈是通用的,一般指的是下面的,但上面的也要算。它穿过了几个街区?有很多模块。每次通过一个模块,你的代码都要在CPU内存之间进行交换,继续执行一段时间,并且涉及到往返转换。

当然,你可以以人的标准来讲,CPU继续执行的IO,可能不会有很长的付出,比如微秒、毫秒。但是对于SSD来说,SSD调用非常慢。如果太快,性能不会得到充分利用。

我们常说NVMeSSD性能高,但是你放在机箱里,你就放一个NVMeSSD在海南,放一个IO协议从北京到海南,然后回来,它就同意慢了。即从收到IO的时间到收到磁盘的时间,经历的路径越宽,时间延迟越大,经历的模块越多,每个模块处理的东西越多,时间延迟越大。也就是说,当NVMe靠近时,它会不高兴。

因为这个延时太高了。第二个问题是太重了。所谓太重,每一层都有自己的处置逻辑,比如进入VFS,找出这个目录对应的是谁?搜索fstab表,如果你面试文件系统,让文件系统读取元数据,也就是当你读取元数据的时候,文件系统不会向磁盘发送IO,读取元数据,找到合适的信息来处置你的IO,那么IO就可以进入磁盘了,相当于一个IO启动的时候有N个IO,可能会极快的轻。

Block层要处理的协议很多,SCSI协议栈比较薄,因为现在传统的SCSI东西已经发展了几十年,里面什么都加了,各种库和长度都塞在里面,所以里斯的整个协议栈很轻。往北走下去就是黑匣子。外面的设备怎么造你不说。

它可能是一个磁盘,一个由别人的虚拟世界创建的磁盘,一个分布式的磁盘,就像刚才提到的那个,或者一个集中式的磁盘。但是你能猜到什么呢?以下存储设备只是其中的一个操作系统。你的IO来找他,他要经过这一层,最后进入实际的物理磁盘。

IO可以下去之前有可能要经过N轮,所以传统协议栈比较宽,比较轻。第三个问题是太宽了。

太宽意味着块层中只有一个队列。这个队列由IO填充。你在面试中使用了多种设备。很多应用都是多盒CPU。

每个CPU操作一个线程,每个线程都被发出IO。如果只是四个线程放IO在里面,就相当于一个单行道,两个车同时塞在里面,爆胎不会频繁发生。

IO也是如此。谁想把IO放进去,修改指针,就必须读,改,写回原来的值。如果线程1读取,线程2读取,那么这两个线程的IO最终都不会被破坏或者混淆。

另外如果这个变量是双字节,或者四字节,你写一个字节,我写一个字节,最后就乱了,就解体乱了。所以,要想把IO放进去,就要锁定这个队列,再锁定这个变量,再锁定,这样别人锁定后就不能面试了,然后你再写进去。

这样看起来好像是在上面分段,在这里倒过来锁,所以支出很大,最后性能比较差。当然对于机械硬盘来说,不是问题,因为机械硬盘太快了,明显远远超过了支出。第四个问题太浅。

这个队列不仅是一个队列,而且是宽而深的。它能容纳的IO不多,SATA仅次于32,SAS磁盘仅次于256,还有HBA卡的队列,驱动内部的队列,Block中的队列。这些队列是根据这个磁盘设计的,比如256个磁盘,25632个,仅次于那个,实际上比这个少。

肤浅会导致什么问题?如果底部极快,深度没问题,因为这个IO暂时不会消耗。但是,如果你动作快,你不会发现队列会下一段时间的飞机,IO还没下来,但会再次下飞机。整个一个就跟开车一样,但是油给不了。

所以才太浅。


本文关键词:888澳门集团娱乐网址,驱动,磁盘,在里面,块层

本文来源:888am集团登录入口-www.parallelalices.com

版权所有莆田市888澳门集团娱乐网址科技有限公司 闵ICP备31994499号-2

公司地址: 福建省莆田市郧阳区来务大楼58号 联系电话:054-44746498

Copyright © 2018 Corporation,All Rights Reserved.

熊猫生活志熊猫生活志微信公众号
成都鑫华成都鑫华微信公众号