2011-11-18 56 views
2

我們正在開發程序,該程序用於位於共享內存中的數據。程序對延遲的要求很高,並且處理大量的數據。爲需要延遲的程序實現快照功能

如果程序失敗,我們必須返回上一個工作狀態FAST。

一種方法是從事務日誌中讀取和處理數據,事務日誌中包含從一天開始的事務。但考慮到事務日誌的大小(數百GB),這一點並不快。

我們現在正在尋找創建可寫入磁盤的數據快照並在程序失敗時讀取速度非常快的方法。但是,快照創建不得鎖定程序執行,並且該快照中的數據必須一致。

如果我們使用本地存儲器用於保持,而不是共享存儲器中的數據,溶液將是容易的:

  1. 叉()
  2. 寫入數據到磁盤

由於副本上在linux上寫,只有被更改的數據會被複制,所以它非常快。

但是我們正在使用posix共享內存。

有沒有辦法以最快的速度和一致性來做到這一點?

回答

0

如果可以騰出一個的memcpy足夠的CPU週期()時,可以:

  1. 叉()
  2. 鎖定共享存儲器
  3. 的memcpy(shared_mem - > some_buffer)
  4. 解鎖共享內存
  5. 把數據寫到磁盤上花上你喜歡的時間
+0

現在正在共享內存大小爲15-30 GB。所以,不,memcpy會花費太多時間和內存。 –