如何使zlib的gzgets运行得更快?

时间:2015-01-15 09:44:52

标签: c performance unix solaris disk

Recently, I encounter a tough question. 

我必须逐行阅读许多巨大的gz文件(20多个文件,总大小200G)。我为每个文件启动一个线程,因此总线程数为20+。 然后我选择使用gzgets函数在一个线程中解析它。在解决了总数据(200G gz)之后,它将花费20多个小时。

我需要加快gz文件的读取速度。 关键代码如下:

1 \#define BUF_4_GZ (128*1024)  
2  char * line;  
3  char * read_buf;  
4  gzFile gzfile = gzopen("*.gz", "r")  
5  setvbuf(gzfile, NULL, _IOFBF, BUF_4_GZ);  

6  while ( (line = gzgets(ifp, read_buf, 1024))) {  
7      // resolve each line  
8  }  

显然瓶颈是磁盘io。而现在我需要找到一种方法来做一些表现。 我想我可以通过调整gz uncompress算法的缓冲区来加速这个过程。所以我多次尝试将BUF_4_GZ的值从128K调整到256K和512K,但事实证明总时间从未改变过,这让我很困惑。

Q1:第5个代码 - setvbuf不能影响第6个代码吗?
Q2:你们有没有其他办法让这个过程更快? 问题3:你们有没有提出一些建议来监控solaris中的磁盘io?(iostat除外)

0 个答案:

没有答案