【发布时间】:2016-11-17 21:44:12
【问题描述】:
我正在编写一个可以进行高速数据采集的程序。采集卡可以以高达 6.8 GB/s 的速度运行(它在 PCIe3 x8 上)。现在我正在尝试流式传输到 RAM 磁盘,以查看我可以使用 Python 实现的最大写入速度。
该卡将给我 5-10 MB 块,然后我可以在某处写入。
我写了这段代码,它将一个 10MB 的块写入一个二进制文件 500 次。我在 Windows 7 64 位上使用 Anaconda2,我使用了 Anaconda 的加速分析器。
block = 'A'*10*1024*1024
filename = "R:\\test"
f = os.open(filename, os.O_CREAT| os.O_BINARY|os.O_TRUNC|os.O_WRONLY|os.O_SEQUENTIAL)
p = profiler.Profile(signatures=False)
p.enable()
start = time.clock()
for x in range(500):
os.write(f,block)
transferTime_sec = time.clock() - start
p.disable()
p.print_stats()
print('\nwrote %f MB' % (os.stat(filename).st_size/(1024*1024)))
我在 RAM 磁盘 (R:\) 上对此进行了测试,得到以下输出:
所以我想,我在 RAM 上获得了大约 2.5 GB/s 的速度。这还不错,但距离最大 RAM 吞吐量还很远,但数字是一致的。所以低吞吐量是一个问题。
第二个问题是,当我使用 PCIe SSD 测试此代码时(我曾用另一个软件以 1090 MB/s 的顺序写入速度对其进行基准测试),它给出了可比较的数字。
这让我觉得它在缓存和/或缓冲(?),所以我只是没有测量实际的 IO。我不确定到底发生了什么,因为我对 python 还很陌生。
所以我的主要问题是如何实现最大写入速度,而另一个问题是为什么我会得到这些数字?
【问题讨论】:
-
我想知道,你为什么用
os.open()而不是open()?? -
男性确定没有进程正在拦截写入,是的,我正在看着你的 windows 防御者。
-
@ShadyAtef 对文件属性的更多控制,可能是直接 IO
-
@MostafaAbdelraouf 不,不是这样
-
我有一个建议,但我觉得会有点难。尝试在不同的操作系统上进行基准测试。使用 Windows 性能工具或其他工具(我不是这方面的专家)来跟踪您对设备和内存的写入..
标签: python performance file profiling