1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| 在使用前首先了解两个特殊设备 /dev/null 伪设备,回收站.写该文件不会产生IO /dev/zero 伪设备,会产生空字符流,对它不会产生IO
//测试磁盘的IO写速度 1.没加关于操作系统"写缓存"的参数,默认"写缓存"启作用 [root@10 ops] 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 5.97005 s, 412 MB/s
real 0m5.972s user 0m0.050s sys 0m2.464s
dd先把数据写的操作系统"写缓存",就完成了写操作.通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数,把"写缓存"中的数据刷入磁盘.因为"写缓存"起作用,你会测试出一个超级快的性能
2. 明确"写缓存"启作用,conv=sync [root@10 ops] 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 6.03335 s, 407 MB/s
real 0m6.035s user 0m0.077s sys 0m2.479s
conv=sync参数明确"写缓存"启作用,默认值就是conv=sync
3.明确"写缓存"启作用,conv=fsync [root@10 ops] 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 9.83308 s, 250 MB/s
real 0m9.835s user 0m0.058s sys 0m2.625s
在9.835s里生成了一个2.5 GB文件,IO的写速度在250 MB/s dd命令执行到最后会真正执行一次"同步(sync)"操作,这样算出来的时间才是比较符合实际使用结果的 conv=fsync 表示把文件的"数据"和"metadata"都写入磁盘(metadata包括size,访问时间st_atime & st_mtime等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作
4.明确"写缓存"启作用,conv=fdatasync [root@10 ops] 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 9.88476 s, 249 MB/s
real 0m9.887s user 0m0.062s sys 0m2.684s
conv=fdatasync表示只把文件的"数据"写入磁盘,fsync与fdatasync相差不大
5.明确"写缓存"启作用,oflag=dsync [root@10 ops] 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 371.456 s, 6.6 MB/s
real 6m11.458s user 0m0.755s sys 0m36.006s oflag=dsync加入这个参数后,每次读取8k后就要先把这8k写入磁盘,然后再读取下面一个8k,一共重复300K次.这是最慢的一种方式
//测试磁盘IO读速度 [root@10 ops] 3000000+0 records in 3000000+0 records out 24576000000 bytes (25 GB) copied, 91.6083 s, 268 MB/s
real 1m31.611s user 0m0.484s sys 0m15.326s
//测试磁盘IO读写性能 [root@10 ops] 3000000+0 records in 3000000+0 records out 24576000000 bytes (25 GB) copied, 278.723 s, 88.2 MB/s
real 4m38.726s user 0m1.039s sys 1m12.445s
[root@10 ops] 3000000+0 records in 3000000+0 records out 24576000000 bytes (25 GB) copied, 274.808 s, 89.4 MB/s
real 4m35.634s user 0m1.040s sys 1m13.122s
|