我有一个算法来执行一些文件I/O (读、写)和计算。
如果我写到磁带(而不是读),这个算法工作得很好。如果我从磁带上读(不写),表现很差。如果将磁带从方程中取出来(仅用于I/O的磁盘),那么它工作得很好。
现在,我把它归结为一个相对简单的案例,我正在试图理解它。
设置是一个单独的,20 GB的文件在磁带上。我是按顺序分块读取这个文件的。
测试算法类似于:
while (fileRemaining)
{
ReadBlock(blockSize);
Sleep(sleepTime); // this is to mimic computation time
}一些意见:
当使用8K的
我在这里如何获得良好的阅读性能?
如果你能帮我理解其他的谜团-如果你愿意帮助我理解其他的奥秘一次从磁带上读出的“最佳”量是多少?磁带驱动器发出的噪音是否与注意事项有关?
发布于 2012-05-16 23:48:59
您还没有提供驱动器正在使用的磁带媒体、驱动器或接口类型的任何细节。
目前的技术,如LTO4/5,能够以240至280 of /s的速度传送数据。性能是通过读取LTO的最佳块大小来实现的,我相信这是64 of。最大256 of的块大小不会产生明显的影响,但是读取大量的小块会有影响。读取/写入更大的块,并在程序中读取数据后将其拆分。如果数据已经以8KB块的形式出现在磁带上,那么将驱动器设置为固定块模式并读取多个8KB块。
磁带驱动器必须达到特定的运动速度才能读取数据。如果来自驱动器的数据流不够快,那么驱动器将不得不减速、停止、倒带、重新定位、恢复速度,然后再开始读取。此停止/启动将对性能产生重大影响。LTO试图弥补这一点,能够在不同的磁带速度,但有限制。
使用异步I/O可以实现进一步的速度改进,但是我不认为这对于这个应用程序是不必要的。
https://stackoverflow.com/questions/10307823
复制相似问题