文章目录
- 简介
- 参数
- 常用参数列表
- 关于 direct 和 sync 的解析
- 使用示例
简介
- 测试连续 IO, 不是随机 IO, 理论上规模越大, 结果越准
- 理论上 bs 越大, 性能越高(测试: 4M 的时候最快)
参数
常用参数列表
参数 | 说明 | |
if | 输入文件 | |
of | 输出文件 | |
bs | 最佳是 4M | 设置 ibs(度的字节数) 和 obs(写的字节数) |
count | 块数, bs*count=总大小 | |
conv | fdatasync | 系统决定何时写入, data |
fsync | 系统决定何时写入, meta+data | |
flag(分为 iflag(读模式) 和 oflag(写模式)) | dsync | 每接收到一次 IO, 就写一次,data |
sync | 每接收到一次 IO, 就写一次, meta+data | |
direct | 绕过系统高速缓存, 系统决定落盘 |
关于 direct 和 sync 的解析
- direct
- direct 在
__generic_file_write_iter
函数内, 并通过 if 判断执行generic_file_direct_write
, 最终调用submit_bio
交给块设备 - 不会立刻返回, 在
do_blockdev_direct_IO
中调用dio_await_completion
, 等待全部 bio 完成后, 调用dio_complete
完成整个dio
- fsync
- sync 会比 direct 多一步刷新
- fsync 的处理在
__generic_file_write_iter
函数的封装函数里. 如果__generic_file_write_iter
返回值大于零, 即IO操作成功. 之后会进入generic_write_sync
函数内, 该函数内会判断是否 sync, 如果设置了 sync 或者dsync, 将进函数流程 - sync 是由文件系统负责, 如 ext4, 实现函数为 ext4_sync_file, 该函数会搜寻需要刷新的脏页,强制将所有的脏页最终通过 submit_bio 提交给调度器,并等待完成
- 参考链接
# 基础命令, 但是这样结果不准, 需要根据场景添加参数
# 写测试
time dd if=/dev/zero of=testfile bs=8k count=125000
# 读测试
time dd if=testfile of=testfile2 bs=8k
使用示例
- 测试硬盘和内存盘的 I/O 速度
# 磁盘
[root@dm2 test]# time dd if=/dev/zero of=a.dbf bs=8k count=125000 conv=fsync
记录了125000+0 的读入
记录了125000+0 的写出
1024000000字节(1.0 GB)已复制,33.4099 秒,30.6 MB/秒
real 0m33.412s
user 0m0.128s
sys 0m0.999s
[root@dm1 thc]# rm -rf a.dbf
[root@dm1 thc]# time dd if=/dev/zero of=a.dbf bs=8k count=125000 conv=fsync
记录了125000+0 的读入
记录了125000+0 的写出
1024000000字节(1.0 GB)已复制,9.99849 秒,102 MB/秒 # 说明这个参数会使命令从缓存存取数据
real 0m10.001s
user 0m0.121s
sys 0m1.233s
[root@dm1 thc]# time dd if=a.dbf of=b.dbf bs=8k
记录了125000+0 的读入
记录了125000+0 的写出
1024000000字节(1.0 GB)已复制,1.07546 秒,952 MB/秒
real 0m1.077s
user 0m0.128s
sys 0m0.949s
# 内存盘
[root@dm2 ramdisk]# time dd if=/dev/zero of=a.dbf bs=8k count=125000 conv=fsync
记录了125000+0 的读入
记录了125000+0 的写出
1024000000字节(1.0 GB)已复制,1.5614 秒,656 MB/秒
real 0m1.564s
user 0m0.136s
sys 0m1.407s
[root@dm2 ramdisk]# time dd if=a.dbf of=b.dbf bs=8k
记录了125000+0 的读入
记录了125000+0 的写出
1024000000字节(1.0 GB)已复制,1.01944 秒,1.0 GB/秒
real 0m1.021s
user 0m0.122s
sys 0m0.899s