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