● 本文來討論一下兩者具體的差別以及相應的內核調用

二、環境準備

組件 版本

OS
Ubuntu 16.04.4 LTS

fio
2.2.10

三、fio介紹

通過fio測試,能夠反映在讀寫中的狀態,我們需要重點關注fio的輸出報告中的幾個關鍵指標:
slat :是指從 I/O 提交到實際執行 I/O 的時長(Submission latency)
clat :是指從 I/O 提交到 I/O 完成的時長(Completion latency)
lat :指的是從 fio 創建 I/O 到 I/O 完成的總時長
bw :吞吐量
iops :每秒 I/O 的次數

四、同步寫測試

(1)同步隨機寫

主要采用fio作為測試工具,為了能夠看到系統調用,使用strace工具,命令看起來是這樣:

先來測試一個隨機寫

strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \\\\
-direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db

提取關鍵信息

root@wilson-ubuntu:~# strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \\\\
> -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.2.10
Starting 1 process
...
randwrite: (groupid=0, jobs=1): err= 0: pid=26882: Wed Aug 14 10:39:02 2019
 write: io=1024.0MB, bw=52526KB/s, iops=13131, runt= 19963msec
 clat (usec): min=42, max=18620, avg=56.15, stdev=164.79
  lat (usec): min=42, max=18620, avg=56.39, stdev=164.79
...
 bw (KB /s): min=50648, max=55208, per=99.96%, avg=52506.03, stdev=1055.83
...

Run status group 0 (all jobs):
 WRITE: io=1024.0MB, aggrb=52525KB/s, minb=52525KB/s, maxb=52525KB/s, mint=19963msec, maxt=19963msec

Disk stats (read/write):
...
 sda: ios=0/262177, merge=0/25, ticks=0/7500, in_queue=7476, util=36.05%

列出了我們需要重點關注的信息:

 (1)clat ,平均時長56ms左右

 (2)lat ,平均時長56ms左右

 (3)bw ,吞吐量,大概在52M左右

再來看內核調用信息:

root@wilson-ubuntu:~# more /tmp/randwrite.log
...
26882 10:38:41.919904 lseek(3, 665198592, SEEK_SET) = 665198592
26882 10:38:41.919920 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\200\\\\36\\\\31\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.919969 lseek(3, 4313088, SEEK_SET) = 4313088
26882 10:38:41.919985 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\200\\\\36\\\\31\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920032 lseek(3, 455880704, SEEK_SET) = 455880704
26882 10:38:41.920048 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\200\\\\36\\\\31\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920096 lseek(3, 338862080, SEEK_SET) = 338862080
26882 10:38:41.920112 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920161 lseek(3, 739086336, SEEK_SET) = 739086336
26882 10:38:41.920177 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920229 lseek(3, 848175104, SEEK_SET) = 848175104
26882 10:38:41.920245 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920296 lseek(3, 1060147200, SEEK_SET) = 1060147200
26882 10:38:41.920312 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920362 lseek(3, 863690752, SEEK_SET) = 863690752
26882 10:38:41.920377 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920428 lseek(3, 279457792, SEEK_SET) = 279457792
26882 10:38:41.920444 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920492 lseek(3, 271794176, SEEK_SET) = 271794176
26882 10:38:41.920508 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
26882 10:38:41.920558 lseek(3, 1067864064, SEEK_SET) = 1067864064
26882 10:38:41.920573 write(3, \\\\220\\\\240@\\\\6\\\\371\\\\341\\\\277>\\\\0\\\\2402\\\\24\\\\0\\\\0\\\\0\\\\0\\\\202\\\\2\\\\7\\\\320\\\\343\\\\6H\\\\26P\\\\340\\\\277\\\\370\\\\330\\\\30e\\\\30..., 4096) = 4096
...

隨機讀每一次寫入之前都要通過lseek去定位當前的文件偏移量

同步順序寫

用剛才的方法來測試順序寫

root@wilson-ubuntu:~# strace -f -tt -o /tmp/write.log -D fio -name=write -rw=write \\\\
-direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db
write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/70432KB/0KB /s] [0/17.7K/0 iops] [eta 00m:00s]
write: (groupid=0, jobs=1): err= 0: pid=27005: Wed Aug 14 10:53:02 2019
 write: io=1024.0MB, bw=70238KB/s, iops=17559, runt= 14929msec
 clat (usec): min=43, max=7464, avg=55.95, stdev=56.24
  lat (usec): min=43, max=7465, avg=56.15, stdev=56.25
...
 bw (KB /s): min=67304, max=72008, per=99.98%, avg=70225.38, stdev=1266.88
...

Run status group 0 (all jobs):
 WRITE: io=1024.0MB, aggrb=70237KB/s, minb=70237KB/s, maxb=70237KB/s, mint=14929msec, maxt=14929msec

Disk stats (read/write):
...
 sda: ios=0/262162, merge=0/10, ticks=0/6948, in_queue=6932, util=46.49%

可以看到:

 吞吐量提升至70M左右

再來看一下內核調用:

root@wilson-ubuntu:~# more /tmp/write.log
...
27046 10:54:28.194508 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\360\\\\t\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194568 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194627 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194687 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194747 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194807 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194868 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194928 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.194988 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195049 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195110 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195197 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195262 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195330 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195426 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195497 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195567 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195637 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195704 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195757 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195807 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195859 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195910 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.195961 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196012 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196062 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\220\\\\24\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196112 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196162 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196213 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196265 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196314 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196363 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196414 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196472 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196524 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
27046 10:54:28.196573 write(3, \\\\0\\\\0\\\\23\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\300\\\\16\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 \\\\26\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\320\\\\17\\\\0\\\\0\\\\0\\\\0\\\\0..., 4096) = 4096
...

由于順序讀,不需要反復定位文件偏移量,所以能夠專注于寫操作

五、slat指標

從上面的測試,我們在fio的測試報告中,并沒有發現slat的身影,那是由于上述都是同步操作,對同步 I/O 來說,由于 I/O 提交和 I/O 完成是一個動作,所以 slat 實際上就是 I/O 完成的時間

異步順序寫,將同步順序寫的命令添加-ioengine=libaio:

root@wilson-ubuntu:~# fio -name=write -rw=write -ioengine=libaio -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db
write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/119.3MB/0KB /s] [0/30.6K/0 iops] [eta 00m:00s]
write: (groupid=0, jobs=1): err= 0: pid=27258: Wed Aug 14 11:14:36 2019
 write: io=1024.0MB, bw=120443KB/s, iops=30110, runt= 8706msec
 slat (usec): min=3, max=70, avg= 4.31, stdev= 1.56
 clat (usec): min=0, max=8967, avg=28.13, stdev=55.68
  lat (usec): min=22, max=8976, avg=32.53, stdev=55.72
...
 bw (KB /s): min=118480, max=122880, per=100.00%, avg=120467.29, stdev=1525.68
...

Run status group 0 (all jobs):
 WRITE: io=1024.0MB, aggrb=120442KB/s, minb=120442KB/s, maxb=120442KB/s, mint=8706msec, maxt=8706msec

Disk stats (read/write):
...
 sda: ios=0/262147, merge=0/1, ticks=0/6576, in_queue=6568, util=74.32%

可以看到,slat指標出現,lat 近似等于 slat clat 之和(avg平均值);并且換成異步io之后,吞吐量得到了極大的提升,120M左右

六、總結

● fio應該作為磁盤的baseline工具,拿到機器(物理機或者云機器)都應該第一時間對機器的磁盤做一個基線測試,做到心中有數
● 本文所有的測試,都是繞開了緩存,在實際應用中需要將緩存的影響考慮進去

以上所述是小編給大家介紹的linux磁盤順序寫、隨機寫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對三五互聯網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » linux磁盤順序寫、隨機寫的方法

登錄

找回密碼

注冊

主站蜘蛛池模板: 国产熟女精品一区二区三区| 国产精品一区二区三区黄| 亚洲高清有码中文字| 欧美人妻在线一区二区| 亚洲成a人在线播放www| 黑森林福利视频导航| 天堂av网一区二区三区| 日本无人区一区二区三区| 欧美性大战久久久久久| 亚洲日韩国产二区无码| 国产一区二区av天堂热| 中文字幕有码高清日韩| 国产午夜精品福利视频| 91精品国产综合蜜臀蜜臀| 含紧一点h边做边走动免费视频 | 99久久99这里只有免费费精品| 亚洲免费观看一区二区三区| 亚洲www永久成人网站| A级孕妇高清免费毛片| 日韩伦理片| 欧美性猛交xxxx免费看| 亚洲精品男男一区二区| 国产精品中文字幕久久| 日韩有码av中文字幕| 亚洲欧美综合中文| 国产精品黄大片在线播放| 欧洲码亚洲码的区别入口| 性色av不卡一区二区三区| 亚洲午夜无码久久久久蜜臀AV | 国产精品综合色区在线观| 国产偷国产偷亚洲高清人| 欧美奶涨边摸边做爰视频| 日韩一本不卡一区二区三区| 久久碰国产一区二区三区| 夜夜躁狠狠躁2021| 蜜桃成人无码区免费视频网站 | 亚洲码与欧洲码区别入口| 国产精品三级中文字幕| 中文字幕久久人妻熟人妻| 国产成人精品无人区一区| 九九热爱视频精品|