c实现的文件copy缓冲区大小问题

超级呆子 发布于 2014/08/25 16:08
阅读 785
收藏 0


一段copy文件的c代码,主要测试一下缓冲区大小对性能的影响

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

#define BUFFSIZE 4096
int main(int argc, char *argv[]) {

        int r_fd;
        if( (r_fd=open(argv[1],O_RDONLY)) < 0 ) {
                printf("open error\r\n");
        }
        int w_fd;
        if( (w_fd=creat(argv[2],0755)) < 0 ) {
                printf("create error\r\n");
        }

        int num;
        char buf[BUFFSIZE];
        while( (num=read(r_fd, buf, BUFFSIZE)) > 0) {
                if( write(w_fd, buf, num) != num ) {
                        printf("write error\r\n");
                }
        }
        if( num < 0 ) {
                printf("read error\r\n");
        }
        return 0;
}



这里缓冲区从512字节,1024,2048,一直到64435字节,最后还是测试了8M大小缓冲区,结果如下:



512buf
real    0m3.269s
user    0m0.077s
sys     0m2.523s



1024 buf
real    0m1.793s
user    0m0.039s
sys     0m1.723s


2048 buf
real    0m1.682s
user    0m0.015s
sys     0m1.214s


4096 buf
real    0m2.410s
user    0m0.017s
sys     0m2.184s



8192 buf
real    0m5.404s
user    0m0.009s
sys     0m1.218s



10384 buf
real    0m5.433s
user    0m0.013s
sys     0m1.175s


32768 buf
real    0m5.396s
user    0m0.005s
sys     0m1.188s


65535 buf
real    0m5.383s
user    0m0.004s
sys     0m1.205s


8M buf
real    0m0.878s
user    0m0.000s
sys     0m0.876s


发现8M是最快的,然后1024和2048字节也比较快,但是4096再往上却变慢了,这是怎么回事呢?

这个缓冲区有什么设置规则吗,如何能达到一个最佳的值?



加载中
0
还没死
《apue》上有这个测试,大概是说文件系统对数据进行预取,缓冲区过了某个长度预取就没什么作用了
返回顶部
顶部