将32位整数存储到磁盘的绝对最快方法?

chr*_*irk 2 c c++ linux file-io low-latency

我有一个非常延迟敏感的例程,它按顺序生成整数,但需要在崩溃或重新启动时将最后生成的一个存储到磁盘.

目前我正在寻找文件的开头,然后写出整数,然后每次生成新的int时刷新.需要刷新,因此写入至少会击中电池供电的控制器高速缓存.

寻求是非常昂贵的,所以我考虑只是附加4个字节,如果需要恢复,那么寻找到最后并读取最后4个字节.之前的声明显然假设没有太多其他磁盘活动发生,因此写头应该理想地保留在文件的末尾.

这个数字通常不会高于10,000,000,所以40MB并不是那么糟糕.

关于如何在不牺牲完整性的情况下实现最小延迟的任何建议?

Linux 2.6+上的C或C++

Chr*_*odd 8

我认为最快/最简单的方法是将mmap/msync - mmap 1页文件存入内存并将值存储在该页面上.每次更改值时,请调用msync(2)以强制页面返回磁盘.这样,每个商店只需要一个系统调用