最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux磁盤順序?qū)憽㈦S機(jī)寫的方法

 更新時間:2019年08月15日 09:34:35   作者:wilson排球  
這篇文章主要介紹了linux磁盤順序?qū)?、隨機(jī)寫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下

一、前言

● 隨機(jī)寫會導(dǎo)致磁頭不停地?fù)Q道,造成效率的極大降低;順序?qū)懘蓬^幾乎不用換道,或者換道的時間很短
● 本文來討論一下兩者具體的差別以及相應(yīng)的內(nèi)核調(diào)用

二、環(huán)境準(zhǔn)備

組件 版本
OS Ubuntu 16.04.4 LTS
fio 2.2.10

三、fio介紹

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

四、同步寫測試

(1)同步隨機(jī)寫

主要采用fio作為測試工具,為了能夠看到系統(tǒng)調(diào)用,使用strace工具,命令看起來是這樣:

先來測試一個隨機(jī)寫

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

提取關(guān)鍵信息

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%

列出了我們需要重點(diǎn)關(guān)注的信息:

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

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

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

再來看內(nèi)核調(diào)用信息:

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
...

隨機(jī)讀每一次寫入之前都要通過lseek去定位當(dāng)前的文件偏移量

同步順序?qū)?/strong>

用剛才的方法來測試順序?qū)?/p>

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左右

再來看一下內(nèi)核調(diào)用:

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
...

由于順序讀,不需要反復(fù)定位文件偏移量,所以能夠?qū)W⒂趯懖僮?/p>

五、slat指標(biāo)

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

異步順序?qū)?,將同步順序?qū)懙拿钐砑?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指標(biāo)出現(xiàn),lat 近似等于 slat + clat 之和(avg平均值);并且換成異步io之后,吞吐量得到了極大的提升,120M左右

六、總結(jié)

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

以上所述是小編給大家介紹的linux磁盤順序?qū)?、隨機(jī)寫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Linux推薦使用Xfce桌面環(huán)境的8個原因

    Linux推薦使用Xfce桌面環(huán)境的8個原因

    今天小編就為大家分享一篇關(guān)于Linux推薦使用Xfce桌面環(huán)境的8個原因,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • 詳解如何在CentOS7中使用Nginx和PHP7-FPM安裝Nextcloud

    詳解如何在CentOS7中使用Nginx和PHP7-FPM安裝Nextcloud

    這篇文章主要介紹了詳解如何在CentOS7中使用Nginx和PHP7-FPM安裝Nextcloud,會通過 Nginx 和 PHP7-FPM 來運(yùn)行 Nextcloud,同時使用 MariaDB 做為數(shù)據(jù)庫系統(tǒng)。
    2017-03-03
  • Centos 7下利用crontab定時執(zhí)行任務(wù)詳解

    Centos 7下利用crontab定時執(zhí)行任務(wù)詳解

    這篇文章主要給大家介紹了關(guān)于Centos 7下利用crontab定時執(zhí)行任務(wù)的相關(guān)資料,文中對crontab進(jìn)行了詳細(xì)的介紹,并給出了一些實例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Linux服務(wù)器選擇什么版本好

    Linux服務(wù)器選擇什么版本好

    服務(wù)器選擇什么版本的linux,這個問題是個老生常談的問題,每個月都有人討論,根據(jù)我運(yùn)維過1000臺 server的經(jīng)驗,回答如下
    2014-03-03
  • Ubuntu下使用python3中的venv創(chuàng)建虛擬環(huán)境

    Ubuntu下使用python3中的venv創(chuàng)建虛擬環(huán)境

    這篇文章主要介紹了Ubuntu下使用python3中的venv創(chuàng)建虛擬環(huán)境,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Linux中環(huán)境變量配置的步驟詳解

    Linux中環(huán)境變量配置的步驟詳解

    Linux中環(huán)境變量包括系統(tǒng)級和用戶級,系統(tǒng)級的環(huán)境變量是每個登錄到系統(tǒng)的用戶都要讀取的系統(tǒng)變量,而用戶級的環(huán)境變量則是該用戶使用系統(tǒng)時加載的環(huán)境變量。所以下面這篇文章主要給大家介紹了關(guān)于Linux中環(huán)境變量配置的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • keeplive+mysql+drbd高可用架構(gòu)安裝步驟

    keeplive+mysql+drbd高可用架構(gòu)安裝步驟

    本地(master)與遠(yuǎn)程主機(jī)(backup)的保證實時同步,如果本地系統(tǒng)出現(xiàn)故障時,遠(yuǎn)程主機(jī)上還會保留有一份相同的數(shù)據(jù),可以繼續(xù)使用.在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣.因為數(shù)據(jù)同時存在于本地主機(jī)和遠(yuǎn)程主機(jī)上,切換時,遠(yuǎn)程主機(jī)只要使用它上面的那份備份數(shù)據(jù)
    2017-08-08
  • Linux中Docker遇到報port?is?already?allocated錯誤

    Linux中Docker遇到報port?is?already?allocated錯誤

    在Linux系統(tǒng)中,如果嘗試綁定一個網(wǎng)絡(luò)服務(wù)到一個已經(jīng)被其他進(jìn)程使用的端口上,你會遇到“port?is?already?allocated”錯誤,這意味著該端口已經(jīng)被另一個進(jìn)程占用,因此無法再次被分配給任何新的服務(wù)
    2024-06-06
  • linux壓縮文件和文件解壓縮命令介紹

    linux壓縮文件和文件解壓縮命令介紹

    大家好,本篇文章主要講的是linux壓縮文件和文件解壓縮命令介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Linux之虛擬機(jī)和主機(jī)互通實現(xiàn)方式

    Linux之虛擬機(jī)和主機(jī)互通實現(xiàn)方式

    這篇文章主要介紹了Linux之虛擬機(jī)和主機(jī)互通實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

师宗县| 巨野县| 夏河县| 当涂县| 微山县| 灵石县| 陇西县| 江北区| 马尔康县| 石屏县| 新郑市| 即墨市| 垫江县| 日土县| 马公市| 嵊州市| 定远县| 社旗县| 泰顺县| 通许县| 舒兰市| 察雅县| 都兰县| 临洮县| 咸宁市| 卫辉市| 韶山市| 高清| 靖边县| 西华县| 留坝县| 义乌市| 南投县| 年辖:市辖区| 新安县| 红河县| 锡林郭勒盟| 南和县| 莆田市| 阜新| 甘孜|