聲明:這可能是一個研究問題,因爲我找不到我在找什麼,而且它很具體。用於管理共享mmapped文件的庫或工具
問題:我有一個自定義搜索應用程序,需要在每個介於0.01MB到10.0MB之間的100K和10M文件之間讀取。每個文件都包含一個可以通過mmap直接加載爲數組的數組。我正在尋找一種解決方案,在需要之前將文件預取到RAM中,如果系統內存已滿,則彈出已經處理完畢的文件。
我知道這聽起來很像操作系統內存管理和類似memcached的組合。我實際上在尋找的是類似於memcached的東西,它不返回字符串或鍵的值,而是所選數組的開始地址。此外,(這是一個不同的主題)我希望能夠管理共享內存,使得CPU內核與RAM之間的距離在NUMA機器上最短。
我的問題是:「這樣的工具/庫是否已經存在?」
您的評論正指向我正確的方向。這個問題和[其他](http://stackoverflow.com/questions/8056984/speeding-up-file-io-mmap-vs-read)之間的主要區別是在這裏文件的數量很高,但每個文件相對較小。在另一種情況下,情況正好相反。我真正需要做的是非阻塞I/O(至少從消費者的角度來看),並讓內核不要將那些尚未被消費者讀取的文件分頁出去。給定足夠的內存,我只是將所有的數組保存在內存中。 –
如果您可以預測下一秒將需要什麼文件(或其中的一部分),那麼使用'readahead'系統調用(可能在單獨的線程中)應該會有所幫助。 –
我有點擔心readahead是阻塞呼叫。此外,這個問題的主要動機是展望未來,因爲對於一個CPU內核來說,I/O模式看起來很重要,我想擴展到許多內核而不會讓它們捱餓。另一個(單獨的問題)是大多數I/O分析器針對具有一個線程的進程進行編程,而且對於多線程進程來說更糟糕。 –