当前位置 : 主页 > 操作系统 > centos >

Linux下磁盘读写优化的分析

来源:互联网 收集:自由互联 发布时间:2022-06-20
问题:写入1MBi大小数据到文件里, 1次写入1K共写1024次和1次性写入1M仅写1次的速率差异是多大?哪个更快?为什么呢?不妨测试一下: 1MBi文件,一次性写入1MBi #includestdio.h#includesys/t

问题:写入1MBi大小数据到文件里,1次写入1K共写1024次和1次性写入1M仅写1次的速率差异是多大?哪个更快?为什么呢?不妨测试一下:

1MBi文件,一次性写入1MBi

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc,char *aa[]){ int fd,fd1; char buffer[1048576]; fd=open(aa[1],O_RDONLY,S_IRUSR); if(fd==-1){ printf("file not found.\n"); return -1; } fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR); if(fd1!=-1){ } ssize_t n; while(n=read(fd,buffer,1048576)){ write(fd1,buffer,n); printf("Writing.....\n"); } close(fd); close(fd1); }

1MBi文件,一次写入1KBi,共写1024次

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc,char *aa[]){ int fd,fd1; char buffer[1024]; fd=open(aa[1],O_RDONLY,S_IRUSR); if(fd==-1){ printf("file not found.\n"); return -1; } fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR); if(fd1!=-1){ } ssize_t n; while(n=read(fd,buffer,1024)){ write(fd1,buffer,n); printf("Writing.....\n"); } close(fd); close(fd1); }

Linux下磁盘读写优化的分析_return

为了测试准确,第一次写入数据后,需要清除了cache和buffer。sysctl-wvm.drop_caches=3

可以看出来一次性写入1M完成写入时间更快,为什么会有这样的结果呢?strace看一下

1次性写入1MBi

Linux下磁盘读写优化的分析_Linux_02

1KBi写入1024次

Linux下磁盘读写优化的分析_磁盘读写优化_03

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

Linux下磁盘读写优化的分析_Linux_04

总之尽量减少系统调用的频繁使用可以减少程序的执行时间,当然不断的读写也会增加磁盘I/O的负载,所以对系统的优化要从优化程序上做起。

上一篇:运用Ntop监控网络流量(视频Demo)
下一篇:没有了
网友评论