深入理解 Linux磁碟順序寫、隨機寫
2020-06-16 16:33:22
一、前言
● 隨機寫會導致磁頭不停地換道,造成效率的極大降低;順序寫磁頭幾乎不用換道,或者換道的時間很短
● 本文來討論一下兩者具體的差別以及相應的核心呼叫
二、環境準備
元件 | 版本 |
---|---|
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, "220240@6371341277>