Linux【6】-硬盘管理4-3-Chunk size, Stripe width, Stripe size

最近运行alpfafold的时候,因为chunksize参数,内存溢出。 所以简单了解一下什么事chunk size

在RAID-6的实现过程中,发现Chunk size, Stripe width, Stripe size这几个概念十分容易混淆,且能完全辨析的帖子很少。因此经过在百度大学以及谷歌大学的学习,我整理了一个从我的角度来说能够辨析上述概念的正确的思路。上述概念的辨析主要可以结合RAID0来进行理解,如果在叙述方面存在不妥或者有更好的理解方式,欢迎讨论~

在正式开始进行概念辨析之前,首先来回顾一下什么是RAID。

RAID

RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。 RAID分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。 在实际应用中,,我们可以把RAID分为不同等级,以满足不同的实际应用需求,

其中RAID-0是一种非常简单的RAID方案,本文重要从RAID-0入手对strip size, stripe width, stripe size, chunk size进行辨析。

RAID-0

RAID0称为条带化(Striping)存储,将数据分段存储于各个磁盘中,读写均可以并行处理。RAID 会将磁盘先切出等量的区块(chunk),一般可设置 4K~1M 之间, 然后当一个文件要写入 RAID 时,该文件会依据 chunk 的大小切割好,之后再依序放到各个磁盘里面去。

因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复。

大多数striping的实现允许管理者通过调节两个关键的参数:stripe width和chunk size来定义数据分段及写入磁盘的方式,这两个参数对RAID0的性能有很重要的影响。

  • Stripe width: 可被并行写入的chunk的个数,即等于磁盘阵列中磁盘的个数,不包含校验

Chunk sizes (trip size, segment size): 指每次写入一个物理磁盘的数据块大小(数据量,以KB为单位),是作为single stripe的一个部分

  • chunk size = max I/O size/ stripe width
  • RAID中每一个成员盘一次写入的数据量,大于chunk size才到下一个盘读写(数据量以KB为单位)
  • 以块分段的RAID通常可允许选择的块大小从 2KB 到 512KB不等,也有更高的,但一定要是2的指数倍。不同chunk size的选择直接影响RAID的性能,如IOPS和吞吐量。但在实际应用中最好依据自己的需求来进行观察并调整。
  • chunk size值小,通过多块磁盘响应多个I/O请求,可以增加I/O访问速率(IOPS)(文件会被分成更小的块,传输数据会更快,但是却需要更多的磁盘来保存)
  • chunk size值大,通过多块磁盘响应一个I/O请求,可以增加数据传输速率(Mbps)

Stripe size: 整个条带(stripe)的大小,通过将chunk size和stripe width相乘来得到

示例

如下图所示,若在RAID中可被并行写入的chunk个数是4,所以Stripe width是4。假设每个chunk的大小是128K,那么总体的每个条带的大小就是等于512K。

参考资料

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn