Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149293
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-11 15:41
个人简介

Cyber Security

文章分类

全部博文(13)

文章存档

2015年(1)

2014年(6)

2013年(6)

分类: LINUX

2013-12-01 15:40:51

思考问题:写入1MBi大小数据到文件里,1次写入1K共写1024次和1次性写入1M仅写1次的速率差异是多大?哪个更快?为什么呢?不妨测试一下:
1MBi文件,一次性写入1MBi 。注:以前全部按照IEC标准  

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. int main(int argc,char *aa[]){
  7. int fd,fd1;
  8. char buffer[1048576];
  9. fd=open(aa[1],O_RDONLY,S_IRUSR);
  10. if(fd==-1){
  11. printf("file not found.\n");
  12. return -1;
  13. }
  14. fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR);
  15. if(fd1!=-1){
  16. }
  17. ssize_t n;
  18. while(n=read(fd,buffer,1048576)){
  19. write(fd1,buffer,n);
  20. printf("Writing.....\n");
  21. }
  22. close(fd);
  23. close(fd1);
  24. }
1MBi文件,一次写入1KBi,共写1024次

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. int main(int argc,char *aa[]){
  7. int fd,fd1;
  8. char buffer[1024];
  9. fd=open(aa[1],O_RDONLY,S_IRUSR);
  10. if(fd==-1){
  11. printf("file not found.\n");
  12. return -1;
  13. }
  14. fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR);
  15. if(fd1!=-1){
  16. }
  17. ssize_t n;
  18. while(n=read(fd,buffer,1024)){
  19. write(fd1,buffer,n);
  20. printf("Writing.....\n");
  21. }
  22. close(fd);
  23. close(fd1);
  24. }


为了测试准确,第一次写入数据后,为了保证测试的准确性,需要清除了cache和buffer。echo 3 >  /proc/sys/vm/drop_caches
可以看出来一次性写入1M完成写入时间更快,为什么会有这样的结果呢?strace看一下
1次性写入1MBi

1KBi写入1024次

结论:user近乎不用时间,sys占用了大部分时间,其余时间都用在kernel层和user层的切换,sys用的时间为systemcall上,可以简单了解下Linuxkernel的架构,主要分为内核层和用户层(kernelspace和userspace),用户层的应用程序会通过调用systemcall转入内核层对数据进行最终的读写操作。

总之尽量减少系统调用的频繁使用可以减少程序的执行时间,当然不断的读写也会增加磁盘I/O的负载,所以对系统的优化要从优化程序上做起。
阅读(4701) | 评论(2) | 转发(4) |
给主人留下些什么吧!~~

CU博客助理2014-03-10 16:38:19

专家点评:本文对Linux下不同块大小的读写操作的系统耗时做了简单的实验分析,作者对其有认真思考,不错的学习笔记,条理清晰。对于Linux初学者是一篇不错的参考。
(感谢您参与“原创博文评选”获奖结果即将公布)

fengzhanhai2013-12-02 14:12:14

不错,有点意思