一、dd命令的解释
dd命令主要是用来块拷贝一个指定大小的文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地*以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:
-
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
-
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。
-
ibs=bytes:一次读入的bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次写入的bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
-
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
-
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
-
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
-
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
-
conv=conversion:用指定的参数转换文件。
fdatasync 完成dd命令前,写文件数据到磁盘
fsync 除文件数据外,同时也写元数据
- iflag, oflag 的关键symbol:
dsync 用同步I/O操作数据
sync 除文件数据外,同时也写元数据
如果要规避掉文件系统cache,直接读写,不使用buffer cache,需做这样的设置
iflag=direct,nonblock
oflag=direct,nonblock
dd 命令三种经典使用方法:
dd if=/dev/zero of=test bs=64k count=16k 是不准确的,可能有数据存在内核缓存中,没有同步到磁盘上。对于关键数据应该加上fsync标识,防止关键数据丢失;
dd if=/dev/zero of=test bs=64k count=16k conv=fsync 较为稳妥,但是时间用时较长,他在dd结束前会写数据和文件元数据到磁盘;
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync or sync 每写一次就写一次磁盘,在实际操作中,可以听到磁盘响声,用时较长;
二、测试磁盘写吞吐量
使用dd命令对磁盘进行标准写测试。使用一下命令行读取和写入文件,记住添加oflag参数以绕过磁盘页面缓存。
dd if=/dev/zero of=here bs=1G count=1 oflag=direct
记录了1+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制,13.6518 秒,78.7 MB/秒
三、结合nc命令测试网络
Server1使用nc监听17480端口的网络I/O请求:
[root@server1 ~]# nc -v -l -n 17480 > /dev/null
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::17480
Ncat: Listening on 0.0.0.0:17480
Ncat: Connection from 192.168.0.97.
Ncat: Connection from 192.168.0.97:39156.
在Server2节点上发起网络I/O请求:
[root@server2 ~]# time dd if=/dev/zero | nc -v -n 192.168.0.99 17480
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.0.99:17480.
^C记录了34434250+0 的读入
记录了34434249+0 的写出
17630335488字节(18 GB)已复制,112.903 秒,156 MB/秒
real 1m52.906s
user 1m23.308s
sys 2m22.487s
总结:
当然,测试磁盘I/O使用fio工具更好,因为fio支持多种ioengine(rdma/libaio/librbd/libhdfs等)和指定多线程/进程并发数等,另外,测试结果显示的性能更全面(磁盘延迟clat/磁盘利用率util等)。参考:linux 磁盘IO测试工具:FIO (简要介绍iostat工具)