Python mmap

Python mmap,第1张

Python mmap

为了确定您是否获得了足够的性能,请检查缓冲区/页面缓存可用的内存(

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比缓存访问要慢得多,因此您应该期望本示例的运行速度较慢。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4936558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存