关于磁盘IO的总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“关于磁盘io的总结”。
磁盘IO的总结:
1.IO读写:磁盘是用来存取数据的。磁盘的存数据对应IO的写操作,磁盘的取数据对应IO的读操作。
2.随机访问(Random Acce)与连续访问(Sequential Acce):
随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要做比较大的移动动作才能重新开始读/写数据。
同理,连续访问就是两次给出的扇区地址相近,磁头就能很快的进行操作,这样的多个IO操作就是连续访问。
3.顺序IO模式(Queue Mode)/并发IO模式(BurstMode):
原理:磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。
并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。
4.IOPS,IO系统每秒所执行IO操作的次数
5.一次完整的磁盘IO操作:
当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(ActuatorArm)带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(SeekTime);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(DataTransfer),对应的时间称为传送时间(TransferTime)。完成这三个步骤之后一次IO操作也就完成了。
6.传输速度(Transfer Rate)/吞吐率(Throughput):是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。
7.IO响应时间也被称为IO延时(IOLatency),IO响应时间就是从操作系统内核发出的一个读或者写的IO命令到操作系统内核接收到IO回应的时间,注意不要和单个IO时间混淆了,单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。
8.dd命令 dd:硬拷贝命令(直接在硬盘上进行数据拷贝,没有经过内存,二进制之间的协调复制)
bs=BYTES:一次读取和写入的字节数(单元大小)
count=BLOCKS:单元数量
if=FILE:源文件
of=FILE:目标文件
测试磁盘的写入:
[root@localhost ~]# /usr/bin/time dd if=/dev/zero of=/tmp/hx bs=4k count=10240 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0577 s, 727 MB/s 0.00user 0.05system 0:00.05elapsed 96%CPU(0avgtext+0avgdata 832maxresident)k 0inputs+81920outputs(0major+241minor)pagefaults 0swaps
测试磁盘的读取:
[root@localhost ~]# /usr/bin/time dd if=/tmp/hx of=/dev/null bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.014955 s, 2.8 GB/s 0.00user 0.01system 0:00.01elapsed 86%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+0outputs(0major+240minor)pagefaults 0swaps
读写同时测试
[root@localhost ~]# /usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0742246 s, 565 MB/s 0.00user 0.08system 0:00.08elapsed 97%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+81952outputs(0major+240minor)pagefaults 0swaps 9.[root@localhost ~]# iostat-x Linux 2.6.32-573.el6.x86_64(localhost.localdomain)03/16/2016 _x86_64_(12 CPU)
avg-cpu: %user
%nice %system %iowait %steal
%idle
0.09
0.00
0.06
0.02
0.00
99.82
Device:
rrqm/s
wrqm/s
r/s
w/s
rsec/s
wsec/s avgrq-sz avgqu-sz
await svctm %util sda
8.30
68.47
7.61
2.27
363.21
565.82
94.05
0.05
5.32
0.40
0.39 各个性能指标的简单说明。rrqm/s 每秒进行merge的读操作数目。wrqm/s 每秒进行merge的写操作数目。r/s 每秒完成的读I/O设备次数。w/s 每秒完成的写I/O设备次数。rsec/s 每秒读扇区数。wsec/s 每秒写扇区数。rkB/s 每秒读K字节数。wkB/s 每秒写K字节数。avgrq-sz 平均每次设备I/O操作的数据大小(扇区)。avgqu-sz 平均I/O队列长度。await 平均每次设备I/O操作的等待时间(毫秒)。svctm 平均每次设备I/O操作的服务时间(毫秒)。%util 一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。
平均单次IO大小(IO Chunk Size)avgrq-sz
平均IO响应时间(IO Response Time)await
IOPS(IO per Second)r/s + w/s
吞吐率(Throughtput)rkB/s + wkB/s
10.fio是一个非常灵活的io测试工具,他可以通过多线程或进程模拟各种io操作。
fio分顺序读,随机读,顺序写,随机写,混合随机读写模式。参数:
filename: 指定文件(设备)的名称。可以通过冒号分割同时指定多个文件,如filename=/dev/sda:/dev/sdb。
directory: 设置filename的路径前缀。在后面的基准测试中,采用这种方式来指定设备。
name: 指定job的名字,在命令行中表示新启动一个job。
direct: bool类型,如果设置成true(1),表示不使用io buffer。
ioengine: I/O引擎,现在fio支持19种ioengine。默认值是sync同步阻塞I/O,libaio是Linux的native异步I/O。
iodepth: 如果ioengine采用异步方式,该参数表示一批提交保持的io单元数。
rw: I/O模式,随机读写,顺序读写等等。
bs: I/O block大小,默认是4k。
size: 指定job处理的文件的大小。
numjobs: 指定job的克隆数(线程)。
time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
runtime: 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成。
group_reporting: 当同时指定了numjobs了时,输出结果按组显示。
例: #顺序读
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=read-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#顺序写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=write-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#随机读
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randread-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest #随机写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randwrite-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#混合随机读写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randrw-rwmixread=70-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=100-group_reporting-name=mytest-ioscheduler=noop
补充:
上次测试的三块固态硬盘IO:
0.55到2K的小文件
[root@localhost 1]# fio-filename=/data/B/1/2-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bsrange=512-2048-size=4G-numjobs=5-group_reporting-name=test-runtime=1200 test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1 fio 2.0.7 Starting 5 threads test: Laying out IO file(s)(1 file(s)/ 4096MB)Jobs: 5(f=5): [mmmmm] [100.0% done] [8319K/2060K /s] [9870 /2498 iops] [eta 00m:00s] test:(groupid=0, jobs=5): err= 0: pid=29601
read : io=11152MB, bw=9515.1KB/s, iops=9183 , runt=1200079msec
clat(usec): min=0 , max=1000.3K, avg=468.07, stdev=1981.20
lat(usec): min=0 , max=1000.3K, avg=468.42, stdev=1981.20
clat percentiles(usec):
| 1.00th=[ 189], 5.00th=[ 211], 10.00th=[ 225], 20.00th=[ 249],| 30.00th=[ 274], 40.00th=[ 294], 50.00th=[ 318], 60.00th=[ 350],| 70.00th=[ 382], 80.00th=[ 430], 90.00th=[ 516], 95.00th=[ 596],| 99.00th=[ 844], 99.50th=[ 5088], 99.90th=[32128], 99.95th=[42240],| 99.99th=[58624]
bw(KB/s): min= 159, max= 6607, per=20.03%, avg=1905.53, stdev=328.56
write: io=2789.3MB, bw=2379.2KB/s, iops=2297 , runt=1200079msec
clat(usec): min=0 , max=1000.2K, avg=283.77, stdev=1432.42
lat(usec): min=0 , max=1000.2K, avg=284.21, stdev=1432.42
clat percentiles(usec):
| 1.00th=[
89], 5.00th=[ 110], 10.00th=[ 137], 20.00th=[ 153],| 30.00th=[ 165], 40.00th=[ 175], 50.00th=[ 189], 60.00th=[ 207],| 70.00th=[ 239], 80.00th=[ 302], 90.00th=[ 386], 95.00th=[ 458],| 99.00th=[ 660], 99.50th=[ 1976], 99.90th=[20352], 99.95th=[27520],| 99.99th=[43264]
bw(KB/s): min=
60, max= 1769, per=20.03%, avg=476.50, stdev=87.73
lat(usec): 2=0.08%, 100=0.51%, 250=29.98%, 500=59.64%, 750=8.40%
lat(usec): 1000=0.63%
lat(msec): 2=0.10%, 4=0.11%, 10=0.19%, 20=0.08%, 50=0.23%
lat(msec): 100=0.03%, 250=0.01%, 500=0.01%, 1000=0.01%, 2000=0.01%
cpu
: usr=6.13%, sys=37.70%, ctx=101478124, majf=0, minf=24056
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
iued
: total=r=11021114/w=2757348/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=11152MB, aggrb=9515KB/s, minb=9515KB/s, maxb=9515KB/s, mint=1200079msec, maxt=1200079msec
WRITE: io=2789.3MB, aggrb=2379KB/s, minb=2379KB/s, maxb=2379KB/s, mint=1200079msec, maxt=1200079msec
Disk stats(read/write):
sda: ios=11020977/2758079, merge=0/69, ticks=4004421/515149, in_queue=4514919, util=98.00%
10M的大文件
[root@localhost 1]# fio-filename=/data/B/1/10-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bs=10M-size=10G-numjobs=10
-group_reporting-name=test-runtime=1800 test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1 fio 2.0.7 Starting 10 threads test: Laying out IO file(s)(1 file(s)/ 10240MB)Jobs: 4(f=4): [_m___mm_m_] [99.0% done] [220.2M/104.9M /s] [21 /10 iops] [eta 00m:03s]]
test:(groupid=0, jobs=10): err= 0: pid=29618
read : io=81910MB, bw=270613KB/s, iops=26 , runt=309948msec
clat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
lat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
clat percentiles(msec):
| 1.00th=[ 123], 5.00th=[ 157], 10.00th=[ 200], 20.00th=[ 249],| 30.00th=[ 289], 40.00th=[ 318], 50.00th=[ 343], 60.00th=[ 363],| 70.00th=[ 383], 80.00th=[ 412], 90.00th=[ 449], 95.00th=[ 482],| 99.00th=[ 578], 99.50th=[ 766], 99.90th=[ 963], 99.95th=[ 979],| 99.99th=[ 1004]
bw(KB/s): min= 7076, max=64912, per=10.25%, avg=27750.67, stdev=7359.31
write: io=20490MB, bw=67694KB/s, iops=6 , runt=309948msec
clat(msec): min=24 , max=752 , avg=161.82, stdev=105.86
lat(msec): min=25 , max=753 , avg=162.61, stdev=105.84
clat percentiles(msec):
| 1.00th=[
27], 5.00th=[
33], 10.00th=[
34], 20.00th=[
51],| 30.00th=[
54], 40.00th=[ 103], 50.00th=[ 178], 60.00th=[ 206],| 70.00th=[ 233], 80.00th=[ 260], 90.00th=[ 297], 95.00th=[ 326],| 99.00th=[ 392], 99.50th=[ 416], 99.90th=[ 644], 99.95th=[ 725],| 99.99th=[ 750]
bw(KB/s): min= 7398, max=82447, per=29.87%, avg=20218.16, stdev=9671.17
lat(msec): 20=0.01%, 50=3.69%, 100=4.55%, 250=23.75%, 500=65.39%
lat(msec): 750=2.18%, 1000=0.42%, 2000=0.01%
cpu
: usr=0.61%, sys=6.94%, ctx=600392, majf=0, minf=12529
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
iued
: total=r=8191/w=2049/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=81910MB, aggrb=270612KB/s, minb=270612KB/s, maxb=270612KB/s, mint=309948msec, maxt=309948msec
WRITE: io=20490MB, aggrb=67694KB/s, minb=67694KB/s, maxb=67694KB/s, mint=309948msec, maxt=309948msec
Disk stats(read/write):
sda: ios=261982/65792, merge=0/96, ticks=40438645/1040942, in_queue=41479880, util=100.00%
IO实际上是计算机用语,也写作I/O,指输入/输出(Input/Output)。硬盘IO就是指对字节的读取速度,即硬盘的读写能力。这里我们只讨论服务器磁盘IO。服务器硬盘IO的性能也是服务器硬......
输入和输出IO分类1 输入 和 输出 流2 节点流 和 处理流3 字节流(byte) 和 字符流(char)输入流字节流抽象基类 InputStream读取文件的 FileInputStream缓冲流 BufferedInputStr......
IO的企业文化是什么:【企业文化】——企业定位· 四个人每个人找十个标的,各自去实验,标的领域的选取根据各自偏好和擅长。公司注册成功后去寻找一个信托平台,费用为一个点的回......
java io流学习总结一、什么是流?流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自......
刀豆文库小编为你整合推荐8篇java io流学习总结,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......