一段时间后,我终于找到了一个解决方案,它给了我难以置信的加速(比如 10 倍左右)。
总之:ramdisk(在 Linux(Ubuntu 和 CentOs)上测试)。
回顾:
由于这个问题有一定的普遍性,让我以更完整的方式再次陈述它。
假设我有许多存储在磁盘上的小文件(txt、pict、数百万的顺序),我想操作它们(例如通过 matlab)。
当它们存储在磁盘上时处理这些文件(即加载它们/在网络上传输它们)非常慢,因为磁盘访问大多是随机的。
因此,压缩档案中的文件(例如固定大小)在我看来是保持磁盘访问顺序的好方法。
问题:
如果操作.tar
需要对磁盘进行初步提取(就像 matlab 的情况一样UNTAR
),则顺序磁盘访问所提供的加速主要是损失。
解决方法:
可以将 tarball(只要它相当小)提取到内存中,然后从那里进行处理。正如我在问题中所说,在 matlab 中,.tar
内存中的操作是不可能的。
可以做的(等效地)是untarring
ramdisk。
在 linux(例如 Ubuntu)中,默认的 ramdisk 驱动器安装在/run/shm
( tempfs
) 中。文件可以在那里通过 matlab 解压,然后访问速度极快。
换句话说,一个可能的工作周期是:
untar
到/run/shm/mytemp
- 在内存中操作
- 可能
tar
再次输出到磁盘
这使我可以将处理的缩放时间从8hrs
到40min
满 CPU 负载。