Python的mmap()性能随着时间的推移而下降

时间:2011-07-25 14:57:14

标签: python performance memory mmap

我想知道为什么Python的 mmap()性能会随着时间而下降?我的意思是我有一个小应用程序可以对N个文件进行更改,如果设置为大(不是太大,比如说1000)首先200是恶魔速度但是之后它变得越来越慢。看起来我应该偶尔释放一下内存但不知道为什么Python不会自动执行此操作。

任何帮助?

- 编辑 -

就是这样:

def function(filename, N):
   fd = open(filename, 'rb+')
   size = os.path.getsize(filename)
   mapped = mmap(fd.fileno(), size)

   for i in range(N):
      some_operations_on_mmaped_block()

   mapped.close()

1 个答案:

答案 0 :(得分:6)

您的操作系统将mmap的页面缓存在RAM中。读取和写入从缓存中以RAM速度进行。脏页最终被刷新。在Linux上,在你必须开始刷新页面之前,性能会很好,这是由vm.dirty_ratio sysctl变量控制的。一旦开始将脏页刷新到磁盘,读取将与繁忙的IO总线/设备上的写入冲突。另一件需要考虑的事情就是操作系统是否有足够的RAM来缓存所有文件(顶部输出中的缓冲区计数器)。所以我会在你的程序运行时观察“vmstat 1”的输出并观察缓存/缓冲计数器,直到你突然开始做IO。