我正在编写一个需要非常快速地写入磁盘的应用程序。我已经达到了写入磁盘的性能目标,这很好。
然而,我注意到快速写入磁盘会使用大量的CPU时间:一个核心被占满,另一个核心达到80%,另外两个核心则是10-20%。因此,我听说O_DIRECT可以通过避免所有那些进入内核空间的拷贝以及拷贝到磁盘来减少CPU消耗。
我运行了一个小测试程序,证实了这一点 - CPU使用率降低到了一个核心的50% - 更好了。
但是,当我进行正常写操作时,我从未获得过完全相同的吞吐量,为了使其快速,我必须使用一个真的非常大的记录大小(大约130MB!)
所以,问题是:
- 除了O_DIRECT之外,是否有更好的方法可以降低写入时的CPU使用率? 或者
- 如何获得与内核获得的类似吞吐量?
我的环境是Linux,我正在使用RAID 50,并且我能够缓冲写入,直到达到一些最佳记录大小。每次只有一个写入者。