man 2 fsync知fsync会真正把文件的数据写回磁盘,
但是在3.2的kernal上测试发现fsync最好集中一次做掉,
可能fsync执行过程不会判断每个块是否正在修改,都去刷盘。(有待确认)
const int SIZE = 1 << 24; char buf[SIZE]; void test(int size) { int fd = open("txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU); int count = SIZE / size; for (int i = 0; i < count; ++i) { write(fd, buf, size); fsync(fd); } //fsync(fd); close(fd); }
[size] time consume:xxxms
此时测得
[131072] time consume: 5531ms
[262144] time consume: 2718ms
[524288] time consume: 1464ms
[1048576] time consume: 926ms
[2097152] time consume: 628ms
[4194304] time consume: 404ms
[8388608] time consume: 305ms
[16777216] time consume: 256ms
16777216 = 2^24
但是如果用下面的fsync发现
[131072] time consume: 331ms
[262144] time consume: 264ms
[524288] time consume: 239ms
[1048576] time consume: 264ms
[2097152] time consume: 239ms
[4194304] time consume: 264ms
[8388608] time consume: 239ms
[16777216] time consume: 263ms
还是mmap给力
....
[64] time consume: 41ms
[128] time consume: 42ms
[256] time consume: 41ms
[512] time consume: 41ms
[1024] time consume: 41ms
[2048] time consume: 41ms
[4096] time consume: 33ms
[8192] time consume: 33ms
[16384] time consume: 33ms
[32768] time consume: 33ms
[65536] time consume: 41ms
[131072] time consume: 42ms
[262144] time consume: 41ms
[524288] time consume: 41ms
[1048576] time consume: 50ms
[2097152] time consume: 74ms
[4194304] time consume: 107ms
[8388608] time consume: 141ms
struct node { int fd_, size_; node () { } node (int fd, int size) { fd_ = fd; size_ = size; } }; void test_prefetch(node t) { char *p = (char*)mmap(NULL, t.size_, PROT_WRITE, MAP_SHARED, t.fd_, 0); if (p == MAP_FAILED) { perror("mmap"); exit(1); } memcpy(p, buf, t.size_); msync(p, t.size_, MS_SYNC); munmap(p, t.size_); }
前面很多size虽然不一样,但是写入磁盘的时间却是一样的,说明磁盘的块特性,
fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xe0940810
相关推荐
linux下图形界面测试磁盘IO性能的源码,直接编译即可运行
bonnie++ linux测试磁盘IO性能的工具
详解linux下使用IOMETER测试磁盘IO性能.docx详解linux下使用IOMETER测试磁盘IO性能.docx
详解linux下使用IOMETER测试磁盘IO性能.doc
详细讲解linux下使用IOMETER测试磁盘IO性能.doc
详解linux下使用IOMETER测试磁盘IO性能.pdf
所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!Linux系统是一个免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多...
关于linux系统文件/dev/null和/dev/zero文件的详解和/dev/null、/dev/zero文件误删后的修复方法以及服务器磁盘IO测速详解,和一些常见/dev/null /dev/zero文件的用途用法示例说明
解压到linux系统后,shell界面运行以下命令 rpm -ivh --force --nodeps $cur_dir/libibverbs-1.1.8-3.el6.x86_64.rpm rpm -ivh --force --nodeps $cur_dir/fio-2.1.7-1.el6.rf.x86_64.rpm libibverbs-1.1.8-3.el6....
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策. 下面是两种测试方法: (1)使用hdparm...
stress是一个linux的压力测试工具,主要用来模拟系统负载较高时的场景,用于对系统的CPU、IO、内存、负载、磁盘等进行压力测试 1、解压stress-1.0.4.tar.gz tar -zxvf /stress-1.0.4.tar.gz 2、切换到解压的...
Linux Source Monitor(CPU、Mem、IO、Net) (linux 系统资源监控库,监控进程占用的CPU、内存、磁盘IO、网络IO)所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一...
linuxI/O调度器详解 及 每种调度器的读写测试
iometer是由intel开发的一个跨平台的磁盘、网络性能分析工具。本压缩包包括使用文档、windows环境下的安装包、linux环境下的安装包和源代码。
磁盘延迟跟踪跟踪所有IO延迟并启用以下功能: 查看所有设备的所有IO,并查看其CDB,检测缓冲区和延迟 在后台监视以上内容,并且仅在发生错误时转储(超时,检测键) 所有这些目的是为了调试与IO相关的罕见问题,并...
如何在Linux中监视IO系统性能,dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具,但是因为dd命令支持*nix平台的一些特殊设备,因此我们可以利用dd命令的这个特性来简单的测试磁盘的性能。dd命令先说...