Performance 如何从磁带获得良好的读取性能?

Performance 如何从磁带获得良好的读取性能?,performance,io,Performance,Io,我有一个算法,可以执行一些文件I/O(读、写)和计算 如果我写磁带(而不是读),算法工作得很好。如果我读磁带(不写),性能很差。如果将磁带从等式中去掉(仅用于I/O的磁盘),那么它工作得很好 现在,我把它归结为一个相对简单的案例,我正在努力理解 该设置是一个20 GB的磁带文件。我正在按块顺序读取此文件 测试算法类似于: while (fileRemaining) { ReadBlock(blockSize); Sleep(sleepTime); // this is to mi

我有一个算法,可以执行一些文件I/O(读、写)和计算

如果我写磁带(而不是读),算法工作得很好。如果我读磁带(不写),性能很差。如果将磁带从等式中去掉(仅用于I/O的磁盘),那么它工作得很好

现在,我把它归结为一个相对简单的案例,我正在努力理解

该设置是一个20 GB的磁带文件。我正在按块顺序读取此文件

测试算法类似于:

while (fileRemaining)
{
    ReadBlock(blockSize);
    Sleep(sleepTime); // this is to mimic computation time
}
一些意见:

  • 当使用8K的块大小和0的休眠时间时,吞吐量(数据读取/秒)良好。此外,磁带机不断发出噪音
  • 当使用8K的块大小和任何非零睡眠时间(甚至1ms)时,吞吐量会受到严重影响。数据仍会被读取,但磁带机不会经常发出噪音。它变得沉默了一会儿,偶尔有噪音
  • 当使用2M的块大小和100ms的休眠时间时,吞吐量是好的。磁带机在整个过程中都会发出噪音(尽管听上去速度较慢?)
  • Windows资源管理器能够以良好的吞吐量将文件从磁带传输到磁盘
如何在这里获得良好的阅读性能?


如果你能帮我理解其他的谜团——为什么睡眠的存在会如此显著地降低吞吐量(知道这一点可以帮助重新思考算法)?每次从磁带读取的“最佳”数量是多少?磁带机发出的噪音是否值得注意?

您尚未提供磁带机使用的磁带介质、驱动器或接口类型的任何详细信息

像LTO4/5这样的当前技术能够以大约240-280MB/s的速度传输数据。性能是通过读取LTO的最佳块大小来实现的,我相信这是64KB。块大小高达256KB不会产生显著影响,但读取大量小块会产生显著影响。读取/写入较大的数据块,并在读入数据后在程序中拆分数据。如果数据已经以8KB块的形式存在于磁带上,则将驱动器设置为固定块模式并读取多个8KB块

磁带机必须达到特定的运动速度才能读取数据。如果从驱动器传输数据的速度不够快,则驱动器必须减速、停止、倒带、重新定位、恢复到正常速度,然后再次开始读取。此停止/启动将对性能产生重大影响。LTO试图通过能够以不同的磁带速度进行读取来弥补这一缺陷,但这是有限制的


使用异步I/O可以进一步提高速度,但我不认为这对该应用程序来说是不必要的。

您没有给出驱动器使用的磁带介质、驱动器或接口类型的任何详细信息

像LTO4/5这样的当前技术能够以大约240-280MB/s的速度传输数据。性能是通过读取LTO的最佳块大小来实现的,我相信这是64KB。块大小高达256KB不会产生显著影响,但读取大量小块会产生显著影响。读取/写入较大的数据块,并在读入数据后在程序中拆分数据。如果数据已经以8KB块的形式存在于磁带上,则将驱动器设置为固定块模式并读取多个8KB块

磁带机必须达到特定的运动速度才能读取数据。如果从驱动器传输数据的速度不够快,则驱动器必须减速、停止、倒带、重新定位、恢复到正常速度,然后再次开始读取。此停止/启动将对性能产生重大影响。LTO试图通过能够以不同的磁带速度进行读取来弥补这一缺陷,但这是有限制的


使用异步I/O可以进一步提高速度,但我不认为这对该应用程序是不必要的。

您可以读取块,以便将存储在RAM中的数据量降至最低。您不必使用这么小的块大小。您的磁带机的读取速度是多少?如果是80MB/s,那么读取8KB需要0.1ms(假设没有寻道开销)。所以很明显,相应的1ms睡眠会大大减慢速度。@OliCharlesworth很抱歉我之前漏掉了数字。我相信它大约是80MB/s(这刚好超过我观察到的最好速度)。你的分析是正确的,我们应该预计一个大的减速,大约是一个量级。因为现在读取8KB需要1.1ms,也就是大约7.1Mb/秒。然而,在现实中,阅读低于150 KB/s@LemonBeagle:我不太了解磁带操作的特点,但我认为每次读取操作(加速和减速磁带或其他)都会带来很大的开销。您可以读取数据块,以便将存储在RAM中的数据量降至最低。您不必使用这么小的块大小。您的磁带机的读取速度是多少?如果是80MB/s,那么读取8KB需要0.1ms(假设没有寻道开销)。所以很明显,相应的1ms睡眠会大大减慢速度。@OliCharlesworth很抱歉我之前漏掉了数字。我相信它大约是80MB/s(这刚好超过我观察到的最好速度)。你的分析是正确的,我们应该预计一个大的减速,大约是一个量级。因为现在读取8KB需要1.1ms,也就是大约7.1Mb/秒。然而,在现实中,阅读低于150 KB/s@LemonBeagle:我不太了解磁带操作的特点,但我认为每次读取操作都会带来很大的开销(加速和减速磁带或其他)。