文件I / O减慢了我的C循环

时间:2017-01-16 16:52:10

标签: c linux file

我有一个C程序在循环中执行“填充”,其中每次迭代都定时到某个赫兹。这个循环过去能够以大约80kh的速度运行。

然后我在循环中添加了一些文件I / O(读取/写入linux文件描述符),现在似乎我无法打破~6k循环/秒。操作本身非常便宜,所以我怀疑它是某种内核上下文切换导致一堆延迟。所以,有两个问题:

  • 如何判断是否属于这种情况?
  • 除了RT修补我的内核之外,还有什么可以做的吗?

2 个答案:

答案 0 :(得分:0)

写入tmpfile()而不是写入磁盘。看看性能是否有所改善在一个不错的实现中,它应该保存在内存中,直到它变得非常庞大。 如果这可以解决您的问题,那么它的写入延迟会降低您的速度。如果你一次性刷新整个tmp文件,你可能会看到一些改进。将缓冲区设置为巨大值将产生相同的效果。

答案 1 :(得分:0)

我将回答我自己的问题,因为有一个非常直接的解决方案,只需很少的代码修改。

如果我们执行大量文件描述符读/写操作会减慢我们的程序,我们可以考虑使用mmap()将文件描述符直接映射到内存,然后基本上将文件视为字节数组。只需确保分配足够的内存以适合您想要写的任何内容。