RAID 0 如何提供改进的 i/0?

RAID 0 如何提供改进的 i/0?

可能重复:
有哪些广泛使用的 RAID 级别以及何时应该考虑它们?

我想知道 RAID 0 如何提供更好的 i/o。

如果我没错的话,RAID 0 中的数据会被分割并存储在不同的硬盘中。

在这种情况下对于每个读取请求不需要扫描整个数组来获取文件吗?

有人可以澄清这一点吗?

答案1

添加答案并回答评论(评论有点太长,无法回答)

您可以尝试从大局考虑。从 2 个磁盘读取会比从 1 个磁盘读取更快吗?答案显然是肯定的。如果一个磁盘只能读取 100MBps,那么两个磁盘自然可以读取 200MBps。这就是为什么 raid 0 的理论读取速度是 n,其中 n 是阵列中的磁盘数。对于具有读取功能的 raid 1 也是如此。有 n 个磁盘,您可以同时从所有磁盘读取以获得更快的速度。

但是,raid 0 比 raid 1 更快,因为不仅有读取,还有写入。raid 0 是条带化的,因此只有一半的数据在一个磁盘中,另一半在另一个磁盘中。raid 1 是克隆的,因此数据在两侧。这意味着在写入时,您需要将 raid 1 中的所有数据写入两个磁盘。因此,raid 0 中的写入速度再次为 n,这里 n 是阵列中的磁盘数,而 raid 1 的写入速度始终为 1;与写入非 raid 磁盘相同。

也触及了原始问题的误解。您永远不会扫描磁盘来查找文件的数据。文件具有指向驱动器中存储该文件的块的指针。一旦您获得了相关文件,您就可以从该位置获取数据并从该块中检索相关信息。

我建议你阅读更多关于它的内容维基百科关于 RAID。

另外,你可以尝试使用 raid 计算器来查看理论读/写速度沃尔夫拉姆阿尔法

答案2

要记住的关键一点是,数据是以块为单位分布的,而不是以位或字节为单位。块大小(又称条带大小)因实现而异,并且通常是可配置的。块大小通常在 32KB - 2M 之间。

因此,对于小于单个块的文件的单个读取请求,只需要使用阵列的单个成员。对于大于块大小的读取,阵列必须从每个成员驱动器检索所有块。因此,它基本上会从一个磁盘请求块 1,从下一个磁盘请求块 2,从下一个磁盘请求块 3,依此类推。

或者维基百科是这样说的

条带化的一种方法是从数据序列的开头以循环方式交错存储设备上的连续段。

因此,阵列中使用的块大小、数据的大小以及数据的访问方式都会影响读取在成员设备之间的分布方式。但数据的分布才是改变 I/O 的原因。有些应用程序在 RAID0 上可能看不到太大的改进,而有些应用程序可能会看到巨大的改进。

相关内容