2017年3月19日 星期日

fio


== param sync and buffer ==
man fio:
       sync=bool
              Use synchronous I/O for buffered writes.  For the majority of I/O engines, this means using O_SYNC.  Default: false.

       direct=bool

              If true, use non-buffered I/O (usually O_DIRECT).  Default: false.
==
結論: --sync=1必須要搭配--buffer=1使用, 不能搭配--direct=1使用, --sync=1就強制了把io寫到了buffer
解釋: fio "sync=1" 代表 io寫到buffer後, 同時把buffer裡面的資料寫到block device才返回, 通常此選項會搭配"--buffered=1". 也就是說此選項是告訴fio 當寫一筆io到block device時, 要不要同時把buffer的資料寫到block device, 然後才會返回.
在http://172.16.182.40/redmine/issues/2052的測試中 我取出兩個有疑問的fio指令做解釋:
4k随机写, 440K IOPS:
/config/fio --numjobs=8 --iodepth=1024 --runtime=6000 --ioengine=libaio --direct=1 --sync=0 --name task_sdg --rw=randwrite --bs=4k --filename=/dev/md144
4k随机写: 12K IOPS (sync =1 )
/config/fio --numjobs=8 --iodepth=1024 --runtime=6000 --ioengine=libaio --direct=1 --sync=1 --name task_sdg --rw=randwrite --bs=4k --filename=/dev/md144
第一個fio指令: --direct=1 --sync=0, 意思很明顯io直接寫到/dev/md144就馬上返回
第二個fio指令: --direct=1 --sync=1, 我在猜因為"--sync=1", 造成了"--buffer=1", 所以造成"--direct=1"失效了, 因此這意思就變成io先寫到buffer, 然後再寫到/dev/md144, 然後才返回(等同於--buffer=1 --sync=1). 如果我的猜測是正確的,這個指令"--buffered=1 --sync=1"應該會得到跟"--direct=1 --sync=1"一樣的IOPS 12k. 但是我目前手上沒有fs3000 with SSD, 因此我用210的機器做以下實驗, 驗證我的推測試正確的.
Environment: md1331 raid0 made of 2 SAS disks, drbd3988 normal LV created on md1331.
1. 4k写, 264K IOPS (--direct=1 sync=0):
/config/fio --numjobs=8 --runtime=30 -ioengine=libaio --direct=1 --sync=0 --name task_sdg --rw=write --bs=4k --filename=/dev/drbd3988
2. 4k写, 140K IOPS (--direct=1 sync=1):
/config/fio --numjobs=8 --runtime=30 -ioengine=libaio --direct=1 --sync=1 --name task_sdg --rw=write --bs=4k --filename=/dev/drbd3988
3. 4k写, 143K IOPS (--buffer=1 sync=1):
/config/fio --numjobs=8 --runtime=30 -ioengine=libaio --buffer=1 --sync=1 --name task_sdg --rw=write --bs=4k --filename=/dev/drbd3988

== 測試cache hit IOPS ==
fio --name task --rw=randwrite --iodepth=64 --size=500M --runtime=6000 --time_based --loops=1 --direct=1 --invalidate=1 --fsync_on_close=1 --randrepeat=1 --ioengine=libaio --group_reporting --filename=/dev/bcache0

== verify ==
--do_verify=1 --verify=md5 --verify_fatal=1 --verify_dump=1 


--verify_backlog=100, do verify every 100 blocks

kgdb

--0313-- ken 不好意思 请教一下 之前你有交过我 在没有coredump的情况下 可以用gdb直接载入ko.debug, 然后dis -l register_bcache, 我记得使用方式是不是这样, 不过我现在dis -l出现错误^^" [root@...