注意

本文档适用于 Ceph 开发版本。

带状存储支持

http://zonedstorage.io

存储区域是一种存储设备类别,它使主机和存储设备能够合作以实现更高的存储容量、增加吞吐量和降低延迟。当前的叠瓦式磁记录(SMR)硬盘通过SCSI存储区域命令(ZBC)和存储区域ATA命令集(ZAC)标准提供存储区域接口,并且即将采用NVMe Zoned Namespaces(ZNS)标准用于NVMe固态硬盘。

该项目旨在使Ceph能够在存储区域驱动器上运行,同时探索与此新接口采用相关的研究问题。第一个目标是使主机管理的SMR(HM-SMR)驱动器上的非覆盖工作负载(例如RGW)运行,并探索清理(垃圾回收)策略。HM-SMR驱动器是具有ZBC/ZAC接口的高容量硬盘。更长远的目标是支持ZNS SSD,随着它们变得可用,以及覆盖工作负载。

这些系列中的第一个补丁实现了向HM-SMR驱动器写入数据。此补丁引入了ZonedFreelistManger,这是一个FreelistManager实现,它向ZonedAllocator传递足够的信息,通过跟踪写入指针和每个区域的死字节数来正确初始化区域的状态。我们必须引入一个新的FreelistManager实现,因为在使用存储区域设备时,磁盘区域可以处于三种状态(空、使用和死亡),而当前的BitmapFreelistManager仅跟踪两种状态(空和使用)。仅通过跟踪两种状态不可能准确初始化ZonedAllocator中的区域状态。第三计划补丁将引入一个基本的清理器,为进一步研究形成一个基准。

目前我们可以在运行在HM-SMR驱动器上的OSD上执行基本的RADOS基准测试,重启OSD,并读取写入的数据,以及写入新数据,如下所示。

如有问题,请联系Abutalib Aghayev <d20927: agayevagayev@psu.edu>。

$ sudo zbd report -i -n /dev/sdc
Device /dev/sdc:
    Vendor ID: ATA HGST HSH721414AL T240
    Zone model: host-managed
    Capacity: 14000.520 GB (27344764928 512-bytes sectors)
    Logical blocks: 3418095616 blocks of 4096 B
    Physical blocks: 3418095616 blocks of 4096 B
    Zones: 52156 zones of 256.0 MB
    Maximum number of open zones: no limit
    Maximum number of active zones: no limit
52156 / 52156 zones
$ MON=1 OSD=1 MDS=0 sudo ../src/vstart.sh --new --localhost --bluestore --bluestore-devs /dev/sdc --bluestore-zoned
<snipped verbose output>
$ sudo ./bin/ceph osd pool create bench 32 32
pool 'bench' created
$ sudo ./bin/rados bench -p bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_h0.cc.journaling712.narwhal.p_29846
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        45        29   115.943       116    0.384175    0.407806
    2      16        86        70   139.949       164    0.259845    0.391488
    3      16       125       109   145.286       156     0.31727    0.404727
    4      16       162       146   145.953       148    0.826671    0.409003
    5      16       203       187   149.553       164     0.44815    0.404303
    6      16       242       226   150.621       156    0.227488    0.409872
    7      16       281       265   151.384       156    0.411896    0.408686
    8      16       320       304   151.956       156    0.435135    0.411473
    9      16       359       343   152.401       156    0.463699    0.408658
   10      15       396       381   152.356       152    0.409554    0.410851
Total time run:         10.3305
Total writes made:      396
Write size:             4194304
Object size:            4194304
Bandwidth (MB/sec):     153.333
Stddev Bandwidth:       13.6561
Max bandwidth (MB/sec): 164
Min bandwidth (MB/sec): 116
Average IOPS:           38
Stddev IOPS:            3.41402
Max IOPS:               41
Min IOPS:               29
Average Latency(s):     0.411226
Stddev Latency(s):      0.180238
Max latency(s):         1.00844
Min latency(s):         0.108616
$ sudo ../src/stop.sh
$ # Notice the lack of "--new" parameter to vstart.sh
$ MON=1 OSD=1 MDS=0 sudo ../src/vstart.sh --localhost --bluestore --bluestore-devs /dev/sdc --bluestore-zoned
<snipped verbose output>
$ sudo ./bin/rados bench -p bench 10 rand
hints = 1
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        61        45   179.903       180    0.117329    0.244067
    2      16       116       100   199.918       220    0.144162    0.292305
    3      16       174       158   210.589       232    0.170941    0.285481
    4      16       251       235   234.918       308    0.241175    0.256543
    5      16       316       300   239.914       260    0.206044    0.255882
    6      15       392       377   251.206       308    0.137972    0.247426
    7      15       458       443   252.984       264   0.0800146    0.245138
    8      16       529       513   256.346       280    0.103529    0.239888
    9      16       587       571   253.634       232    0.145535      0.2453
   10      15       646       631   252.254       240    0.837727    0.246019
Total time run:       10.272
Total reads made:     646
Read size:            4194304
Object size:          4194304
Bandwidth (MB/sec):   251.558
Average IOPS:         62
Stddev IOPS:          10.005
Max IOPS:             77
Min IOPS:             45
Average Latency(s):   0.249385
Max latency(s):       0.888654
Min latency(s):       0.0103208
$ sudo ./bin/rados bench -p bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_h0.aa.journaling712.narwhal.p_64416
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        46        30   119.949       120     0.52627    0.396166
    2      16        82        66   131.955       144     0.48087    0.427311
    3      16       123       107   142.627       164      0.3287    0.420614
    4      16       158       142   141.964       140    0.405177    0.425993
    5      16       192       176   140.766       136    0.514565    0.425175
    6      16       224       208   138.635       128     0.69184    0.436672
    7      16       261       245   139.967       148    0.459929    0.439502
    8      16       301       285   142.468       160    0.250846    0.434799
    9      16       336       320   142.189       140    0.621686    0.435457
   10      16       374       358   143.166       152    0.460593    0.436384

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.