linux文件缓存小文件在哪个文件夹里,确定在Linux中读取文件的最佳缓冲区大小...

我正在编写一个从stdin读取并写入stdout的C程序。但它会缓冲数据,以便仅在读取特定数量的字节后才执行写操作(= SIZE)

#include

#include

#define SIZE 100

int main()

{

char buf[SIZE];

int n=0;

//printf("Block size = %d\n", BUFSIZ);

while( ( n = read(0, buf, sizeof(buf)) ) > 0 )

write(1, buf, n);

exit(0);

}

Iam在Oracle Virtual Box(4GB RAM,2个内核)上托管的Ubuntu 18.04上运行该程序,并测试该程序的缓冲区大小是否不同。我已经将标准输入重定向到来自文件(包含动态创建的随机数)的文件,并将标准输出重定向到/ dev / null。这是用于运行测试的shell脚本:

#!/bin/bash

# $1 - step size  (bytes)

# $2 - start size (bytes)

# $3 - stop size (bytes)

echo "Changing buffer size from $2 to $3 in steps of $1, and measuring time for copying."

buff_size=$2

echo "Test Data" >testData

echo "Step Size:(doubles from previous size) Start Size:$2 Stop Size:$3" >>testData

while [ $buff_size -le $3 ]

do

echo "" >>testData

echo -n "$buff_size," >>testData

gcc -DSIZE=$buff_size copy.c    # Compile the program for cat, with new buffer size

dd bs=1000 count=1000000 testFile        #Create testFile with random data of 1GB

(/usr/bin/time -f "\t%U, \t%S," ./a.out /dev/null) 2>>testData

buff_size=$(($buff_size * 2))

rm -f a.out

rm -f testFile

done

我正在测量执行程序并将其制成表格所需的时间。测试运行将产生以下数据:

Test Data

Step Size:(doubles from previous size) Start Size:1 Stop Size:524288

1,      5.94,   17.81,

2,      5.53,   18.37,

4,      5.35,   18.37,

8,      5.58,   18.78,

16,     5.45,   18.96,

32,     5.96,   19.81,

64,     5.60,   18.64,

128,    5.62,   17.94,

256,    5.37,   18.33,

512,    5.70,   18.45,

1024,   5.43,   17.45,

2048,   5.22,   17.95,

4096,   5.57,   18.14,

8192,   5.88,   17.39,

16384,  5.39,   18.64,

由于我们使用不同的块大小,因此我看不到用户+系统时间有任何重大变化。但是从理论上讲,随着块大小变小,对于相同的文件大小会生成许多系统调用,并且执行起来将花费更多时间。我在理查德·史蒂文斯(Richard Stevens)的《 Unix环境中的高级编程》一书中看到了类似测试的测试结果,该结果表明,如果复制中使用的缓冲区大小接近块大小,则用户+系统时间将大大减少。 ext4分区上的块大小为4096字节)

为什么我无法重现这些结果?我在这些测试中是否缺少一些因素?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值