为延迟要求的程序实现快照功能

时间:2011-11-18 15:54:50

标签: c linux memory-management shared-memory low-latency

我们正在开发程序,该程序适用于位于共享内存中的数据。程序要求延迟并处理大量数据。

如果程序失败,我们必须返回上一个工作状态FAST。

一种方法是从事务日志中读取和处理数据,事务日志包含从一天开始的事务。但考虑到事务日志的大小(数百千兆字节),这根本不是快速的。

我们现在正在寻找创建可写入磁盘的数据快照的方法,并在程序失败时快速读取。但是快照创建不能锁定程序执行,而且快照中的数据必须一致。

如果我们使用本地内存来保存数据而不是共享内存,那么解决方案将非常简单:

  1. fork()的
  2. 将数据写入磁盘
  3. 由于linux上的copy-on-write,只会更改已更改的数据,因此速度非常快。

    但我们正在使用posix共享内存。

    有没有办法以速度和一致性来做到这一点?

1 个答案:

答案 0 :(得分:0)

如果你可以为memcpy()留出足够的CPU周期,你可以:

  1. fork()的
  2. 锁定共享内存
  3. memcpy(shared_mem - > some_buffer)
  4. 解锁共享内存
  5. 按照您喜欢的时间将数据写入磁盘