1. 程式人生 > >系統技術非業餘研究 » fio配合cgroup測試儲存裝置IOPS分配

系統技術非業餘研究 » fio配合cgroup測試儲存裝置IOPS分配

隨著包括儲存裝置在內伺服器的能力越來越高,特別是用上了PCIe儲存卡後,IOPS能力通常有10幾萬,馬上過剩。在這種情況下,一臺伺服器可以幹很多事情,在上面跑很多服務。那麼如何保證系統的服務質量是個很重要的事情了。

我們在下來的的專案中傾向於用cgroup來做資源的隔離和限制,原因是cgroup的開銷很小,而且很易用。cgroup 可以參考這裡

我們特別關心cgroup的blkio子模組,他有2種限制模式:
1. throttle,限制每個程序能使用的IOPS或者吞吐量。
2. weight,現在每個程序能使用的IOPS的能力的比例,必須通過CFQ排程器來實現。
文件和具體的引數可以看上面提到的cgroup文件。


要使用blkio的weight限制需要注意幾個事情:
1. 必須走directio, 如果buffered io因為最終寫IO的程序不是發起IO的程序,結果會有很大的偏差。
2. 排程器必須是CFQ。
3. 測試工具必須支援cgroup的相關限制。
4. 最好是隨機的IO。

新版本的支援cgroup的fio可以在這裡下載 git clone git://git.kernel.dk/fio.git, 更多參看這裡

man fio下可以看看cgroup相關的文件:

cgroup=str
Add job to this control group. If it doesn’t exist, it will be created. The system must have a mounted cgroup blkio mount
point for this to work. If your system doesn’t have it mounted, you can do so with:

# mount -t cgroup -o blkio none /cgroup

cgroup_weight=int
Set the weight of the cgroup to this value. See the documentation that comes with the kernel, allowed values are in the
range of 100..1000.

cgroup_nodelete=bool
Normally fio will delete the cgroups it has created after the job completion. To override this behavior and to leave
cgroups around after the job completion, set cgroup_nodelete=1. This can be useful if one wants to inspect various cgroup
files after job completion. Default: false

這裡只是粗粗演示下如何用fio按照比例來限制程序使用的IO, 我們來構造下場景:

我們在建立2個1g大小的檔案,進行隨機的混合讀寫,一個給500的比例,一個給100的比例,總的比例是1000。那麼理論上可以看到A程序可以得到多於B程序5倍的IO能力。

操作如下:

$ cat test.fio
[global]
bs=4k
ioengine=libaio
iodepth=32
direct=1
rw=randrw
rwmixread=90
time_based
runtime=180
cgroup_nodelete=1

[test1]
filename=test1.dat
size=1G
cgroup_weight=500
cgroup=test1

[test2]
filename=test2.dat
size=1G
cgroup_weight=100
cgroup=test2

$ cat /sys/block/sda/queue/scheduler 
noop deadline [cfq] 

$ sudo fio test.fio
test1: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
test2: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio 2.0
Starting 2 processes
Jobs: 2 (f=2): [mm] [5.5% done] [618K/90K /s] [151 /22  iops] [eta 02m:51s]
...

我們從另外一個終端可以看到IO能力的分配情況:

$ sudo lssubsys -am
cpuset
net_cls
perf_event
cpu /sys/fs/cgroup/cpu
cpuacct /sys/fs/cgroup/cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
blkio /sys/fs/cgroup/blkio
$ pgrep -x fio
3837
3839
3840
$ cat /sys/fs/cgroup/blkio/test1/tasks
3839
$ cat /sys/fs/cgroup/blkio/test2/tasks
3840
$ sudo iotop

差不多是5:1的比例,符合預期。

我們在使用的時候會擔心kernel的穩定性,所以用fio能夠大壓力,長時間的來測試cgroup模組的可靠性,收集資料作為應用的參考。

祝玩得開心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

No related posts.

相關推薦

系統技術業餘研究 » fio配合cgroup測試儲存裝置IOPS分配

隨著包括儲存裝置在內伺服器的能力越來越高,特別是用上了PCIe儲存卡後,IOPS能力通常有10幾萬,馬上過剩。在這種情況下,一臺伺服器可以幹很多事情,在上面跑很多服務。那麼如何保證系統的服務質量是個很重要的事情了。 我們在下來的的專案中傾向於用cgroup來做資源的隔離和限制,原因是cgroup的

系統技術業餘研究 » Fio IO效能測試工具介紹

官網:http://freshmeat.net/projects/fio/ fio is an I/O tool meant to be used both for benchmark and stress/hardware verification. It has support for 13

系統技術業餘研究 » Fio模擬Mysql伺服器IO壓力指令碼

fio是個非常好用的io壓力模擬工具,功能非常齊全, 有興趣的同學參看 這裡。 這裡我用fio模擬我們線上mysql伺服器的壓力來為廠家送來的pci-ssd卡做壓力測試,底下是指令碼(已經測試正確),也許有的同學有用。 $ cat mysql-test # QPS: 40000(10 core

系統技術業餘研究 » Fio壓測工具和io佇列深度理解和誤區

Fio 是個強大的IO壓力測試工具,我之前寫過不少fio的使用和實踐,參見 這裡。 隨著塊裝置的發展,特別是SSD盤的出現,裝置的並行度越來越高。利用好這些裝置,有個訣竅就是提高裝置的iodepth, 一把餵給裝置更多的IO請求,讓電梯演算法和裝置有機會來安排合併以及內部並行處理,提高總體效率。

系統技術業餘研究 » fio效能測試工具新添圖形前端gfio

gfio.c: In function ‘gfio_ui_setup_log’: gfio.c:322: error: ‘GtkTreeSelection’ undeclared (first use in this function) gfio.c:322: error: ‘selection

系統技術業餘研究 » Linux下方便的塊裝置檢視工具lsblk

之前在Linux下看有什麼塊裝置,通常都用fdisk什麼的或者直接ls /dev/ 人肉去看看, 很土,不方便。 前二天在江楓的網站上看到了介紹的lsblk,這玩意不錯,推薦給大家。 這個工具屬於util-linux-ng包,在RHEL 6.1上是安裝好的啦,直接用就好。 ubuntu高版本下也有

系統技術業餘研究 » Linux下Fio和Blktrace模擬塊裝置的訪問模式

我們在做塊裝置調優的時候, 我們關心的是塊裝置是如何被訪問的,也就是訪問模式(比如說每次從什麼地方讀,每次讀多少塊,熱點在哪裡等),至於每次讀寫的什麼資料我們並不關心. 這些模式當然可以自己去構造,但是如果能把真實應用的訪問模式記錄下來,並且在調優的時候能重放,我們就可以一遍又一遍的除錯直到達到最

系統技術業餘研究

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » MySQL資料庫架構的演化觀察

MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql

系統技術業餘研究 » inet_dist_connect_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 推薦工作機會

最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗:
 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海

系統技術業餘研究 » 新的工作和研究方向

和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w

系統技術業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 2017升的最快的幾個資料庫無責任點評

ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼

系統技術業餘研究 » Erlang 17.5引入+hpds命令列控制程序預設字典大小

Erlang 17.5釋出引入控制程序預設字典大小的命令列引數: Erlang/OTP 17.5 has been released Written by Henrik, 01 Apr 2015 Some highlights of the release are: ERTS: Added co

系統技術業餘研究 » inet_dist_listen_options

Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke

系統技術業餘研究 » 老生常談: ulimit問題及其影響

ulimit最初設計是用來限制程序對資源的使用情況的,因為早期的系統系統資源包括記憶體,CPU都是非常有限的,系統要保持公平,就要限制大家的使用,以達到一個相對公平的環境。以下是典型的機器預設的限制情況: $ ulimit -a core file size (blocks,

系統技術業餘研究 » 求賢帖

原創文章,轉載請註明: 轉載自系統技術非業餘研究 本文連結地址: 求賢帖 作為一個優秀的工程師,你其實不缺少才華,你缺少的是神一樣的隊友、充滿挑戰的世界級技術難題,和一個可以施展自己才華的大舞臺。加入阿里核心系統資料庫開發團隊吧,你缺的這裡都有。來吧,戳這裡,給我們見識你的機會:http://b

系統技術業餘研究 » Erlang R16B03釋出,R17已發力

Erlang R16B03釋出了,通常03版本是bug fix版本,進入生產版本,官方的說明如下: OTP R16B03 is a service release with mostly a number of small corrections and user contributions. B

系統技術業餘研究 » Erlang R13B04 Installation

R13B04後erlang的原始碼編譯為了考慮移植性,就改變了編譯方式,以下是官方wiki上的安裝文件: 1. Cloning Here are the basic steps to build Erlang/OTP in the Git repository. Start by cloning: