我正在編寫一個高性能的服務器應用程序(在Linux上),我試圖獲得一個快速的關鍵路徑。在操作過程中,我擔心內存分頁以及將內存交換到磁盤(毫秒級的延遲)。如果我剩下很多RAM,是否會發生內存分頁?
我的問題是,如果我有很多的服務器內存(比如16GB),我的內存利用率保持在6-10GB左右,我知道在同一個盒子上沒有其他進程。我可以保證在應用程序啓動並保溫後不會丟失頁面。
我正在編寫一個高性能的服務器應用程序(在Linux上),我試圖獲得一個快速的關鍵路徑。在操作過程中,我擔心內存分頁以及將內存交換到磁盤(毫秒級的延遲)。如果我剩下很多RAM,是否會發生內存分頁?
我的問題是,如果我有很多的服務器內存(比如16GB),我的內存利用率保持在6-10GB左右,我知道在同一個盒子上沒有其他進程。我可以保證在應用程序啓動並保溫後不會丟失頁面。
這並不能保證。 Linux的默認行爲是有時使用RAM來緩存文件,這可以提高某些工作流程的性能。這意味着即使內存未被全部使用,有時內存頁也會被換出。
您可以使用mlock/mlockall將進程的頁面鎖定在內存中。有關更多信息,請參閱man 2 mlock
。
啊,但我原來的問題是Linux仍然會交換,即使我有內存剩下嗎? –
在我的編輯中回答 –
我不瞭解Linux,但我知道Windows將使用RAM作爲磁盤緩存,並且可能會爲其分配程序內存。 –
看看這個stackoverflow發佈。 http://stackoverflow.com/questions/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory它描述瞭如何將進程鎖定到內存中。 –
作爲一個想法。你可以編寫一個簡單的測試程序,在其中分配這樣大小的內存,並定期「觸摸」(使用)這個內存。長時間運行此測試程序,然後運行'vmstat'並監視''po'列(頁面調出到調頁空間)。所以你可以知道你的盒子上有多少「頁面輸出」。 –