ale*_*lex 11 io perl performance mmap
我们需要读取和计算不同类型的消息/在10 GB文本文件上运行一些统计信息,例如FIX引擎日志.我们使用Linux,32位,4位CPU,英特尔,在Perl中编码,但语言并不重要.
我在Tim Bray的WideFinder项目中找到了一些有趣的提示 .但是,我们发现使用内存映射本质上受到32位架构的限制.
我们尝试使用多个进程,如果我们使用4个CPU上的4个进程并行处理文件,这似乎更快.添加多线程会降低速度,这可能是因为上下文切换的成本.我们尝试更改线程池的大小,但这仍然比简单的多进程版本慢.
内存映射部分不是很稳定,有时在2 GB文件上需要80秒,有时需要7秒,可能来自页面错误或与虚拟内存使用相关的内容.无论如何,Mmap在32位架构上无法扩展到4 GB以上.
我们尝试了Perl的IPC :: Mmap和Sys :: Mmap.看看Map-Reduce也是如此,但问题实际上是I/O绑定,处理本身就足够快了.
所以我们决定尝试通过调整缓冲大小,类型等来优化基本I/O.
任何知道现有项目的人都可以在任何语言/平台上有效地解决这个问题,指向有用的链接或建议方向吗?
| 归档时间: |
|
| 查看次数: |
7196 次 |
| 最近记录: |