linux 如何生成内存的镜像文件

linuhuge 2011-07-08 08:56:02
比如我想将内存中的某部分内容完全镜像到磁盘,这个怎么做啊?
我知道mmap是可以, 但mmap的可靠性如何? 有没有别的办法(包括硬件的办法)?
...全文
476 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-07-09
  • 打赏
  • 举报
回复
操作系统应该会定期写入磁盘
不仅mmap,普通的fprintf也一样,不会立即写入磁盘的,确保写入磁盘的话需要调用fsync

如果对数据的一致性比较在意,那可以调用msync/fsync
但可能牺牲效率
linuhuge 2011-07-09
  • 打赏
  • 举报
回复
再顶下 不要沉了
这种缓存和磁盘不一致 的问题大家应该都会碰到吧,有没有比较好的解决方案?
linuhuge 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

怎么个镜像法?
通过读写内存间接操作文件内容?
那就是mmap了
[/Quote]
恩 比如说吧 现在在内存中维护了一个缓存区, 接下来就会有对这块缓存区有较频繁的修改(量很大)
但如果仅仅保存在内存中机器重启之后数据就丢失 所以我想隔段时间进行内存到磁盘的备份(两次备份的时间窗口之间可以用日志啥的方式进行记录)
现在就问有没有比较好(快,稳定)的这种内存到磁盘的“映射”方式。还有就是mmap是不是需要调用msync才会强制刷进磁盘,这个系统调用的可靠性如何阿?有没有别的方式?
justkk 2011-07-09
  • 打赏
  • 举报
回复
怎么个镜像法?
通过读写内存间接操作文件内容?
那就是mmap了
linuhuge 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justkk 的回复:]

操作系统应该会定期写入磁盘
不仅mmap,普通的fprintf也一样,不会立即写入磁盘的,确保写入磁盘的话需要调用fsync

如果对数据的一致性比较在意,那可以调用msync/fsync
但可能牺牲效率
[/Quote]
恩 系统调用操作系统会有缓存 libc自己也有。主要是觉得强制刷在访问量的的情况下效率比较不好。
后来看了下redis的实现,用的是fork()出来的子进程可以维护父进程的内存镜像(copy on write),所以这个时候再把内容刷进磁盘。不过同样也有这个问题:如果这个时候崩溃就丢数据,不过它好像有replica机制进行挽救(倒是没有采用log机制)。
呵呵,大概知道如何处理了。谢谢!分都给你了。。
goodmrning 2011-07-09
  • 打赏
  • 举报
回复
学习了。。。。。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧