翻译 | Zoned Storage Devices

本文是此网页的翻译加理解,为了理解和分享Zoned存储设备的设计原则:

Zoned Storage Devices Overview | Zoned Storage

https://zonedstorage.io/docs/introduction/zoned-storage

本文中对于zoned storage我译作区块存储,也可以译作分区存储。如有翻译错误欢迎私信联系。


Zoned 存储设备

zoned存储(区块存储)是存储设备的一类,特点是它们的地址空间被划分为许多区块(zones),在这些区块上存在一些写入时的约束。

操作原则

区块在区块存储设备上必须被顺序写,这是顺序写限制。每个区块在设备上的地址空间存在一个写指针始终保持在下一个写的位置,在一个区块中的数据不能被直接覆写,如果需要覆写,这一个区块必须首先使用一些特殊的命令(zone reset)完全擦除:

outside_default.png

区块存储设备可以被使用多种协议在多样的介质媒体上实现,目前最常见的形式是使用SCSI Zoned Block Commands(ZBC)和在 Shingled Magnetic Recording hard-disks(SMR,瓦状磁记录硬盘?)上使用Zoned ATA Commands(ZAC)接口,ZBC和ZAC建立了区块存储的模型,SMR 技术可实现面密度的持续增长,从而可以满足不断扩大的数据需求,并且SMR技术需要分区块访问技术。

固态硬盘存储设备也可以实现zoned接口,可以使固态硬盘写入放大减少(写入放大 (英语:Write amplification,简称 WA )是闪存和固态硬盘(SSD)中一种不良的现象,即实际写入的物理数据量是写入数据量的多倍。由于闪存在可重新写入数据前必须先擦除,而擦除操作的粒度与写入操作相比低得多,执行这些操作就会多次移动(或改写)用户数据和元数据。因此,要改写数据,就需要读取闪存某些已使用的部分,更新它们,并写入到新的位置,如果新位置在之前已被使用过,还需连同先擦除;由于闪存的这种工作方式,必须擦除改写的闪存部分比新数据实际需要的大得多。此倍增效应会增加请求写入的次数,缩短SSD的寿命,从而减小SSD能可靠运行的时间。增加的写入也会消耗闪存的带宽,此主要降低SSD的随机写入性能。许多因素会影响SSD的写入放大,一些可以由用户来控制,而另一些则是数据写入和SSD使用的直接结果。),可以减少设备DRAM需求,还可以大规模提高服务质量(to improve the quality of service at scale)。

区块大小和区块可用大小Zone Size and Zone Capacity

一个区块在区块存储设备上的大小是在一个区块内逻辑块的数目,这个数值在生产时就被确定且不能再被用户修改。(但是存在一个例外,ZBC-2标准拓展了ZBC命令,使用FORMAT WITH PRESET命令可允许用户使用不同的区块大小重新格式化一个区块SMR硬盘设备,但是,此操作具有破坏性,因此不能在实时系统上使用。)

一些区块存储设备允许为每一个区块定义可用大小capacity属性,这个属性指示出一个区块中可用的逻辑块(logic blocks / sector)数目,表示从第一个逻辑块到第capacity个区块是可用的,显而易见,可用区块数目一定小于区块大小:

outside_default.png

允许区块可用大小和区块大小的差异可以使得所有的区块保持连续的同时还能允许区块存储的可用大小和基础媒体特征进行优化映射。举个栗子,对于基于闪存的存储设备,区块的可用大小可以对齐闪存擦除块大小保持一致,而不会对设备擦除块大小(我的理解是zoned存储每次擦除一个区块)造成影响。

区块模型 Zone Models

区块存储设备在区块接口上可以有不同的形式,我们把这些形式叫做“模型”,它们的差异主要影响主机hosts和用户users,了解这些差异是重要的,因为并非所有实现选项都适合特定的存储应用场景。当下使用的两种模型是:

  • Host-Managed 这种模型支持顺序写入工作负载以提供可预测的性能和对主机级别的设备区域的完全控制。需要修改主机软件才能使用Host-Managed设备。

  • Host-Aware 这种模型提供了与常规设备的向后兼容性,允许向任何扇区发出随机写入操作,但是此模型还提供由Host-Managed模型提供的相同主机控制接口。

Host-Managed 模型:

Host-Managed (主机管理)模型不再提供对遗留设备的向后兼容,取而代之的是它将设备顺序写入约束委托给主机软件管理:主机必须管理所有的写动作。这可以通过使用写指针强制在区块内顺序写实现。

当数据被写入一个区块后,写指针向后移动指出下一个写入操作开始的位置,任何乱序的写(没有从写指针位置开始的写)都将被禁止并标记错误,而错误恢复是控制写入行为的主机软件的责任,这个强制要求允许Host-Managed设备提供可以预测的性能。

Host-Aware 模型:

Host-Aware (主机感知)模型通过向后兼容常规块设备,同时保持与传统主机存储堆栈的兼容性,但也为主机提供相同的命令集以严格控制设备区块。

当Host-Aware设备和Host-Managed设备类似时,讨论的主机端(host-side)软件支持和优化的所有事项都适用于这些设备。 

区块类型 Zone Types

管理区块存储设备的特性和操作的标准定义了三种不同的区块类型:

  • Conventional zones 普通区块,通常只占设备总容量的很小比例,访问普通区块类似于对传统块设备的访问(普通区块接受随机写操作而且常被用来保存元数据),普通区块没有写指针。

  • Sequential-write-required zones 需要顺序写入区块,这种区块接受随机读命令而且随机读的命令与标准块设备相当,但是,这些区块受区块存储顺序写入约束因此只能按顺序写入,任何的写命令都必须从与该分区写指针指向的位置开始。

  • Sequential-write-preferred zones 优先顺序写入区块,这种区块既能随机读也能随机写,但又不像普通区块一样,它含有写指针,具备严格顺序写入的潜力(骑墙类型,既能转为普通区块,又能转为需要顺序写入区块)

总体上来说,需要顺序写入区块和优先顺序写入区块统称为顺序区块

特定区块设备上每种类型的区块的可用性取决于设备控制标准和设备区块模型(Model)。普通区块是可选的,可以在Host-Managed和Host-Aware设备上都可以找到。需要顺序写入区块只能被定义在Host-Managed设备模型上,优先顺序写入区块只能被定义在Host-Aware设备上。

区块管理命令Zone Management Commands 

区块存储设备也提供了区块发现和管理命令作为设备基础指令集(就像那些为常规块设备的定义的命令集一样)的扩展。

主机软件可以通过REPORT ZONES命令发现一个区块存储设备的区块组织结构,这个命令返回一个区块描述符的列表,列表中指出区块开始的块位置(starting block),区块大小(size),类型(type)以及区块的状态(state),对需要顺序写和优先顺序写区块而言,区块的描述符也指出了当前写指针的位置,这个信息允许主机软件实现该区块的顺序写入流。

区块可以被管理使用以下命令:

  • RESET ZONE WRITE POINTER 该命令用于重置写指针位置到区块起点,正如前面所说,如果对一个区块要覆写,需要先消除区块数据,可以通过这个指令重置写指针,但这也会导致区块中所有的数据丢失,不能再被访问。

  • OPEN ZONE 一个区块块设备(zoned block device)也许需要占用机器资源(比如,persistent zone resources 持久区块资源)用于维护每个区块。而计算机的资源总量是有限的,资源不足时有可能导致功能降级(例如,降低性能或者减少能耗),OPEN ZONE命令允许一个应用明确地打开一个区块,并且向设备表明写入区块所需的资源应保持可用,直至区块完全写入或使用CLOSE ZONE命令关闭区域。使用此命令实现的性能优势取决于设备媒体类型和区块管理实现。

  • CLOSE ZONE 该命令允许一个应用明确地关闭一个使用OPEN ZONE打开的区块,该命令向设备指明写入区块所需的资源不再必需,可以被释放。

  • FINISH ZONE 该命令允许一个应用移动一个区块的写指针到区块末尾,阻止任何可能的写动作直到区块被重置(RESET)。


区块状态和状态转换Zone States and State Transitions


区块存储设备中每一个顺序区块都有状态属性,这个属性指出区块内块的用量(usage of the blocks within the zone)和这个块所使用的设备资源,定义如下的状态:

  • Empty 该区块中没有块包含有效数据。

  • Full 该区块中所有块都被写入或者当前块被调用了FINISH ZONE命令。

  • Implict Open 隐式开 区块中的一些块近期被主机host写入,当前区块正在使用机器资源。

  • Explicit Open 显式开 区块被主机软件执行OPEN ZONE命令的方式分配机器资源。

  • Closed 区块被主机软件执行CLOSE ZONE命令的方式释放了机器资源或者设备隐式释放了分配给区块的机器资源以为不同区块的的写入操作提供服务。

  • Read Only 当前区块只能被读取。这种状态通常对应于设备的有缺陷的状态,例如,对于硬盘,该区块存储在具有损坏的写入磁头的盘片上。

  • Offline 当前区块既不能被读取也不能被写入。此状态通常对应于设备的有缺陷的状态,例如,区域的存储介质不再运行。

区块管理命令和写入操作的执行可能会使得区块的状态发生改变,对于所有区块存储设备标准,最常见的状态转换自动机如下图:

outside_default.png

向read-only或offline状态的转换通常发生于一个设备内部事件导致缺陷之后,在这两个状态中的区块将不能重新回到具备完全功能、正常运行的状态。

对于正常状态,RESET ZONE命令的执行总会将状态转移到empty,表明当前区块的任何一个块都不包含有效数据。

一个对empty区块内的写动作会使得这个区块的状态转移到隐式开implict open,如果继续写入,将区块写满,会将状态转换为full,当然,对区块执行FINISH ZONE命令也会使得状态转换为full。

一个empty或implicitly open的区块可以通过执行OPEN ZONE命令被转换为explicitly open,打开的设备可以通过执行CLOSE ZONE命令被转移至close状态。

区块资源限制 Zone Resources Limits

区块存储设备的实现方案可能需要申请机器资源(比如一个写缓冲区)来执行区块的写入动作。此外,设备的存储介质特性也可能限制可以处于部分写入状态的区块数量。

打开区块数目限制 Open Zones Limit

对区块存储设备可用于处理写入操作的机器内部资源总量的限制可能会限制可以同时处于隐式或显式打开状态的区块总数。如果这样的限制存在,区块存储设备可能会写入失败,OPEN ZONE命令也会避免打开的区块数量超过限制。

这个限制不会影响读操作。

活动区块数目限制 Active Zones Limit

我们定义活动区块Active Zones为状态为隐式打开、显式打开和关闭的区块(上图有表述),对应于正在写入或仅部分写入的区块,区块存储设备可能会对可以处于活动状态的最大区块数加以限制,这个限制值始终大于或等于最大打开区块数。

区块存储设备的最大开放区块数仅限制主机软件可以同时写入的区块数,活动区块数目的最大数量限制了可以选择用于存储数据的区块数。如果活动区块的最大数目达到,主机软件在选择其他非活动区块存储数据之前必须选择reset或者finish一些活动区块,腾出位置。

与打开区块数目限制相似,活动区块数目限制也不会影响读操作,无论当前打开和活动区块的数量如何,对于非离线offline状态的区块都可以进行读取。

区块追加 Zone Append

Host-Managed设备的需要顺序写入区块(sequential write required)所施加的顺序写入约束对主机IO堆栈有影响,也就是说,所有指向顺序区块的写入命令在设备接收并执行之前不得重新排序。否则,将无法满足顺序写入要求并报错。但是,主机IO堆栈的复杂性以及某些存储适配器的命令传输并不保证排序性,这两点可能不允许实现按照顺序区块的要求对写入命令进行排序。

主机软件可以通过限制未完成的写命令数目为1来避免写入错误,但是这会导致较差的性能,特别是对于主要发出小型写入操作的工作负载。

为了避免这个问题,一些区块存储设备定义了Zone Append (区块追加)命令,一个区块追加命令是一个写动作,就像python中把元素添加到末尾的最后面,它将区块的第一个逻辑块位置作为写入位置,当此命令被执行时,设备在指示的区块内写入数据,但是实际上是在当前区块写入指针的位置完成这个操作,写入位置的这种更改是自动的,并且通过命令完成信息向主机指示数据的有效写入位置。此机制允许主机同时提交多个区块追加操作,并让设备按照任意顺序去处理这些操作。如下图,这是常规写入和追加写入方式的差异:

outside_default.png

在图中的例子中,主机需要处理写入到同一区块中的三个写动作,分别写入数据A(4KB)、B(8KB)、C(16KB),对于常规写命令,只有当每个区块的写队列深度限制为1时才能确保写入安全完成,也就是说,主机必须要等待未完成的写入操作完成才能处理下一个写入请求。对每个写入请求而言,写入位置必须要等于当前写指针位置(否则报错),这会导致数据以与发出请求的顺序相同的顺序存储在区块中。

使用区块追加命令写入则不同,写入队列深度约束可以被移除而且主机可以同时处理三个写入请求。完成所有写入请求之后写指针的位置与前一种情况相同,因为写入的数据总量相等。不过,写入区块里数据的顺序可能与主机命令顺序不一致,主机最终可以通过区块追加完成信息发现每个请求有效写入位置,找到数据被安家在哪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值