2012-02-09 64 views
1

阻止虛擬機性能總體上更好,因爲在同步,線程產生以及恢復被阻止的客戶機等待值時,沒有任何時間丟失。因此,如果您願意不時接受更高的延遲時間,阻止虛擬機可能是一個不錯的選擇。特別是 如果交換髮生很少,並且大多數經常訪問的數據 恰好適合您的記憶。Redis - 默認阻止虛擬機

這是Redis的默認模式(以及唯一的模式,我相信現在VM已在2.6中棄用),讓操作系統處理分頁(如果/需要時)。我的理解是正確的,即啓動/啓動時需要一些時間來獲得「熱」。在使用16GB數據集處理1GB RAM節點時,Redis會在啓動時嘗試將其全部加載到虛擬內存中,因此會立即分頁出90%,只有在使用了大量用法之後,上述說明才成立。

回答

3

Redis VM在Redis 2.4中已被棄用,並且在Redis 2.6中已被刪除。這是一個死衚衕:不要使用它。

我想你是困擾與操作系統分頁阻塞虛擬機。他們是兩個不同的東西。

當Redis虛擬機根本沒有配置(無論阻塞模式如何)時,OS分頁是Redis的默認模式。如果操作系統不適合物理內存,操作系統將交換Redis內存。事件循環可以隨時凍結。當它發生時,性能很糟糕,因爲Redis的內部數據結構都沒有爲此設計(沒有本地化,沒有分頁系統)。

Redis VM可以配置爲非阻塞模式(使用I/O線程)。當I/O完成時,事件循環未被阻止,並且Redis仍然響應。但是,當I/O堆積太多時,I/O線程將完全忙碌,最終得到響應式Redis,但無法處理任何需要I/O的查詢。

Redis VM也可以在阻塞模式下配置。在此模式下,所有I/O在主事件循環線程中同步執行。所以事件循環在I/O的情況下被凍結(例如在鍵未命中的情況下)。所有客戶都受到影響。但是,一般性能(CPU消耗和延遲)優於非阻塞模式,因爲一些線程調度/同步已保存。

實際上,OS分頁和Redis阻塞虛擬機的區別在於粒度級別。使用Redis VM時,粒度是關鍵。使用操作系統分頁,以及頁面(一個4 KB的塊可以跨越幾個不相關的鍵)。

在所有3種情況下,轉儲文件的初始負載將非常緩慢,並會在系統上產生隨機I/O峯值。正如你所指出的,大多數對象都會被加載然後換出。預熱時間會很長。

除非數據中存在極端的局部性,或者您根本不關心延遲,否則使用1 GB RAM作爲16 GB數據集的Redis虛擬機是科幻IMO。

Redis VM被淘汰的原因是有原因的。按照設計,它永遠不會像基於磁盤的數據存儲(它可以利用文件映射或直接I/O來避免雙緩衝,並使用適當的數據結構(如B樹))那樣執行。

Redis作爲內存存儲非常出色。但是如果你需要存儲比RAM更大的東西,不要使用它。其他(基於磁盤的)商店的表現會更好。