为了确定您是否获得了足够的性能,请检查缓冲区/页面缓存可用的内存(
free在Linux中),I / O统计信息-
读取次数,读取大小和持续时间(
iostat与硬件规格进行比较;以及您的进程的CPU利用率。
[edit]假设您从本地连接的SSD读取(高速缓存中没有所需的数据):
- 在单线程中进行读取时,您应该希望批量读取50,000次要花费7秒钟以上(50000 * 0.000150)。可能更长,因为对mmap文件的5万次访问将触发更多或更大的读取,因为您的访问未按页面对齐-正如我在另一次问答中所建议的那样,我将使用
seek
/read
代替(并且open
该文件buffering=0
应避免不必要的读取用于Python缓冲的I / O)。 - 随着更多线程/进程同时读取,您可以使SSD吞吐量达到饱和(它可以完成4KB读取/秒的速度-可以在5,000到1,000,000之间的任何地方),然后单个读取将变得更慢。
[/编辑]
第一个示例仅访问3 * 100KB的文件数据,因此,由于您拥有的缓存数量远远超过了缓存的可用容量,所有300KB的内容很快就会进入缓存,因此您将看不到I /
O,并且您的python进程将受CPU限制。
我有99.99%的把握,如果您测试从每个文件的最后100KB读取数据,它的性能将与第一个示例一样好-这与数据的位置无关,而与访问的数据大小有关。
第二个示例访问9GB中的随机部分,因此,仅当您有足够的可用RAM来缓存所有9GB内存时,并且仅在将文件预加载到缓存中之后,才能使测试用例以零I运行,您可以希望看到类似的性能。
/ O。
在实际情况下,文件不会完全位于缓存中-因此您会看到许多I / O请求以及python的CPU利用率低得多。由于I /
O比缓存访问要慢得多,因此您应该期望本示例的运行速度较慢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)