2013-02-04 27 views
4

我有巨大的氣象文件。太大適合在公羊。使用ssd和mmap改進併發文件讀取

我需要執行大量的併發隨機讀取。 因此,我認爲SSD + mmap可以提高性能。

但是,併發mmap讀取的是什麼?他們應該如何組織?

enter image description here

回答

1

是否有併發的原因(爭用數據結構和線程之間共享資源),你爲什麼會想在不同的線程獨立打開同一個文件?如果不是,那麼我看不出有這樣做的理由。通過跟蹤一堆不同的內存映射(一個用於每個線程),它們只會讓內核工作變得更加困難,它們都最終映射到相同的對象,消耗更多的文件描述符(除非擁有非常大的數量的文件),並且在多次對相同文件進行mmap映射時消耗更多的地址空間。

如果我明白,在您的情況下,文件大部分時間不打開,讀取很多,然後很少關閉,我認爲您不會在線程間發生太多爭用。因此,請爲所有線程全局打開文件。

無論您是否在線程間爭用打開文件的內務管理,都有一個重要原因,即每個進程僅映射每個文件一次,也就是說,如果您的地址備用僅爲32位。如果你處於32位模式,那麼如果你的文件很大並且你想要映射它們的重要部分,那麼地址空間是相當有限的資源。在這種情況下,你肯定需要通過不浪費地在兩個不同的線程中兩次映射相同的文件來節省地址空間。

+0

我將使用NetCDF C api和本地mmap支持。這在這裏實現:http://svn.unidata.ucar.edu/repos/netcdf/tags/netcdf-4.2.1/libsrc/mmapio.c當然,我會去64位。 – user1219721