2011-08-10 45 views
2

我在Linux 64位(Redhat Enterprise)中有一個進程,它將100萬條記錄註冊到內存中,每條記錄爲4KB,因此總內存消耗約爲4千兆字節。在Linux中交換內存速度

我的電腦有2GB的RAM和3GB的交換內存。所以顯然部分數據將被放入交換內存。問題是我不知道爲什麼遍歷所有這些記錄真的需要很長的時間。我有一個循環遍歷每個記錄並做一些東西的功能。它可以和大約500,000條記錄一起工作,該功能只需要幾分鐘即可完成。但是,如果記錄數量增加一倍,即1,000,000條記錄,則需要數小時才能完成相同的功能。我在Linux中使用了top命令來檢查CPU負載,並且發現它大約90%(等待I/O的時間)。我想這可能會導致問題,但真的不知道爲什麼會發生。

我非常感謝你的任何有用的想法。

+4

您的問題唯一的實際答案是購買更多的RAM。 RAM現在很便宜。 –

+0

迭代時是否修改記錄? –

+0

@Maxim不,我只是讀它並計算一些東西 – longbkit

回答

3

有兩種選擇:

  1. 這個過程是在連續的記錄。比起地球上最愚蠢的事情,把它們全部推向記憶。
    1. 如果您可以修復此過程,請將其修復爲一次只加載一次。
    2. 如果你不能修復這個過程,你將不得不購買更多的內存。
  2. 該進程以隨機順序或多次(除此之外無法執行)對記錄進行處理。那麼,你將不得不購買更多的內存。
+0

是的,我的系統將性能放在首要關注的位置,所以現在我清楚我應該購買更多的RAM。我只是讓我的朋友幫忙在6 GB RAM上運行它。它工作得很好:) – longbkit

3

交換區域是磁盤。磁盤帶寬比內存帶寬低兩個或三個數量級。

1

如果你想有效地使用你的交換空間,你應該確保你在連續的內存塊中順序遍歷你的數據。即幾兆字節的塊。這樣,當一個新塊從交換空間加載到內存中時,該塊將包含接下來的幾條記錄。

+0

謝謝。我會去添加更多的內存,因爲速度在我的系統中是第一優先 – longbkit

1

聽起來像高速緩存或交換抖動正在發生。檢查vmstat進行驗證。如果您只加載儘可能多的數據,您可以修復交換抖動,您可以裝入內存,處理它們,加載另一個塊等等。這樣你就不必施加處理順序(隨機或順序無關緊要)。或者,我們必須對您的算法/程序架構有更多的細節進行評論。

1

交換內存的速度取決於交換所在的底層硬件的速度。

通常在操作系統中,Windows將其稱爲pagefile.sys,Linux將其稱爲交換分區,swap的硬件是系統中的硬盤驅動器之一,因此它的速度要慢幾個數量級比RAM。

+0

感謝您的意見。 – longbkit

0

在購買更多RAM之前,您可以嘗試將部分內存用作壓縮交換。我聽說compcache,但我沒有使用它自己。這個想法是這樣的:

  • 如果你把在RAM中的數據可以被壓縮(可以說3比1),
  • 分配你的2 GB內存1 GB至$存儲器中*交換,
  • 然後您有一個4 GB的loo延遲RAM。

我很想知道它是否可以提高記錄數量,而不會顛簸。