2011-07-25 60 views
2

我想知道爲什麼Python的mmap()的性能隨着時間的推移而下降?我的意思是我有一個小應用程序,它可以對N個文件進行更改,如果設置很大的話(不是太大,比如1000)第一個200是惡魔速度,但之後它會變得越來越慢。看起來我應該在一段時間內釋放內存,但不知道如何,最重要的是爲什麼Python不會自動執行此操作。Python的mmap()性能隨着時間而下降

任何幫助?

- 編輯 -

這是類似的東西:

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() 
+4

我們可以看到一些代碼嗎?這可能表明GC不工作的原因。 –

+0

添加的代碼,它實際上幾乎所有的東西,在循環內我做了3個文件操作,如果語句正確。 – lihidle

+0

您是否真的看過「頂部」或任務管理器或其他平臺? Python是否佔用越來越多的內存? CPU掛鉤?或者它只是你的硬盤緩存填滿? – agf

回答

6

您的操作系統緩存在內存中的頁面mmap'd。讀取和寫入以緩存的RAM速度進行。髒頁面最終被刷新。在Linux上,性能會很好,直到你必須開始刷新頁面,這是由vm.dirty_ratio sysctl變量控制的。一旦開始將髒頁面清理到磁盤,讀取將與繁忙IO總線/設備上的寫入競爭。另一件需要考慮的事情就是你的操作系統是否有足夠的內存來緩存所有的文件(緩衝區計數器在最高輸出中)。所以我會在程序運行時觀察「vmstat 1」的輸出,並觀察緩存/拋光計數器,直到突然開始執行IO。

相關問題