- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否保证在 linux 上使用 msync(MS_ASYNC) 刷新页面的顺序与写入页面的顺序相同?
如果视情况而定,我(完全服务器访问权限)是否有办法确保它们的顺序相同?
背景
我目前正在使用 OpenLDAP Symas MDB作为持久键/值存储并且没有 MDB_MAPASYNC
- 这导致使用 msync(MS_ASYNC)
(我查看了源代码) - 写入速度非常慢,甚至在处理数据时,单个内核会以 < 1MB/s 的速度永久等待 IO。经过分析,问题似乎是很多小的IO Ops。使用 MDB_MAPASYNC
我可以轻松达到磁盘的最大速率,但 MDB 的文档指出在这种情况下数据库可能会损坏。不幸的是,代码对我来说太复杂了/我目前没有时间逐步完成整个代码库以找出为什么会这样,而且我不需要 MDB 提供的许多功能(交易, cursors, ACID compliance), 所以我正在考虑编写我自己的由 mmap 支持的 KV 存储, 使用 msync(MS_ASYNC)
并确保以一种未刷新的页面只会丢失的方式编写最后接触的数据,并且不会损坏数据库或丢失任何其他数据。
但为此我需要我的问题的答案,不幸的是我完全无法通过谷歌搜索或浏览 linux 邮件列表找到这个答案(我发现了一些关于 msync 补丁的邮件,但没有别的)
请注意,我查看了数十个其他可用的持久性 KV 存储,但无法找到更适合我的(快速写入、易于使用、嵌入式(因此没有 http 服务等) ,确定性的速度(所以没有垃圾收集或像 leveldb 那样随机运行压缩),合理的空间要求(所以没有仅附加的数据库),可变 key 长度,二进制 key 和数据),但如果你知道一个可以帮助我的,我也会非常感激。
最佳答案
msync(MS_ASYNC)
不保证存储的顺序,因为在后台运行的 IO 电梯算法试图通过合并和排序写入来最大化设备的吞吐量来最大化效率.
关于c linux msync(MS_ASYNC) 刷新顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302997/
我想使用 POSIX 共享内存,我的问题是关于调用 mmap(MAP_SHARED)msync() 和 munmap() 的用法. 在不使用 msync() 的情况下,对一个进程的共享内存段所做的更改
我刚刚学习 msync 的使用,但是我遇到了问题段错误。当我将 MAPSTEP 更改为较小的数字时,错误就消失了。这段代码有什么问题? #define MAPSTEP 1 * 4096 main(vo
当使用mmap/msync/munmap时,读/写是原子的吗? (假设磁盘将在断电时完成所有挂起的写入) 最佳答案 涉及多个页面或多个磁盘扇区的操作从来都不是精确的原子操作。 调查两个特定事物之间的一
我正在编写一个简单的 C 程序来反转文件中的字节(仅用于学习目的)。我正在打开我的文件,将其映射到内存中并反转字节顺序。所以第一个变成最后一个,最后一个变成第一个等等。 在内存中一切正常(用 gdb
我在 Linux 中使用 POSIX 函数 mmap()。但是当我执行 msync() 时,它会将缓存缓冲区完全写入文件,还是会以某种方式在某处记录哪些页面已更改,哪些页面未更改,并且写入文件仅更改
我正在对映射文件进行许多小的随机写入。我想确保一致性,因此有时会使用 msync,但我不想跟踪我所做的每一个小写入。在当前的 Linux 内核实现中,对整个文件使用 msync 是否会造成性能损失?例
Windows 中的 msync [unix sys call] 等价物是什么?我正在寻找 C、C++ 空间中的 MSDN api。有关 msync 的更多信息,请访问 http://opengrou
已阅读 manual msync的,我认为MS_INVALIDATE的确切含义如下: 假设有p1、p2、p3三个进程。 p1 和 p2 都使用 mmap 和 MAP_SHARED 同时读写文件 /tm
已阅读 manual msync的,我认为MS_INVALIDATE的确切含义如下: 假设有p1、p2、p3三个进程。 p1 和 p2 都使用 mmap 和 MAP_SHARED 同时读写文件 /tm
我在使用msync时遇到一个问题。非常感谢您的帮助! 简而言之,我映射文件A,并修改它和msync,但st_mtime没有改变。即使munmap文件A并退出进程,st_mtime也不变。 以下是代码。
我有两个上下文,即 process1 和 process2 共享相同的映射区域,process1 大多数时候将数据同步到文件,而 process2 只在系统重新启动之前同步一次以确保所有数据都已同步。
是否保证在 linux 上使用 msync(MS_ASYNC) 刷新页面的顺序与写入页面的顺序相同? 如果视情况而定,我(完全服务器访问权限)是否有办法确保它们的顺序相同? 背景 我目前正在使用 Op
如果我在内存映射区域上使用 MS_ASYNC 调用 msync,同步过程将被异步处理。 但是,如果我立即对该区域调用 munmap,我是否可以假设 msync 将安全执行?或者我必须在 munmap
我在 Linux 2.6 上的应用程序中使用 msync 以确保在发生崩溃时的一致性。我需要彻底测试我对 msync 的使用,但实现似乎正在为我刷新所有相关页面。有没有一种方法可以防止将 mmap 页
我想使用 mmap 在 Linux 下运行的 C 程序中实现程序状态某些部分的持久化,方法是使用带有 MAP_SHARED 标志集的 mmap() 将固定大小的结构与众所周知的文件名相关联。出于性能原
据我所知,在大多数日志模式为“data=ordered”的ext3系统上,fsync不仅会同步fd指定的文件,还会同步文件系统上的所有文件,而且这个问题还没有被修复内核 2.6.30 之前 我有一个问
我正在使用 mmap 打开/dev/mem 以读/写 UART 寄存器。它运作良好,但我的问题是:写入后,是否真的需要带有 MS_SYNcflags的 msync 系统调用? 根据我的理解,/dev/
下午好,我们正在为 Centos Linux Release x86_32 和 Microsoft Windows 构建原型(prototype)去重器。原型(prototype)的一部分是使用 18
我通过 C API 使用 RocksDB。 我有一个测试程序,它打开数据库,执行 1,000 次写入(收集启动写入和回调之间的计时数据),执行 1,000 次读取,然后关闭。 这有效。平均写入时间约为
我是一名优秀的程序员,十分优秀!