我想我需要一些关于 SSD、SATA、输入/输出限制等方面的高级建议。
我正在编写一个视频装置程序,其中我不断读取和写入大量数据:
对于第一个 SSD(驱动器 A),我每秒写入 50 帧(= 每秒 50 个文件),同时读取其他 50 fps(来自同一驱动器!)。从第二个 SSD(驱动器 B),我每秒读取额外的 50 帧。
问题是:瓶颈在哪里?我成功地以 25 fps 的速度运行了我的程序,但没有更快(我需要将其提高到 50 fps)。
总数据量实际上并没有那么多:每帧为 1.8 MB,因此每个流大约为 90 MB/s,总计 180 MB/s 读取加上另外 90 MB/s 写入 = 每秒 150 次读/写操作中总数据传输率为 270 MB/s。
最让我困惑的是以下内容:
- 当我从两个独立的 SSD 运行补丁时,与当我从一个 SSD 运行所有三个流而根本不使用第二个 SSD 时,我获得的性能相同。
- 如果我缩小其中一个或两个流(并将文件大小减小到 260 KB/文件,相当于每个流仅 13 MB/s),速度不会大幅提高。
- 但是,如果我将所有三个流切换为 260 KB/文件,它确实会增加(至 40-60 fps)。
这让我很疑惑到底发生了什么……是驱动器的问题吗?是 SATA 的问题吗?还是其他我可能从未听说过的东西?我该怎么办?
我使用 Macbook Pro(Retina,2013 年初,i7 2,6 GHz,16 GB RAM,OS 10.9.2),驱动器 A 是通过雷电连接的三星 840 pro 256 GB SSD,驱动器 B 是内置 512 GB Macbook SSD(Apple 内置)。
我的程序是在 MAX/MSP 中构建的,我使用任意未压缩的二进制数据格式 (.jxf)。我可以排除 CPU/GPU 负载问题。